<?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>121880</bug_id>
          
          <creation_ts>2013-09-24 16:38:58 -0700</creation_ts>
          <short_desc>More refactoring to make the LevelDB dependencies of IDB more obvious</short_desc>
          <delta_ts>2013-09-25 11:02:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>932791</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-24 16:38:58 -0700</bug_when>
    <thetext>More refactoring to make the LevelDB dependencies of IDB more obvious

The beginnings of a clean platform abstraction were there, but not quite realized.

Moving more files to the leveldb subdirectory and renaming them will help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932793</commentid>
    <comment_count>1</comment_count>
      <attachid>212521</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-24 16:42:37 -0700</bug_when>
    <thetext>Created attachment 212521
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932795</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-24 16:44:40 -0700</bug_when>
    <thetext>Attachment 212521 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBBackingStore.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:26:  #ifndef header guard has wrong style, please use: IDBBackingStoreLevelDB_h  [build/header_guard] [5]
Source/WebCore/Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:47:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 21 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>932799</commentid>
    <comment_count>3</comment_count>
      <attachid>212521</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-24 16:46:07 -0700</bug_when>
    <thetext>Comment on attachment 212521
Patch v1 

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

&gt; Source/WebCore/ChangeLog:33
&gt; +        (WebCore::LevelDBFactory::~LevelDBFactory):
&gt; +        (WebCore::IDBBackingStore::createWeakPtr):
&gt; +        (WebCore::IDBBackingStore::RecordIdentifier::RecordIdentifier):
&gt; +        (WebCore::IDBBackingStore::RecordIdentifier::primaryKey):
&gt; +        (WebCore::IDBBackingStore::RecordIdentifier::version):
&gt; +        (WebCore::IDBBackingStore::RecordIdentifier::reset):
&gt; +        (WebCore::IDBBackingStore::Cursor::key):
&gt; +        (WebCore::IDBBackingStore::Cursor::primaryKey):
&gt; +        (WebCore::IDBBackingStore::Cursor::recordIdentifier):
&gt; +        (WebCore::IDBBackingStore::Cursor::~Cursor):
&gt; +        (WebCore::IDBBackingStore::Cursor::Cursor):
&gt; +        (WebCore::IDBBackingStore::Transaction::reset):
&gt; +        (WebCore::IDBBackingStore::Transaction::levelDBTransactionFrom):

Can you please remove all the function names? They are of no use whatsoever, but waste space in svn log, buildbot console and such. And make reviewing harder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932801</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-24 16:47:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 212521 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=212521&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:33
&gt; &gt; +        (WebCore::LevelDBFactory::~LevelDBFactory):
&gt; &gt; +        (WebCore::IDBBackingStore::createWeakPtr):
&gt; &gt; +        (WebCore::IDBBackingStore::RecordIdentifier::RecordIdentifier):
&gt; &gt; +        (WebCore::IDBBackingStore::RecordIdentifier::primaryKey):
&gt; &gt; +        (WebCore::IDBBackingStore::RecordIdentifier::version):
&gt; &gt; +        (WebCore::IDBBackingStore::RecordIdentifier::reset):
&gt; &gt; +        (WebCore::IDBBackingStore::Cursor::key):
&gt; &gt; +        (WebCore::IDBBackingStore::Cursor::primaryKey):
&gt; &gt; +        (WebCore::IDBBackingStore::Cursor::recordIdentifier):
&gt; &gt; +        (WebCore::IDBBackingStore::Cursor::~Cursor):
&gt; &gt; +        (WebCore::IDBBackingStore::Cursor::Cursor):
&gt; &gt; +        (WebCore::IDBBackingStore::Transaction::reset):
&gt; &gt; +        (WebCore::IDBBackingStore::Transaction::levelDBTransactionFrom):
&gt; 
&gt; Can you please remove all the function names? They are of no use whatsoever, but waste space in svn log, buildbot console and such. And make reviewing harder.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932806</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-24 16:54:45 -0700</bug_when>
    <thetext>Style issues are preexisting.  Going to wait for buildbots to churn (would love for my attempt at keeping the build working to have worked)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932810</commentid>
    <comment_count>6</comment_count>
      <attachid>212521</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-24 17:14:30 -0700</bug_when>
    <thetext>Comment on attachment 212521
Patch v1 

Attachment 212521 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/2161070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932812</commentid>
    <comment_count>7</comment_count>
      <attachid>212521</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-24 17:17:22 -0700</bug_when>
    <thetext>Comment on attachment 212521
Patch v1 

Attachment 212521 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/2164060</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932814</commentid>
    <comment_count>8</comment_count>
      <attachid>212521</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-09-24 17:20:44 -0700</bug_when>
    <thetext>Comment on attachment 212521
Patch v1 

Attachment 212521 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/2195046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932858</commentid>
    <comment_count>9</comment_count>
      <attachid>212521</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-09-24 19:24:20 -0700</bug_when>
    <thetext>Comment on attachment 212521
Patch v1 

Attachment 212521 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/2231006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933037</commentid>
    <comment_count>10</comment_count>
      <attachid>212586</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-25 09:09:14 -0700</bug_when>
    <thetext>Created attachment 212586
Patch v2 - Try to appease all the bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933054</commentid>
    <comment_count>11</comment_count>
      <attachid>212591</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-25 09:51:56 -0700</bug_when>
    <thetext>Created attachment 212591
Patch v3 - Hopefully this applies!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933055</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-25 09:54:49 -0700</bug_when>
    <thetext>Attachment 212591 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/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBBackingStore.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;]&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:26:  #ifndef header guard has wrong style, please use: IDBBackingStoreLevelDB_h  [build/header_guard] [5]
Source/WebCore/Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:47:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 23 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>933086</commentid>
    <comment_count>13</comment_count>
      <attachid>212591</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-25 10:53:07 -0700</bug_when>
    <thetext>Comment on attachment 212591
Patch v3 - Hopefully this applies!

Attachment 212591 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/2281043</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933094</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-25 10:58:44 -0700</bug_when>
    <thetext>Okay, figured out the GTK include problem and the EFL source problem.  I&apos;ll just be landing this next one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933095</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-25 10:59:33 -0700</bug_when>
    <thetext>(But will be uploading to EWS for email notifications, too)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933098</commentid>
    <comment_count>16</comment_count>
      <attachid>212605</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-25 11:02:35 -0700</bug_when>
    <thetext>Created attachment 212605
Landed patch (for ews)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933099</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-09-25 11:02:57 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/156406</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212521</attachid>
            <date>2013-09-24 16:42:37 -0700</date>
            <delta_ts>2013-09-25 09:09:14 -0700</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>363479</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNGQ1YTNiLi5lZWMwNjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjI2
IEBACiAyMDEzLTA5LTI0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAg
ICAgICBNb3JlIHJlZmFjdG9yaW5nIHRvIG1ha2UgdGhlIExldmVsREIgZGVwZW5kZW5jaWVzIG9m
IElEQiBtb3JlIG9idmlvdXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjE4ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBiZWhhdmlvcikuCisKKyAgICAg
ICAgUHJvamVjdCBmaWxlIHVwZGF0ZXM6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKworICAgICAgICBGaWxlIGFuZCBjbGFzcyByZW5hbWVzOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0ZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNw
cDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxl
dmVsREIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oLgorICAgICAgICAoV2ViQ29yZTo6TGV2ZWxEQkZhY3Rvcnk6On5MZXZl
bERCRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZVdl
YWtQdHIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlm
aWVyOjpSZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllcjo6cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpyZXNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpwcmltYXJ5S2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpyZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjp+Q3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
TGV2ZWxEQjo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yQmFja2VuZExldmVsREI6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJh
Y2tlbmRMZXZlbERCOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZExldmVsREI6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246
OkN1cnNvckFkdmFuY2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZExldmVsREI6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZExldmVsREI6OkN1cnNvclByZWZldGNo
SXRlcmF0aW9uT3BlcmF0aW9uOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6SURCQ3Vyc29yQmFja2Vu
ZExldmVsREIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZExldmVsREI6On5J
REJDdXJzb3JCYWNrZW5kTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNr
ZW5kTGV2ZWxEQjo6Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kTGV2ZWxEQjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JC
YWNrZW5kTGV2ZWxEQjo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRMZXZlbERC
OjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kTGV2
ZWxEQjo6cHJlZmV0Y2hDb250aW51ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNr
ZW5kTGV2ZWxEQjo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZExldmVsREI6OnByZWZldGNoUmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZExldmVsREI6OmNsb3NlKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERC
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3JCYWNrZW5kSW1wbC5oLgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZExldmVs
REI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6
cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
QmFja2VuZExldmVsREI6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
TGV2ZWxEQjo6cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
TGV2ZWxEQjo6dmFsdWUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OkRlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
OjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVj
dFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9u
OjpEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNp
b25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpE
ZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlB1dE9wZXJhdGlvbjo6UHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNldElu
ZGV4ZXNSZWFkeU9wZXJhdGlvbjo6U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvdW50T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRP
cGVyYXRpb246OkNvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdl
T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRp
b246OkRlbGV0ZVJhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPcGVyYXRpb246OkNsZWFyT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlBl
bmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OlBlbmRpbmdPcGVuQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlBlbmRpbmdPcGVuQ2FsbDo6ZGF0YWJhc2VD
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
UGVuZGluZ09wZW5DYWxsOjp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZExldmVsREI6OlBlbmRpbmdPcGVuQ2FsbDo6dHJhbnNhY3Rpb25JZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpQZW5kaW5nT3BlbkNhbGw6OlBl
bmRpbmdPcGVuQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OlBlbmRpbmdEZWxldGVDYWxsOjpjYWxsYmFja3MpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6UGVuZGluZ0RlbGV0ZUNh
bGw6OlBlbmRpbmdEZWxldGVDYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFkZE9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnJlbW92ZU9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFkZEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnJlbW92ZUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6Om9wZW5JbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp+SURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCOjpiYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6c2V0SW5kZXhLZXlzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnNldEluZGV4ZXNSZWFk
eSk6CisgICAgICAgIChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6b3BlbkN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFy
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25TdGFydGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnRyYW5zYWN0aW9uRmlu
aXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJh
bnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y29ubmVjdGlv
bkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnBy
b2Nlc3NQZW5kaW5nQ2FsbHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQjo6Y3JlYXRlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQjo6b3BlbkNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmlzRGVs
ZXRlRGF0YWJhc2VCbG9ja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI6OmRlbGV0ZURhdGFiYXNlRmluYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxl
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmguCisgICAgICAgIChXZWJDb3JlOjpJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCOjptZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEltcGwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5XZWFrTWFwKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVGaWxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
VW5pcXVlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZExl
dmVsREI6OklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZExldmVsREI6On5JREJGYWN0b3J5QmFja2VuZExldmVsREIpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpyZW1vdmVJREJEYXRhYmFzZUJh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpnZXRE
YXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qjo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQjo6b3Blbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oLgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kTGV2ZWxEQjo6SW5kZXhXcml0ZXI6OnZlcmlmeUluZGV4S2V5cyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlcjo6d3JpdGVJbmRl
eEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6
SW5kZXhXcml0ZXI6OmFkZGluZ0tleUFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpnZW5lcmF0ZUtleSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjp1cGRhdGVLZXlHZW5lcmF0
b3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oLgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6SW5kZXhXcml0ZXI6OkluZGV4V3JpdGVyKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp+SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6aXNUYXNrUXVldWVFbXB0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpoYXNQZW5kaW5nVGFza3MpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6cmVnaXN0ZXJPcGVuQ3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnVu
cmVnaXN0ZXJPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREI6OnJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQjo6dGFza1RpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6Y2xvc2VPcGVuQ3Vyc29ycyk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmguCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCOjpPcGVyYXRpb246On5PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6bW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjpzY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6YWRkUHJlZW1wdGl2ZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmRpZENvbXBsZXRlUHJlZW1w
dGl2ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI6OmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6OmRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxl
dmVsREI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yTGV2ZWxEQjo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6On5JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yTGV2ZWxEQjo6ZGlkQ3JlYXRlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OmRpZFN0YXJ0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OmRp
ZEZpbmlzaFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3JMZXZlbERCOjppc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yTGV2ZWxEQjo6cHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZG9TY29wZXNPdmVybGFwKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpjYW5SdW5UcmFuc2FjdGlvbik6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2
ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oLgorCisKKzIwMTMtMDktMjQgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIFJlbW92ZSBJREJUcmFuc2FjdGlvbkNhbGxi
YWNrcy5oIGZyb20gdGhlIC54Y29kZXByb2osIGFzIGl0J3MgZ29uZSBmcm9tIHRoZSByZXBvc2l0
b3J5LgogCiAgICAgICAgIFJ1YmJlcnN0YW1wZWQgYnkgQW5kZXJzIENhcmxzc29uIGFuZCBBbGV4
ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYzU2M2Ez
Ny4uOTEwODk3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xODg2LDE3ICsx
ODg2LDE3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJBbnkuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCi0JU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERC
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJz
b3JCYWNrZW5kTGV2ZWxEQi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3JXaXRoVmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JXaXRoVmFsdWUuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIFwKQEAgLTE5MDgsOCArMTkwOCw4IEBAIHdlYmNv
cmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJF
dmVudERpc3BhdGNoZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJFdmVudERpc3BhdGNoZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVs
REIuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5LmNwcCBcCkBAIC0xOTI2LDggKzE5MjYsOCBAQCB3ZWJjb3JlX21vZHVs
ZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJMZXZlbERCQ29kaW5nLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk1ldGFkYXRhLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxE
Qi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9wZW5EQlJlcXVlc3QuY3BwIFwKQEAgLTE5MzcsMTAgKzE5MzcsMTAgQEAgd2ViY29yZV9t
b2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYWNpbmcuaCBc
Ci0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JM
ZXZlbERCLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FlZThk
MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgTE9HX0VSUk9SKCJUaGUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6Om9wZW4gaXMgY3VycmVudGx5IGVt
cHR5Iik7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwotfQotCi1Q
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5NZW1vcnko
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmKQotewotICAgIExPR19FUlJPUigiVGhlIGRl
ZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0b3JlOjpvcGVuSW5NZW1vcnkgaXMg
Y3VycmVudGx5IGVtcHR5Iik7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PigpOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3Qs
IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKikKLXsKLSAgICBMT0dfRVJST1Io
IlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0
U3RvcmVzIGlzIGN1cnJlbnRseSBlbXB0eSIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nKQotewotICAg
IExPR19FUlJPUigiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0b3Jl
OjpDdXJzb3I6OmFkdmFuY2UgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKGNv
bnN0IElEQktleSosIEl0ZXJhdG9yU3RhdGUpCi17Ci0gICAgTE9HX0VSUk9SKCJUaGUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Y29udGludWVGdW5j
dGlvbiBpcyBjdXJyZW50bHkgZW1wdHkiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUlEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElEQkJhY2tpbmdTdG9yZSogYmFj
a2luZ1N0b3JlKQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotewotfQotCi12
b2lkIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luKCkKLXsKLSAgICBMT0dfRVJS
T1IoIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmJlZ2luIGlzIGN1cnJlbnRseSBlbXB0eSIpOwotfQotCi1ib29sIElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCi17Ci0gICAgTE9HX0VSUk9SKCJUaGUgZGVmYXVs
dCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQg
aXMgY3VycmVudGx5IGVtcHR5Iik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQotewotICAgIExPR19FUlJPUigi
VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6cm9sbGJhY2sgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzY3MGZkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0x
LDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAotI2RlZmluZSBJ
REJCYWNraW5nU3RvcmVfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUgIkluZGV4
ZWREQi5oIgotI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxldmVsREJU
cmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgTGV2ZWxEQkNvbXBhcmF0b3I7Ci1jbGFzcyBMZXZlbERCRGF0YWJhc2U7Ci1j
bGFzcyBMZXZlbERCVHJhbnNhY3Rpb247Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJLZXlSYW5n
ZTsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1jbGFzcyBM
ZXZlbERCRmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+TGV2ZWxEQkZhY3RvcnkoKSB7
IH0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBvcGVuTGV2ZWxEQihj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBMZXZlbERCQ29tcGFyYXRvciopID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZGVzdHJveUxldmVsREIoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgPSAw
OwotfTsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFj
a2luZ1N0b3JlPiB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgVHJhbnNhY3Rpb247Ci0KLSAgICB2aXJ0
dWFsIH5JREJCYWNraW5nU3RvcmUoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBjb25z
dCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBj
b25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBMZXZlbERCRmFjdG9yeSopOwotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkluTWVtb3J5KFNlY3VyaXR5T3JpZ2lu
KiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IG9wZW5Jbk1lbW9yeShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKLSAgICBXZWFrUHRyPElEQkJhY2tpbmdTdG9y
ZT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigp
OyB9Ci0KLSAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdldERhdGFiYXNlTmFtZXMoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkRhdGFiYXNlTWV0YWRhdGEqLCBib29sJiBzdWNjZXNzKSBXQVJOX1VOVVNFRF9SRVRVUk47
Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRf
dCYgcm93SWQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24o
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50
VmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSk7Ci0KLSAgICBib29sIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIElE
QkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKikgV0FSTl9VTlVTRURfUkVUVVJOOwot
ICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7Ci0g
ICAgdmlydHVhbCBib29sIGRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgV0FSTl9V
TlVTRURfUkVUVVJOOwotCi0gICAgY2xhc3MgUmVjb3JkSWRlbnRpZmllciB7Ci0gICAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZElkZW50aWZpZXIpOwotICAgIHB1YmxpYzoKLSAgICAg
ICAgUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0
X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFyeUtleSksIG1fdmVyc2lvbih2ZXJzaW9u
KSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOyB9Ci0gICAgICAgIFJlY29yZElkZW50
aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3ZlcnNpb24oLTEpIHsgfQotCi0gICAgICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5
OyB9Ci0gICAgICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsg
fQotICAgICAgICB2b2lkIHJlc2V0KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50
NjRfdCB2ZXJzaW9uKSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7IG1fdmVyc2lvbiA9IHZl
cnNpb247IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlL
ZXk7IC8vIEZJWE1FOiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZSAqZW5jb2Rl
ZCogdmVyc2lvbiBvZiB0aGUga2V5LgotICAgICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICB9
OwotCi0gICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIFZlY3RvcjxjaGFyPiYgcmVjb3JkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmly
dHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopIFdBUk5fVU5VU0VE
X1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgY2xlYXJPYmplY3RTdG9yZShJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QmIGN1cnJlbnROdW1iZXIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAg
ICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpIFdBUk5fVU5V
U0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3Jk
SWRlbnRpZmllciwgYm9vbCYgZm91bmQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBp
c011bHRpRW50cnkpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
SW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBSZWNvcmRJZGVudGlmaWVy
JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltYXJ5S2V5Vmlh
SW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFJl
ZlB0cjxJREJLZXk+JiBwcmltYXJ5S2V5KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVh
bCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXks
IGJvb2wmIGV4aXN0cykgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgY2xhc3MgQ3Vyc29yIDog
cHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIEl0
ZXJhdG9yU3RhdGUgewotICAgICAgICAgICAgUmVhZHkgPSAwLAotICAgICAgICAgICAgU2Vlawot
ICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBDdXJzb3JPcHRpb25zIHsKLSAgICAgICAgICAg
IGludDY0X3QgZGF0YWJhc2VJZDsKLSAgICAgICAgICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZDsK
LSAgICAgICAgICAgIGludDY0X3QgaW5kZXhJZDsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBs
b3dLZXk7Ci0gICAgICAgICAgICBib29sIGxvd09wZW47Ci0gICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gaGlnaEtleTsKLSAgICAgICAgICAgIGJvb2wgaGlnaE9wZW47Ci0gICAgICAgICAgICBib29s
IGZvcndhcmQ7Ci0gICAgICAgICAgICBib29sIHVuaXF1ZTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9
Ci0gICAgICAgIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwgSXRlcmF0
b3JTdGF0ZSA9IFNlZWspOwotICAgICAgICBib29sIGFkdmFuY2UodW5zaWduZWQgbG9uZyk7Ci0g
ICAgICAgIGJvb2wgZmlyc3RTZWVrKCk7Ci0KLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gY2xvbmUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
aW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsgfQotICAgICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7
IH0KLSAgICAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCkgPSAwOwotCi0gICAgcHJv
dGVjdGVkOgotICAgICAgICBDdXJzb3IoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgICAgIDogbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNv
ck9wdGlvbnMpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBleHBsaWNpdCBDdXJzb3Io
Y29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IqIG90aGVyKTsKLQotICAgICAgICB2aXJ0dWFs
IFZlY3RvcjxjaGFyPiBlbmNvZGVLZXkoY29uc3QgSURCS2V5JikgPSAwOwotCi0gICAgICAgIGJv
b2wgaXNQYXN0Qm91bmRzKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wgaGF2ZUVudGVyZWRSYW5nZSgp
IGNvbnN0OwotCi0gICAgICAgIExldmVsREJUcmFuc2FjdGlvbiogbV90cmFuc2FjdGlvbjsKLSAg
ICAgICAgY29uc3QgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlvbnM7Ci0jaWYgVVNFKExFVkVM
REIpCi0gICAgICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7Ci0jZW5kaWYK
LSAgICAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5OwotICAgICAgICBJREJCYWNraW5n
U3RvcmU6OlJlY29yZElkZW50aWZpZXIgbV9yZWNvcmRJZGVudGlmaWVyOwotICAgIH07Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJz
b3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlD
dXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbik7Ci0KLSAgICBj
bGFzcyBUcmFuc2FjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBUcmFuc2Fj
dGlvbihJREJCYWNraW5nU3RvcmUqKTsKLSAgICAgICAgdm9pZCBiZWdpbigpOwotICAgICAgICBi
b29sIGNvbW1pdCgpOwotICAgICAgICB2b2lkIHJvbGxiYWNrKCk7Ci0gICAgICAgIHZvaWQgcmVz
ZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IDA7Ci0jaWYgVVNF
KExFVkVMREIpCi0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uID0gMDsKLSNlbmRpZgotICAgICAg
ICB9Ci0KLSAgICAgICAgc3RhdGljIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uRnJvbShUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgICAgIHsKLSNpZiBVU0UoTEVW
RUxEQikKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUcmFuc2FjdGlvbio+KHRyYW5z
YWN0aW9uKS0+bV90cmFuc2FjdGlvbi5nZXQoKTsKLSNlbHNlCi0gICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBJREJCYWNr
aW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOwotI2lmIFVTRShMRVZFTERCKQotICAgICAgICBSZWZQ
dHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotI2VuZGlmCi0gICAgfTsKLQot
cHJvdGVjdGVkOgotICAgIElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiwgUGFzc093blB0cjxMZXZlbERCQ29tcGFyYXRv
cj4pOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgdXNlZCBmb3IgbW9ja2luZy4KLSAgICBJREJCYWNr
aW5nU3RvcmUoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2ZWxE
QkRhdGFiYXNlPiwgUGFzc093blB0cjxMZXZlbERCQ29tcGFyYXRvcj4pOwotCi0gICAgYm9vbCBm
aW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LCBib29sJiBmb3VuZCk7
Ci0gICAgYm9vbCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcCopIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBtX2RiOwotICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9y
OwotICAgIFdlYWtQdHJGYWN0b3J5PElEQkJhY2tpbmdTdG9yZT4gbV93ZWFrRmFjdG9yeTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jZW5kaWYgLy8gSURCQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhM2NmNi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
Ci0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBs
OjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmRJbXBsPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIGtleSwgY2FsbGJhY2tzKSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
KTsKLXByaXZhdGU6Ci0gICAgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2N1cnNvcihjdXJzb3Ip
Ci0gICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNv
cjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2tleTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JBZHZh
bmNlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
biB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
Y3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDdXJzb3JBZHZhbmNl
T3BlcmF0aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAg
IEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
Y3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAgICAgICAgLCBtX2NvdW50KGNv
dW50KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0g
ICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNvcjsKLSAgICB1bnNpZ25lZCBs
b25nIG1fY291bnQ7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19Owot
Ci1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3Is
IGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlv
bk9wZXJhdGlvbihjdXJzb3IsIG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2
YXRlOgotICAgIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQotICAg
ICAgICAsIG1fbnVtYmVyVG9GZXRjaChudW1iZXJUb0ZldGNoKQotICAgICAgICAsIG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbXBsPiBtX2N1cnNvcjsKLSAgICBpbnQgbV9udW1iZXJUb0ZldGNoOwotICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotSURCQ3Vyc29yQmFja2VuZEltcGw6OklE
QkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1
cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgOiBtX3Rhc2tUeXBlKHRh
c2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCi0gICAgLCBtX2RhdGFiYXNl
KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlv
bikKLSAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICwgbV9jdXJzb3Io
Y3Vyc29yKQotICAgICwgbV9jbG9zZWQoZmFsc2UpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+cmVn
aXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwotfQotCi1JREJDdXJzb3JCYWNrZW5kSW1wbDo6fklEQkN1
cnNvckJhY2tlbmRJbXBsKCkKLXsKLSAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1
cnNvcih0aGlzKTsKLX0KLQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1
bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29y
QmFja2VuZEltcGw6OmNvbnRpbnVlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rh
c2tUeXBlLCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXksIGNhbGxi
YWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZhbmNlKHVuc2lnbmVk
IGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2Vw
dGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmFkdmFu
Y2UiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
Ci0gICAgbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEN1cnNvckFkdmFuY2VPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBjb3VudCwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFj
a2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopCi17Ci0gICAgSURCX1RSQUNFKCJDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7
Ci0gICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1fY3Vyc29yLT5tX2N1cnNvci0+YWR2
YW5jZShtX2NvdW50KSkgewotICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9j
dXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7
Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlv
bjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKikKLXsKLSAgICBJREJfVFJBQ0Uo
IkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29y
IHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24obV9rZXkuZ2V0KCkpKSB7
Ci0gICAgICAgIG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhtX2N1cnNvci0+a2V5KCksIG1f
Y3Vyc29yLT5wcmltYXJ5S2V5KCksIG1fY3Vyc29yLT52YWx1ZSgpKTsKLX0KLQotdm9pZCBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJz
b3JCYWNrZW5kSW1wbDo6ZGVsZXRlIik7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUo
KSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwotICAgIFJlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRlKG1fY3Vyc29yLT5wcmltYXJ5S2V5
KCkpOwotICAgIG1fZGF0YWJhc2UtPmRlbGV0ZVJhbmdlKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1f
b2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MpOwotfQotCi12
b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0Zl
dGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2Rl
JikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRp
bnVlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JQcmVm
ZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG51bWJlclRvRmV0Y2gsIGNhbGxi
YWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0
ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKikKLXsK
LSAgICBJREJfVFJBQ0UoIkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uIik7Ci0KLSAg
ICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxJ
REJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsKLSAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gPiBmb3VuZFZhbHVlczsKLQotICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3IpCi0gICAgICAg
IG1fY3Vyc29yLT5tX3NhdmVkQ3Vyc29yID0gbV9jdXJzb3ItPm1fY3Vyc29yLT5jbG9uZSgpOwot
Ci0gICAgY29uc3Qgc2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7Ci0g
ICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
bnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAgICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8
ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpIHsKLSAgICAgICAgICAg
IG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvdW5kS2V5cy5hcHBlbmQobV9jdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7Ci0g
ICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFy
eUtleSgpKTsKLQotICAgICAgICBzd2l0Y2ggKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUpIHsKLSAg
ICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvcktleU9ubHk6Ci0gICAgICAgICAgICBmb3VuZFZh
bHVlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvcktleUFuZFZhbHVlOgotICAgICAgICAgICAg
c2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS0+c2l6ZSgpOwotICAg
ICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1
cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKLSAgICAgICAgc2l6ZUVzdGlt
YXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsK
LQotICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEtleXMuc2l6ZSgpKSB7Ci0gICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQ
cmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtleXMsIGZvdW5kVmFsdWVzKTsKLX0KLQot
dm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNo
ZXMsIGludCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRj
aFJlc2V0Iik7Ci0gICAgbV9jdXJzb3IgPSBtX3NhdmVkQ3Vyc29yOwotICAgIG1fc2F2ZWRDdXJz
b3IgPSAwOwotCi0gICAgaWYgKG1fY2xvc2VkKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1f
Y3Vyc29yKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZFByZWZldGNoZXM7ICsr
aSkgewotICAgICAgICAgICAgYm9vbCBvayA9IG1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKCk7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNsb3NlKCkKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSIpOwotICAgIG1fY2xvc2VkID0gdHJ1ZTsKLSAg
ICBtX2N1cnNvci5jbGVhcigpOwotICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JC
YWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVlMjZiYi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRl
ZiBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkN1cnNvckJhY2tlbmRJbXBsX2gK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQktleVJhbmdlOwotCi1jbGFzcyBJREJDdXJz
b3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSW5kZXhlZERCOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkp
OwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSW5kZXhlZERC
OjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIHRyYW5z
YWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkN1cnNvckJh
Y2tlbmRJbXBsKCk7Ci0KLSAgICAvLyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlCi0gICAgdmly
dHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHByZWZldGNoQ29udGludWUo
aW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywg
aW50IHVudXNlZFByZWZldGNoZXMpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRs
ZXJDYWxsYmFjaygpIHsgfQotCi0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3Vyc29yLT5rZXkoKTsgfQotICAgIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsgfQotICAgIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIChtX2N1cnNvclR5cGUg
PT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSA/IDAgOiBtX2N1cnNvci0+dmFsdWUoKTsgfQot
ICAgIHZvaWQgY2xvc2UoKTsKLQotcHJpdmF0ZToKLSAgICBJREJDdXJzb3JCYWNrZW5kSW1wbChQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLQotICAgIGNsYXNzIEN1cnNvckl0
ZXJhdGlvbk9wZXJhdGlvbjsKLSAgICBjbGFzcyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOwotICAg
IGNsYXNzIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOwotCi0gICAgSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOwotICAgIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fY3Vyc29yOyAvLyBN
dXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgbV90cmFuc2FjdGlvbi4KLSAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IG1fc2F2ZWRDdXJzb3I7IC8vIE11c3QgYmUgZGVzdHJveWVkIGJl
Zm9yZSBtX3RyYW5zYWN0aW9uLgotCi0gICAgYm9vbCBtX2Nsb3NlZDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
ZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3NDM3YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEzODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklE
QkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIK
LSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5n
ZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVj
dFN0b3JlTWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1f
YmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRh
dGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Ci19OwotCi1jbGFzcyBEZWxldGVPYmpl
Y3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0
YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1w
cml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tp
bmdTdG9yZTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVN
ZXRhZGF0YTsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFu
Z2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IGRhdGFiYXNlLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oZGF0YWJhc2UsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBW
ZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGF0YWJhc2UsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQot
ICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgICAgICAsIG1fdmVy
c2lvbih2ZXJzaW9uKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAg
LCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBpbnQ2
NF90IG1fdHJhbnNhY3Rpb25JZDsKLSAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci19OwotCi1jbGFzcyBDcmVhdGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
biB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBv
YmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9y
dE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAg
ICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAg
Y29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci19OwotCi1jbGFzcyBEZWxldGVPYmplY3RT
dG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3Rv
cmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3Jl
QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7Ci0gICAgfQotICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0g
ICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAg
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwotfTsKLQotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29u
c3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVy
YXRpb24oZGF0YWJhc2UsIHByZXZpb3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJzaW9uKSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
KTsKLXByaXZhdGU6Ci0gICAgVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNW
ZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKLSAgICAgICAgOiBtX2RhdGFiYXNl
KGRhdGFiYXNlKQotICAgICAgICAsIG1fcHJldmlvdXNWZXJzaW9uKHByZXZpb3VzVmVyc2lvbikK
LSAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihwcmV2aW91c0ludFZlcnNpb24pCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNl
OwotICAgIFN0cmluZyBtX3ByZXZpb3VzVmVyc2lvbjsKLSAgICBpbnQ2NF90IG1fcHJldmlvdXNJ
bnRWZXJzaW9uOwotfTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdTdG9y
ZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIENy
ZWF0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSkKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleE1ldGFk
YXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFJlZlB0cjxJREJC
YWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RT
dG9yZUlkOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotfTsK
LQotY2xhc3MgRGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIERlbGV0ZUluZGV4T3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAg
ICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9vYmplY3RTdG9y
ZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRh
dGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1f
YmFja2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotfTsKLQotY2xhc3MgQ3JlYXRl
SW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3Bl
cmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6
Ci0gICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fb2JqZWN0U3Rv
cmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQotICAgIHsK
LSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRh
YmFzZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2
NF90IG1faW5kZXhJZDsKLX07Ci0KLWNsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBw
dWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVy
YXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJp
dmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFi
YXNlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAs
IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5k
ZXhNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIEdldE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBtZXRhZGF0
YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNr
cykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEdldE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0
YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9y
ZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKG1ldGFkYXRhLmlkKQotICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJ
ZChpbmRleElkKQotICAgICAgICAsIG1fa2V5UGF0aChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0
KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCi0gICAgICAgICwgbV9hdXRvSW5jcmVtZW50KG1ldGFk
YXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0b0luY3JlbWVudCkKLSAgICAg
ICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JU
eXBlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAg
ICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5pZCA9
PSBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAg
ICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5k
ZXhJZDsKLSAgICBjb25zdCBJREJLZXlQYXRoIG1fa2V5UGF0aDsKLSAgICBjb25zdCBib29sIG1f
YXV0b0luY3JlbWVudDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7
Ci0gICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBjb25z
dCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIFB1dE9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUs
IGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5k
ZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5
cz4mIGluZGV4S2V5cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHV0T3Bl
cmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRl
OgotICAgIFB1dE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzKQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9y
ZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVj
dFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fdmFsdWUodmFsdWUpCi0gICAgICAgICwg
bV9rZXkoa2V5KQotICAgICAgICAsIG1fcHV0TW9kZShwdXRNb2RlKQotICAgICAgICAsIG1fY2Fs
bGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2luZGV4SWRzKGluZGV4SWRzKQotICAgICAg
ICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBt
X2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0
b3JlOwotICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fdmFsdWU7Ci0gICAgY29uc3Qg
UmVmUHRyPElEQktleT4gbV9rZXk7Ci0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlOjpQdXRNb2RlIG1fcHV0TW9kZTsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKLSAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9pbmRleElkczsKLSAgICBj
b25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IG1faW5k
ZXhLZXlzOwotfTsKLQotY2xhc3MgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUo
c2l6ZV90IGluZGV4Q291bnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleENvdW50KSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAg
U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQotICAgICAgICA6IG1f
aW5kZXhDb3VudChpbmRleENvdW50KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBzaXplX3Qg
bV9pbmRleENvdW50OwotfTsKLQotY2xhc3MgT3BlbkN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rp
b24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuQ3Vyc29yT3Bl
cmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci1wcml2YXRlOgotICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUg
dGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRh
YmFzZUlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAg
ICAsIG1faW5kZXhJZChpbmRleElkKQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0g
ICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICAgICAsIG1fY3Vyc29yVHlwZShj
dXJzb3JUeXBlKQotICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCi0gICAgICAgICwgbV9j
YWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJh
c2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2
NF90IG1faW5kZXhJZDsKLSAgICBjb25zdCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJh
bmdlOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwot
ICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgY29uc3Qg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOwotICAgIGNv
bnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgQ291bnRP
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q291bnRPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ291bnRP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAg
ICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChv
YmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQotICAgICAgICAsIG1f
a2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAg
IHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdT
dG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICBjb25z
dCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24oYmFja2lu
Z1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKLXByaXZhdGU6Ci0gICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBt
X29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJh
bmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0g
ICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29u
c3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIGNvbnN0
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgQ2xlYXJPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ2xlYXJPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBDbGVhck9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
LSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRh
YmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3Jl
SWQpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25z
dCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVuQ2FsbCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8UGVuZGluZ09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
ZGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9u
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nT3BlbkNhbGwoY2Fs
bGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbikpOwotICAg
IH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9j
YWxsYmFja3M7IH0KLSAgICBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFz
ZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3M7IH0KLSAgICBpbnQ2NF90
IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAgICBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSWQ7IH0KLQotcHJpdmF0ZToKLSAgICBQ
ZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQotICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxi
YWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tzKQot
ICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0
cmFuc2FjdGlvbklkKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2Fs
bGJhY2tzOwotICAgIGludDY0X3QgbV92ZXJzaW9uOwotICAgIGNvbnN0IGludDY0X3QgbV90cmFu
c2FjdGlvbklkOwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0Rl
bGV0ZUNhbGwgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdEZWxldGVD
YWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2FsbGJhY2tzKSk7
Ci0gICAgfQotICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVy
biBtX2NhbGxiYWNrczsgfQotCi1wcml2YXRlOgotICAgIFBlbmRpbmdEZWxldGVDYWxsKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9jYWxsYmFja3MoY2Fs
bGJhY2tzKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Ci19OwotCi1QYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSog
ZGF0YWJhc2UsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1
bmlxdWVJZGVudGlmaWVyKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBi
YWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwobmFtZSwgZGF0YWJh
c2UsIGZhY3RvcnksIHVuaXF1ZUlkZW50aWZpZXIpKTsKLSAgICBpZiAoIWJhY2tlbmQtPm9wZW5J
bnRlcm5hbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYmFja2VuZC5yZWxlYXNl
KCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCBjaGFyKiBOb1N0cmluZ1ZlcnNpb24gPSAiIjsK
LX0KLQotSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25z
dCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKLSAg
ICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAsIG1fbWV0YWRhdGEobmFtZSwg
SW52YWxpZElkLCBOb1N0cmluZ1ZlcnNpb24sIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbiwgSW52YWxpZElkKQotICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCi0g
ICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKSkKLSAgICAsIG1fY2xvc2luZ0Nvbm5l
Y3Rpb24oZmFsc2UpCi17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0b3JlKGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9iamVjdFN0
b3JlSWQpCi17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhv
YmplY3RTdG9yZS5pZCkpOwotICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5t
YXhPYmplY3RTdG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgICAgIG1fbWV0YWRh
dGEubWF4T2JqZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7Ci0gICAgfQotICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3RvcmUpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJl
bW92ZShvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjph
ZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0
b3JlSWQpOwotCi0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4
LmlkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKLSAg
ICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAg
ICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKLSAg
ICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4SWQ7Ci0gICAgfQotICAg
IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlSW5kZXgoaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5k
ZXhJZCkpOwotICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwotICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Ci19
Ci0KLWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKCkKLXsKLSAgICBi
b29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldElE
QkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAmbV9tZXRhZGF0YSwgc3VjY2Vzcyk7
Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09IChtX21ldGFkYXRhLmlkICE9IElu
dmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxkIiwgc3VjY2VzcyA/ICJ0cnVlIiA6
ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pZCkpOwotICAgIGlm
ICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAg
cmV0dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCwgJm1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzKTsKLQotICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+Y3Jl
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIG1fbWV0YWRhdGEudmVyc2lv
biwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFkYXRhLmlkKTsKLX0KLQotSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwoKQotewotfQotCi1QYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YmFja2luZ1N0b3Jl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotewotICAgIElEQl9UUkFDRSgiSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLSAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25D
aGFuZ2UpOwotCi0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhv
YmplY3RTdG9yZUlkKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1l
dGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQpOwotCi0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFj
a2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQpKTsKLQotICAgIGFkZE9iamVjdFN0
b3JlKG9iamVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIENyZWF0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRp
b24iKTsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkt
PmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5h
bWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3JlTWV0YWRhdGEu
YXV0b0luY3JlbWVudCkpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9y
ID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3Rv
cmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVj
dFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewot
ICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUi
KTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Z2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9y
ZU1ldGFkYXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7Ci0gICAgcmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmVJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVu
aXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlSW5kZXgiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNT
RVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKCFvYmplY3RTdG9y
ZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRh
IGluZGV4TWV0YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5
KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVyYXRpb246
OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSksIENy
ZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkKSk7Ci0KLSAgICBhZGRJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLCBpbmRl
eElkKTsKLX0KLQotdm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkNyZWF0ZUlu
ZGV4T3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgodHJh
bnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1l
dGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5p
cXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8g
Y3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBDcmVhdGVJbmRleEFib3J0T3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQot
ewotICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOwotICAgIEFTU0VS
VF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0gICAgbV9kYXRhYmFzZS0+cmVt
b3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAgSURCX1RSQUNFKCJJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQp
OwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7
Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQo
b2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0gICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmluZGV4ZXMuZ2V0KGluZGV4
SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlv
bjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSwg
RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4TWV0YWRhdGEpKTsKLQotICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQp
OwotfQotCi12b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiRGVsZXRlSW5kZXhP
cGVyYXRpb24iKTsKLSAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCB0cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQpOwotICAgIGlm
ICghb2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0
cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBpbmRleCAnJXMnLiIsIG1faW5k
ZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFi
b3J0KGVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJ
REJfVFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOwotICAgIG1fZGF0YWJhc2UtPmFkZEluZGV4KG1f
b2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvbW1pdChpbnQ2NF90IHRy
YW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29t
bWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBz
byBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBi
ZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0
IHRoYXQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCkt
PmNvbW1pdCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93
biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3Jl
IHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4KLSAgICBpZiAobV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCi0gICAgICAgIG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRo
ZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlz
IGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0gICAgaWYgKG1fdHJhbnNhY3Rpb25z
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5
T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJREJfVFJB
Q0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQp
OwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1f
bWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSW5k
ZXhlZERCOjpDdXJzb3JLZXlPbmx5IDogSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2Fs
bGJhY2tzKSk7Ci19Ci0KLXZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiR2V0T3BlcmF0aW9u
Iik7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0KLSAgICBpZiAobV9rZXlSYW5nZS0+aXNP
bmx5S2V5KCkpCi0gICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vy
c29yOwotICAgICAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZCkgewotICAgICAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNv
cktleU9ubHkpOwotICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlv
bgotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5P
YmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWRE
Qjo6Q3Vyc29yTmV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJz
b3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKLSAgICAgICAgICAgICAgICAvLyBJ
bmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICAgICAgYmFja2luZ1N0
b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZh
bHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgICAgIG1fY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleTsKLSAgICBib29sIG9rOwotICAgIGlmIChtX2luZGV4SWQg
PT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIC8vIE9iamVjdCBTdG9y
ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKLSAgICAg
ICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFs
dWUpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGguaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjph
ZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVy
OjphZG9wdFZlY3Rvcih2YWx1ZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICB9Ci0KLSAgICAv
LyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGluZGV4ZXMuCi0gICAgb2sgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4
LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXByaW1hcnlLZXkpIHsKLSAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSB7Ci0gICAg
ICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAg
IFZlY3RvcjxjaGFyPiB2YWx1ZTsKLSAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9v
YmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgdmFsdWUpOwotICAgIGlmICghb2spIHsKLSAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQu
IikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkg
ewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQYXRoLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2
YWx1ZSksIHByaW1hcnlLZXksIG1fa2V5UGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVl
KSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHV0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
dmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsKLSAgICBJREJfVFJBQ0Uo
IklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwot
ICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNh
Y3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwotCi0gICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKG9iamVj
dFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOwotCi0gICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwg
aWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tz
LCBpbmRleElkcywgaW5kZXhLZXlzKSk7Ci19Ci0KLXZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFD
RSgiUHV0T3BlcmF0aW9uIik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLSAgICBBU1NFUlQobV9pbmRleElkcy5zaXpl
KCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKLSAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZh
bHNlOwotCi0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgIGlmIChtX3B1dE1vZGUgIT0gSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUgJiYgbV9vYmplY3RTdG9yZS5h
dXRvSW5jcmVtZW50ICYmICFtX2tleSkgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5j
S2V5ID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJhdGVLZXkobV9iYWNraW5nU3Rv
cmUsIHRyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOwotICAgICAg
ICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFs
aWQoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVt
IGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICB9IGVsc2UKLSAgICAgICAg
a2V5ID0gbV9rZXk7Ci0KLSAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKLQotICAg
IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwotICAg
IGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5KSB7
Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBvayA9IG1fYmFja2lu
Z1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksICZyZWNv
cmRJZGVudGlmaWVyLCBmb3VuZCk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0
ZW5jZS4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZv
dW5kKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktleSBhbHJl
YWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIFZlY3RvcjxPd25QdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwotICAgIFN0cmluZyBlcnJvck1l
c3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0gICAgYm9vbCBiYWNr
aW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3Jp
dGVycyh0cmFuc2FjdGlvbiwgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG1fZGF0YWJhc2VJZCwgbV9v
YmplY3RTdG9yZSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1faW5kZXhJZHMsIG1faW5kZXhLZXlz
LCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBp
ZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBr
ZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW9iZXlzQ29uc3RyYWlu
dHMpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRv
bid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5z
YWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFj
a2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgJnJlY29y
ZElkZW50aWZpZXIpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVy
cm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAg
ICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdyaXRlciogaW5kZXhXcml0ZXIg
PSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4
S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9iYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOwot
ICAgIH0KLQotICAgIGlmIChtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgbV9wdXRNb2Rl
ICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIGtleS0+dHlw
ZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgewotICAgICAgICBib29sIG9rID0gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKG1fYmFja2luZ1N0b3JlLCB0cmFu
c2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCBrZXkuZ2V0KCksICFrZXlX
YXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQot
ewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzIik7
Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkg
PSBwcnBQcmltYXJ5S2V5OwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IHN0b3JlID0gYmFj
a2luZ1N0b3JlKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJv
bm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29t
cGxleGl0eS4KLSAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRl
bnRpZmllcjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IHN0b3JlLT5r
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgJnJlY29yZElk
ZW50aWZpZXIsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5h
Ym9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cy4iKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkgewotICAgICAgICBSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHNl
dHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgdHJhbnNhY3Rp
b24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyPiA+
IGluZGV4V3JpdGVyczsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGJvb2wgb2JleXND
b25zdHJhaW50cyA9IGZhbHNlOwotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmpl
Y3RTdG9yZUlkKTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBzdG9yZS5nZXQoKSwg
aWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBp
bmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMp
OwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAgICAgICB0cmFuc2FjdGlvbi0+
YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBp
bmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW9iZXlzQ29u
c3RyYWludHMpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3Nh
Z2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQo
KTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIs
ICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlk
KCksIG9iamVjdFN0b3JlSWQpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKQotewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7Ci0KLSAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlv
bklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1w
dGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKGluZGV4SWRzLnNpemUo
KSkpOwotfQotCi12b2lkIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIlNldElu
ZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRl
eENvdW50OyArK2kpCi0gICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVF
dmVudCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFi
YXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwg
aWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25s
eSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFs
dWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAg
IElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOwotCi0gICAgLy8gVGhlIGZyb250ZW5k
IGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCi0gICAg
Ly8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBhbnkg
ZWFybGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFybHkg
bW9kZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCBp
biBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0gICAgaWYgKG1fdGFza1R5cGUgPT0g
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKLSAgICAgICAgdHJh
bnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0gICAgaWYgKG1faW5kZXhJZCA9PSBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlw
ZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
bV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFT
U0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFz
ayk7Ci0gICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5
KQotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5J
bmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
bV9kaXJlY3Rpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKCFi
YWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0
aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19j
YXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGU+KG1fdGFza1R5cGUpKTsK
LSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tl
bmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2N1cnNvclR5cGUsIHRh
c2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZUlkKTsKLSAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1
cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y291bnQo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjb3VudCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
ID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rp
b24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgQ291bnRPcGVy
YXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17
Ci0gICAgSURCX1RSQUNFKCJDb3VudE9wZXJhdGlvbiIpOwotICAgIHVpbnQzMl90IGNvdW50ID0g
MDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
cjsKLQotICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQot
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0
b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpD
dXJzb3JOZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFj
a2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1f
a2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgaWYgKCFiYWNraW5n
U3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgICsrY291bnQ7Ci0gICAg
fSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLQotICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZVJhbmdlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYg
KCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0KLSAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5n
U3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLX0KLQot
dm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9u
Iik7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
bV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICBpZiAoYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmICghbV9iYWNraW5n
U3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVj
b3JkSWRlbnRpZmllcigpKSkgewotICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNv
ci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3Vj
Y2VzcygpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsZWFyKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y2xlYXIiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
KQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soQ2xlYXJPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0
U3RvcmVJZCwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNF
KCJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+
Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2JqZWN0IHN0b3JlIikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLX0KLQotdm9pZCBEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7Ci0gICAgaWYgKCFvaykgewot
ICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3Jt
YXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0
U3RvcmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KGVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24i
KTsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtX2RhdGFiYXNlLT5pZCgpOwotICAgIGludDY0
X3Qgb2xkVmVyc2lvbiA9IG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50VmVyc2lvbjsKLSAgICBB
U1NFUlQobV92ZXJzaW9uID4gb2xkVmVyc2lvbik7Ci0gICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0
YS5pbnRWZXJzaW9uID0gbV92ZXJzaW9uOwotICAgIGlmICghbV9kYXRhYmFzZS0+bV9iYWNraW5n
U3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRW
ZXJzaW9uKSkgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZSB3aGVuIHVwZGF0aW5nIHZlcnNp
b24uIik7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NF
UlQoIW1fZGF0YWJhc2UtPm1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKLSAgICBtX2RhdGFiYXNl
LT5tX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKG1fY2Fs
bGJhY2tzLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uSWQsIG1fdmVyc2lvbik7
Ci0gICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCBtX2RhdGFiYXNl
LCBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgewotICAgICAg
ICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwotICAgIH0KLX0K
LQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCi17Ci0gICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNh
Y3Rpb247Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT5p
ZCgpKSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi0+aWQoKSkg
PT0gdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2Fj
dGlvbi0+aWQoKSk7Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmdl
dCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgICAg
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwotICAgIH0KLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRG
aXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9u
KQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9
IHBycFRyYW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Ci0gICAgICAgIC8vIElmIHRoaXMgd2FzIGFu
IG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwgYmUgYSAic2Vjb25kCi0gICAgICAg
IC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBwcm9jZXNzUGVuZGluZ0NhbGxz
LgotICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBsb25nZXIgc3VwcG9ydCBzZXRWZXJzaW9u
LCBhc3NlcnQgc3VjaCBhIHRoaW5nLgotICAgICAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW4pIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFi
b3J0RXJyb3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCBpbiB1cGdy
YWRlbmVlZGVkIGV2ZW50IGhhbmRsZXIuIikpOwotICAgICAgICAgICAgbV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW4ucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nQ2Fs
bHMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rp
b25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkKLSAgICAg
ICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi1zaXplX3QgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y29ubmVjdGlvbkNvdW50KCkKLXsKLSAgICAvLyBUaGlzIGRvZXMgbm90IGluY2x1ZGUg
cGVuZGluZyBvcGVuIGNhbGxzLCBhcyB0aG9zZSBzaG91bGQgbm90IGJsb2NrIHZlcnNpb24gY2hh
bmdlcyBhbmQgZGVsZXRlcy4KLSAgICByZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXpl
KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxs
cygpCi17Ci0gICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKSB7Ci0gICAgICAgIEFTU0VS
VChtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09IG1fbWV0YWRhdGEuaW50VmVy
c2lvbik7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7Ci0gICAg
ICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMs
IHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxl
YXNlKCk7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBwZW5kaW5n
IGRlbGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4KLSAgICB9Ci0KLSAgICAvLyBO
b3RlIHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1Y2UgcXVl
dWUtY2h1cm4gYW5kCi0gICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7IGRlbGV0
ZURhdGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCi0gICAgLy8gcmVxdWV1ZSB0aGVpciBj
YWxscyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wZW5kaW5n
RGVsZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkg
ewotICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0g
bV9wZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGRlbGV0ZURhdGFiYXNl
RmluYWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKLSAgICB9Ci0gICAgLy8gZGVs
ZXRlRGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCi0gICAgQVNTRVJU
KG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBUaGlzIGNoZWNrIGlz
IGFsc28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0aW9uIHdvdWxkIGp1c3QgcmVxdWV1
ZSBpdHMgY2FsbHMuCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYg
YW4gb3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4KLSAgICBE
ZXF1ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRpbmdPcGVuQ2FsbHM7Ci0gICAgbV9w
ZW5kaW5nT3BlbkNhbGxzLnN3YXAocGVuZGluZ09wZW5DYWxscyk7Ci0gICAgd2hpbGUgKCFwZW5k
aW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBPd25QdHI8UGVuZGluZ09wZW5DYWxs
PiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgpOwotICAgICAg
ICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nT3Bl
bkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2FsbC0+dHJhbnNhY3Rpb25J
ZCgpLCBwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSk7Ci0gICAgfQotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQotewotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZSh0cmFuc2FjdGlvbklkLCBjYWxsYmFja3MsIG9iamVj
dFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT4obW9kZSks
IHRoaXMpOwotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25J
ZCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbklkLCB0cmFuc2FjdGlvbi5n
ZXQoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24o
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCB2ZXJzaW9uKQotewotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS5nZXQoKSk7
Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAg
IFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRh
YmFzZUNhbGxiYWNrczsKLQotICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgp
IHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgewotICAgICAgICBtX3BlbmRp
bmdPcGVuQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgZGF0
YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChtX21ldGFkYXRhLmlkID09IEludmFsaWRJZCkgewotICAgICAg
ICAvLyBUaGUgZGF0YWJhc2Ugd2FzIGRlbGV0ZWQgdGhlbiBpbW1lZGlhdGVseSByZS1vcGVuZWQ7
IG9wZW5JbnRlcm5hbCgpIHJlY3JlYXRlcyBpdCBpbiB0aGUgYmFja2luZyBzdG9yZS4KLSAgICAg
ICAgaWYgKG9wZW5JbnRlcm5hbCgpKQotICAgICAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaW50
VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwotICAgICAgICAgICAgUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yOwotICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAi
SW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIG5vIHZlcnNpb24gc3BlY2lmaWVk
LiI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZzo6
Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggdmVyc2lvbiAlbGxk
Iiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2ZXJzaW9uKSk7Ci0gICAgICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlz
dCBmcm9tIGl0cyBsYWNrIG9mIGVpdGhlciB0eXBlIG9mIHZlcnNpb24uCi0gICAgYm9vbCBpc05l
d0RhdGFiYXNlID0gbV9tZXRhZGF0YS52ZXJzaW9uID09IE5vU3RyaW5nVmVyc2lvbiAmJiBtX21l
dGFkYXRhLmludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwot
Ci0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNp
b24pIHsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgY29tbWVudHMgd2FzIHJlbGF0ZWQgdG8gQ2hy
b21pdW0gY29kZS4gSXQgbWF5IGJlIGluY29ycmVjdAotICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0
cyBvbmx5IC0gc2tpcCB1cGdyYWRlIHN0ZXBzLiBDYWxsaW5nIGZyb20gc2NyaXB0IHdpdGggRGVm
YXVsdEludFZlcnNpb24gdGhyb3dzIGV4Y2VwdGlvbi4KLSAgICAgICAgQVNTRVJUKGlzTmV3RGF0
YWJhc2UpOwotICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxi
YWNrcyk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRh
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKSB7Ci0gICAgICAgIGlmICghaXNOZXdEYXRhYmFz
ZSkgewotICAgICAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPihkYXRhYmFzZUNhbGxiYWNrcykpOwotICAgICAgICAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlzIHNw
ZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0byAx
LgotICAgICAgICB2ZXJzaW9uID0gMTsKLSAgICB9Ci0KLSAgICBpZiAodmVyc2lvbiA+IG1fbWV0
YWRhdGEuaW50VmVyc2lvbikgewotICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHZlcnNpb24gPCBtX21ldGFkYXRhLmlu
dFZlcnNpb24pIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1h
dCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICglbGxkKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5n
IHZlcnNpb24gKCVsbGQpLiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmVyc2lvbiksIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBBU1NFUlQodmVyc2lvbiA9PSBtX21ldGFkYXRhLmludFZlcnNpb24p
OwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKLSAg
ICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24o
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7Ci0gICAgQVNTRVJU
KGNhbGxiYWNrcyk7Ci0gICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VD
YWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMg
dGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5k
aW5nIHNldC4KLSAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAg
ICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS5pbnRWZXJzaW9uLCByZXF1ZXN0
ZWRWZXJzaW9uKTsKLSAgICB9Ci0gICAgLy8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRp
bCBhbGwgdGhlIHZlcnNpb24gY2hhbmdlIGV2ZW50cyBhcmUKLSAgICAvLyBkZWxpdmVyZWQgYW5k
IHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNhbGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5n
Ci0gICAgLy8gb3IgZmlyaW5nIGEgYmxvY2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxk
IGJlIGNvbnNpc3RlbnQgd2l0aCBob3cKLSAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29y
cmVjdGx5KSBkaWQgaXQuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2Nr
ZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRpbCB0aGUgZnJvbnRlbmQKLSAgICAvLyB0ZWxscyB1cyB0
aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVudHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCi0gICAgaWYg
KGNvbm5lY3Rpb25Db3VudCgpKQotICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFk
YXRhLmludFZlcnNpb24pOwotICAgIC8vIEZJWE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLgotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nT3BlbkNh
bGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNlQ2Fs
bGJhY2tzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7Ci0gICAgY3Jl
YXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0
b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVk
VmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIFZlcnNpb25DaGFuZ2VBYm9y
dE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5p
bnRWZXJzaW9uKSk7Ci0KLSAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKLSAg
ICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci19Ci0KLXZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkp
IHsKLSAgICAgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRo
ZSBldmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGlu
ZyBzZXQuCi0gICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEuaW50
VmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBj
b25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUg
cmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICAgICAgY2FsbGJhY2tzLT5v
bkJsb2NrZWQobV9tZXRhZGF0YS5pbnRWZXJzaW9uKTsKLSAgICAgICAgbV9wZW5kaW5nRGVsZXRl
Q2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzLnJlbGVhc2Uo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlbGV0ZURhdGFiYXNlRmluYWwoY2Fs
bGJhY2tzLnJlbGVhc2UoKSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6aXNE
ZWxldGVEYXRhYmFzZUJsb2NrZWQoKQotewotICAgIHJldHVybiBjb25uZWN0aW9uQ291bnQoKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZUZpbmFsKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgQVNTRVJUKCFpc0RlbGV0
ZURhdGFiYXNlQmxvY2tlZCgpKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIGlm
ICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbWV0YWRhdGEubmFtZSkpIHsKLSAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgZGF0
YWJhc2UuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fbWV0YWRhdGEudmVyc2lv
biA9IE5vU3RyaW5nVmVyc2lvbjsKLSAgICBtX21ldGFkYXRhLmlkID0gSW52YWxpZElkOwotICAg
IG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lv
bjsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jbGVhcigpOwotICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIEFT
U0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNrcykpOwotCi0gICAg
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tzKTsKLSAgICBpZiAobV9wZW5k
aW5nU2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmRhdGFiYXNlQ2Fs
bGJhY2tzKCkgPT0gY2FsbGJhY2tzKSB7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVu
LT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsK
LSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOwotICAgIH0KLQotICAg
IGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3IgdG8gcHJvY2VzcyBhIHBlbmRp
bmcgb3BlbiBjYWxsCi0gICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJlZW50ZXJpbmcgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y2xvc2UuIFRoZW4gdGhlCi0gICAgLy8gYmFja2VuZCB3b3VsZCBiZSBy
ZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBjb25uZWN0aW9uLCBhbmQK
LSAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxlZCBjbG9zZS4KLSAgICAv
LyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBpbiBjYXNlIG9mIHJlZW50
cmFuY3kuCi0gICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAg
ICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24obV9jbG9zaW5nQ29ubmVj
dGlvbiwgdHJ1ZSk7Ci0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotCi0gICAgLy8gRklYTUU6
IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2FzZXMgYmVsb3cuCi0gICAg
aWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLnNpemUoKSAmJiAh
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7Ci0gICAgICAgIFRyYW5zYWN0aW9uTWFwIHRy
YW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIpOwotICAgICAgICBmb3Ig
KFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0gdHJhbnNhY3Rpb25z
LnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9ucy52YWx1ZXMoKS5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPmFib3J0KGVycm9yKTsKLQotICAgICAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKLQotICAgICAgICBtX2JhY2tpbmdT
dG9yZS5jbGVhcigpOwotCi0gICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFs
c2UgaW4gdW5pdCB0ZXN0cy4KLSAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7Ci0gICAgICAgIGlm
IChtX2ZhY3RvcnkpCi0gICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFj
a2VuZChtX2lkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBDcmVhdGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIp
OwotICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0gICAgbV9k
YXRhYmFzZS0+cmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBE
ZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiRGVsZXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFu
c2FjdGlvbik7Ci0gICAgbV9kYXRhYmFzZS0+YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1l
dGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJB
Q0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVF9VTlVTRUQodHJh
bnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0gICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS52ZXJz
aW9uID0gbV9wcmV2aW91c1ZlcnNpb247Ci0gICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRW
ZXJzaW9uID0gbV9wcmV2aW91c0ludFZlcnNpb247Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTNiZmEwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbF9oCi0KLSNpbmNs
dWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUg
PHN0ZGludC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJCYWNraW5nU3RvcmU7
Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKLWNsYXNz
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsIDogcHVibGljIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0
b3JlKiBkYXRhYmFzZSwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlx
dWVJZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7Ci0K
LSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29uc3Q7Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOwotICAgIGludDY0X3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0gICAgdm9pZCBhZGRPYmplY3RTdG9y
ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhPYmplY3RTdG9y
ZUlkKTsKLSAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
Ci0gICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOwotICAgIHZvaWQgcmVtb3ZlSW5kZXgo
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAgdm9pZCBvcGVu
Q29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbik7Ci0g
ICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh
ZGF0YTsgfQotCi0gICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVh
bCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IGF1dG9JbmNyZW1lbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJ
ZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJh
bnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQpOwotCi0gICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsg
fQotICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRB
bmRDb21wbGV0ZUZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwot
ICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNv
cihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOwot
Ci1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25z
dCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwotCi0gICAgYm9vbCBvcGVuSW50ZXJuYWwoKTsK
LSAgICB2b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7Ci0gICAgc2l6ZV90IGNvbm5lY3Rp
b25Db3VudCgpOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotCi0gICAgYm9vbCBp
c0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VGaW5hbChQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgY2xhc3MgVmVyc2lvbkNoYW5nZU9wZXJh
dGlvbjsKLQotICAgIC8vIFdoZW4gYSAidmVyc2lvbmNoYW5nZSIgdHJhbnNhY3Rpb24gYWJvcnRz
LCB0aGVzZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBvYmplY3QgaGllcmFyY2h5LgotICAgIGNsYXNz
IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IG1fYmFja2luZ1N0b3JlOwotICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsK
LQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0
byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhl
IHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3Jy
eS4KLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7Ci0KLSAgICBP
d25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
OwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3J1bm5pbmdWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb247Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCo+IFRyYW5zYWN0aW9uTWFwOwotICAgIFRyYW5zYWN0aW9uTWFw
IG1fdHJhbnNhY3Rpb25zOwotCi0gICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOwotICAgIERlcXVl
PE93blB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwotICAgIE93blB0
cjxQZW5kaW5nT3BlbkNhbGw+IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuOwotCi0gICAgY2xhc3Mg
UGVuZGluZ0RlbGV0ZUNhbGw7Ci0gICAgRGVxdWU8T3duUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+
IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwotCi0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7Ci0gICAgRGF0YWJh
c2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKLQotICAgIGJvb2wgbV9jbG9z
aW5nQ29ubmVjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0K
LSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGUxOTdjLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgot
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFt
ZSBNPgotc3RhdGljIHZvaWQgY2xlYW5XZWFrTWFwKEhhc2hNYXA8SywgV2Vha1B0cjxNPiA+JiBt
YXApCi17Ci0gICAgSGFzaE1hcDxLLCBXZWFrUHRyPE0+ID4gb3RoZXI7Ci0gICAgb3RoZXIuc3dh
cChtYXApOwotCi0gICAgdHlwZW5hbWUgSGFzaE1hcDxLLCBXZWFrUHRyPE0+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOwotICAgIHdoaWxlIChpdGVyICE9IG90aGVyLmVu
ZCgpKSB7Ci0gICAgICAgIGlmIChpdGVyLT52YWx1ZS5nZXQoKSkKLSAgICAgICAgICAgIG1hcC5z
ZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7Ci0gICAgICAgICsraXRlcjsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgY29tcHV0ZUZpbGVJZGVudGlmaWVyKFNlY3VyaXR5T3JpZ2luKiBzZWN1
cml0eU9yaWdpbikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBsZXZlbERCRmlsZVN1ZmZpeFtd
ID0gIkAxIjsKLSAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
ICsgbGV2ZWxEQkZpbGVTdWZmaXg7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29tcHV0ZVVuaXF1ZUlk
ZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4pCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbikg
KyBuYW1lOwotfQotCi1JREJGYWN0b3J5QmFja2VuZEltcGw6OklEQkZhY3RvcnlCYWNrZW5kSW1w
bCgpCi17Ci19Ci0KLUlEQkZhY3RvcnlCYWNrZW5kSW1wbDo6fklEQkZhY3RvcnlCYWNrZW5kSW1w
bCgpCi17Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJEYXRhYmFz
ZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQotewotICAgIEFTU0VSVCht
X2RhdGFiYXNlQmFja2VuZE1hcC5jb250YWlucyh1bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgbV9k
YXRhYmFzZUJhY2tlbmRNYXAucmVtb3ZlKHVuaXF1ZUlkZW50aWZpZXIpOwotfQotCi12b2lkIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdp
biwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1l
cyIpOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNr
aW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAgIGlmICghYmFja2lu
Z1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLndlYmtpdEdldERhdGFiYXNlTmFt
ZXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLQotICAgIFZlY3Rv
cjxTdHJpbmc+IGZvdW5kTmFtZXMgPSBiYWNraW5nU3RvcmUtPmdldERhdGFiYXNlTmFtZXMoKTsK
LSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZvdW5kTmFtZXMu
YmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5lbmQoKTsgKytpdCkKLSAgICAgICAgZGF0YWJhc2VO
YW1lcy0+YXBwZW5kKCppdCk7Ci0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhkYXRhYmFzZU5h
bWVzLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQotewotICAgIElE
Ql9UUkFDRSgiSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSIpOwotICAgIGNv
bnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFt
ZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjpp
dGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7
Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8v
IElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBk
ZWxldGUgdGhlCi0gICAgICAgIC8vIGRhdGFiYXNlLgotICAgICAgICBpdC0+dmFsdWUtPmRlbGV0
ZURhdGFiYXNlKGNhbGxiYWNrcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBG
SVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRo
cmVhZC4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFj
a2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLSAgICBpZiAoIWJhY2tp
bmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
ciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9yIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZS4iKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5h
bWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYg
KGRhdGFiYXNlQmFja2VuZCkgewotICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5p
cXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLSAgICAgICAgZGF0YWJhc2VC
YWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwotICAgICAgICBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNyZWF0aW5nIGRhdGFiYXNlIGJh
Y2tlbmQgZm9yIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZS4iKSk7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUo
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZGF0YURpcmVjdG9yeSkKLXsKLSAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21w
dXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotICAgIGNvbnN0IGJvb2wg
b3BlbkluTWVtb3J5ID0gZGF0YURpcmVjdG9yeS5pc0VtcHR5KCk7Ci0KLSAgICBJREJCYWNraW5n
U3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50
aWZpZXIpOwotICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkgJiYgaXQyLT52
YWx1ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGl0Mi0+dmFsdWUuZ2V0KCk7Ci0KLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7Ci0gICAgaWYgKG9wZW5Jbk1lbW9yeSkK
LSAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5NZW1vcnkoc2Vj
dXJpdHlPcmlnaW4uZ2V0KCksIGZpbGVJZGVudGlmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIGJh
Y2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwg
ZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIpOwotCi0gICAgaWYgKGJhY2tpbmdTdG9yZSkg
ewotICAgICAgICBjbGVhbldlYWtNYXAobV9iYWNraW5nU3RvcmVNYXApOwotICAgICAgICBtX2Jh
Y2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIsIGJhY2tpbmdTdG9yZS0+Y3JlYXRlV2Vh
a1B0cigpKTsKLSAgICAgICAgLy8gSWYgYW4gaW4tbWVtb3J5IGRhdGFiYXNlLCBiaW5kIGxpZmV0
aW1lIHRvIHRoaXMgZmFjdG9yeSBpbnN0YW5jZS4KLSAgICAgICAgaWYgKG9wZW5Jbk1lbW9yeSkK
LSAgICAgICAgICAgIG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVzLmFkZChiYWNraW5nU3RvcmUp
OwotCi0gICAgICAgIC8vIEFsbCBiYWNraW5nIHN0b3JlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBm
YWN0b3J5IHNob3VsZCBiZSBvZiB0aGUgc2FtZSB0eXBlLgotICAgICAgICBBU1NFUlQobV9zZXNz
aW9uT25seUJhY2tpbmdTdG9yZXMuaXNFbXB0eSgpIHx8IG9wZW5Jbk1lbW9yeSk7Ci0KLSAgICAg
ICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFt
ZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRh
dGFiYXNlQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9y
aWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9y
eSkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbiIpOwotICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdp
bjsKLSAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVu
dGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLQotICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQ7Ci0gICAgSURCRGF0YWJhc2VCYWNrZW5k
TWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRp
Zmllcik7Ci0gICAgaWYgKGl0ID09IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAg
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3Rv
cmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAgICAgICBpZiAoIWJhY2tpbmdT
dG9yZSkgewotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3Igb3BlbmluZyBiYWNraW5nIHN0b3JlIGZvciBpbmRleGVkREIub3Blbi4iKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlz
LCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkKLSAgICAg
ICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFz
ZUJhY2tlbmQuZ2V0KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNyZWF0aW5nIGRhdGFiYXNlIGJhY2tlbmQgZm9y
IGluZGV4ZWRkYi5vcGVuLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+dmFsdWU7Ci0KLSAgICBkYXRh
YmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3Ms
IHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTY4MjAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
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
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRJbXBsX2gKLSNk
ZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VD
YWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5nTGlzdDsKLQotY2xhc3MgSURCQmFj
a2luZ1N0b3JlOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLQotY2xhc3MgSURCRmFj
dG9yeUJhY2tlbmRJbXBsIDogcHVibGljIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkZhY3RvcnlCYWNrZW5k
SW1wbCgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRJbXBsKCk7Ci0K
LSAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gd2VhayBwb2ludGVycy4KLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKTsKLQotcHJvdGVjdGVkOgotICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3RvcmUoUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLXByaXZh
dGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwotICAgIElEQkRhdGFiYXNlQmFja2VuZE1h
cCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFdl
YWtQdHI8SURCQmFja2luZ1N0b3JlPiA+IElEQkJhY2tpbmdTdG9yZU1hcDsKLSAgICBJREJCYWNr
aW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxJREJC
YWNraW5nU3RvcmU+ID4gbV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXM7Ci0KLSAgICAvLyBPbmx5
IG9uZSBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSBzaG91bGQgZXhpc3QgYXQgYW55IGdpdmVuIHRp
bWUuCi0gICAgc3RhdGljIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogaWRiRmFjdG9yeUJhY2tlbmRJ
bXBsOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8v
IElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAKaW5k
ZXggOTk1ZTgzZC4uOTYzNDRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcApAQCAt
MjgsMTUgKzI4LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaCIKIAotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
IgotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpZiBVU0UoTEVWRUxEQikKKyNp
bmNsdWRlICJJREJGYWN0b3J5QmFja2VuZExldmVsREIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBJREJGYWN0b3J5
QmFja2VuZEltcGw6OmNyZWF0ZSgpOworICAgIC8vIEZJWE1FOiBOZWVkIGEgYmV0dGVyIHBsYXRm
b3JtIGFic3RyYWN0aW9uIGhlcmUsIGJ1dCB0aGlzIHN0b3AgZ2FwIHdpbGwgd29yayBmb3Igbm93
LgorI2lmIFVTRShMRVZFTERCKQorICAgIHJldHVybiBJREJGYWN0b3J5QmFja2VuZExldmVsREI6
OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1YzVlZDBjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5n
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCQ3Vy
c29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNp
bmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9v
bCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdyaXRlcjo6dmVyaWZ5SW5kZXhLZXlz
KElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywgY29uc3QgSURCS2V5KiBwcmlt
YXJ5S2V5LCBTdHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QKLXsKLSAgICBjYW5BZGRLZXlzID0g
ZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsr
aSkgewotICAgICAgICBib29sIG9rID0gYWRkaW5nS2V5QWxsb3dlZChiYWNraW5nU3RvcmUsIHRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAobV9pbmRleEtl
eXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5LCBjYW5BZGRLZXlzKTsKLSAgICAgICAgaWYgKCFvaykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFjYW5BZGRLZXlzKSB7Ci0g
ICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQotICAgICAgICAgICAgICAgICplcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQg
bGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50
cy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhbkFkZEtleXMgPSB0cnVlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4
V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50
aWZpZXImIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0Ci17Ci0gICAgaW50NjRfdCBpbmRleElk
ID0gbV9pbmRleE1ldGFkYXRhLmlkOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRl
eEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS5wdXRJ
bmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCByZWNvcmRJZGVudGlmaWVyKTsKLSAg
ICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gdmVyaWZpZWQgYXMgYSB2YWxp
ZCB3cml0ZSBkdXJpbmcgdmVyaWZ5SW5kZXhLZXlzLgotICAgICAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7Ci0gICAgfQotfQotCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4
V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25z
dAotewotICAgIGFsbG93ZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlx
dWUpIHsKLSAgICAgICAgYWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKLSAgICBib29sIGZvdW5k
ID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS5rZXlFeGlzdHNJbkluZGV4KHRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqaW5kZXhLZXks
IGZvdW5kUHJpbWFyeUtleSwgZm91bmQpOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWZvdW5kIHx8IChwcmltYXJ5S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+
aXNFcXVhbChwcmltYXJ5S2V5KSkpCi0gICAgICAgIGFsbG93ZWQgPSB0cnVlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdy
aXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwg
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBp
bmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRl
cnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCi17Ci0gICAgQVNTRVJU
KGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgpKTsKLSAgICBjb21wbGV0ZWQgPSBm
YWxzZTsKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpJbmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5k
ZXhJZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGluZGV4S2V5TWFwLmFkZChpbmRleElkc1tpXSwg
aW5kZXhLZXlzW2ldKTsKLQotICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0KLSAgICAgICAgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+dmFsdWU7Ci0KLSAgICAgICAgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+a2V5
KTsKLSAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQs
IHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFsc28g
dXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KLSAgICAgICAgaWYgKGtl
eVdhc0dlbmVyYXRlZCAmJiAoaW5kZXgua2V5UGF0aCA9PSBvYmplY3RTdG9yZS5rZXlQYXRoKSkK
LSAgICAgICAgICAgIGtleXMuYXBwZW5kKHByaW1hcnlLZXkpOwotCi0gICAgICAgIE93blB0cjxJ
bmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LCBr
ZXlzKSkpOwotICAgICAgICBib29sIGNhbkFkZEtleXMgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBi
YWNraW5nU3RvcmVTdWNjZXNzID0gaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5cygqYmFja2lu
Z1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmUuaWQsIGluZGV4LmlkLCBjYW5BZGRLZXlzLCBwcmltYXJ5S2V5LmdldCgp
LCBlcnJvck1lc3NhZ2UpOwotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2FuQWRkS2V5cykKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGluZGV4V3JpdGVycy0+YXBwZW5kKGluZGV4V3Jp
dGVyLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgY29tcGxldGVkID0gdHJ1ZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIGNvbnN0IGludDY0
X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50
ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4KLSAgICBpbnQ2NF90IGN1cnJlbnRO
dW1iZXI7Ci0gICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgY3VycmVudE51bWJlcik7Ci0gICAgaWYgKCFvaykgewotICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyIik7Ci0g
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICB9Ci0gICAgaWYgKGN1
cnJlbnROdW1iZXIgPCAwIHx8IGN1cnJlbnROdW1iZXIgPiBtYXhHZW5lcmF0b3JWYWx1ZSkKLSAg
ICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotCi0gICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOwotfQotCi1ib29sIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQotewotICAgIEFTU0VSVChrZXkgJiYg
a2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICByZXR1cm4gYmFja2luZ1N0
b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHN0YXRp
Y19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0Y2IxNDMuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGxfaAotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJN
ZXRhZGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw7Ci1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLQot
Ly8gRklYTUU6IHRoaXMgbmFtZXNwYWNlIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtb3ZlIGl0cyBj
b250ZW50cyBvdXQgdG8gdGhlaXIgb3duIGhvbWUuCi1uYW1lc3BhY2UgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbCB7Ci0KLSAgICBjbGFzcyBJbmRleFdyaXRlciB7Ci0gICAgcHVibGljOgotICAg
ICAgICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhKQotICAgICAgICAgICAgOiBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKLSAg
ICAgICAgeyB9Ci0KLSAgICAgICAgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eXMmIGluZGV4S2V5cykKLSAgICAgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRh
dGEpCi0gICAgICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKLSAgICAgICAgeyB9Ci0K
LSAgICAgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSog
cHJpbWFyeUtleSA9IDAsIFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkgY29uc3QgV0FSTl9VTlVT
RURfUkVUVVJOOwotCi0gICAgICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2lu
Z1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiwgSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dl
ZChJREJCYWNraW5nU3RvcmUmLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxv
d2VkKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICAgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci0gICAgICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwotICAgIH07Ci0KLSAgICBib29sIG1ha2VJbmRl
eFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgSURCQmFja2lu
Z1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiwgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4g
PiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXko
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0g
ICAgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjZjI2ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpjcmVhdGUoaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFz
ZSkKLXsKLSAgICBIYXNoU2V0PGludDY0X3Q+IG9iamVjdFN0b3JlSGFzaFNldDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRzLnNpemUoKTsgKytpKQotICAgICAgICBv
YmplY3RTdG9yZUhhc2hTZXQuYWRkKG9iamVjdFN0b3JlSWRzW2ldKTsKLQotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChpZCwgY2FsbGJhY2tzLCBvYmpl
Y3RTdG9yZUhhc2hTZXQsIG1vZGUsIGRhdGFiYXNlKSk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaW50NjRfdCBpZCwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBIYXNoU2V0PGludDY0X3Q+
JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSwgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAgOiBtX2lkKGlkKQotICAgICwgbV9vYmpl
Y3RTdG9yZUlkcyhvYmplY3RTdG9yZUlkcykKLSAgICAsIG1fbW9kZShtb2RlKQotICAgICwgbV9z
dGF0ZShVbnVzZWQpCi0gICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAgLCBtX2NhbGxi
YWNrcyhjYWxsYmFja3MpCi0gICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwgbV90cmFu
c2FjdGlvbihkYXRhYmFzZS0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpCi0gICAgLCBtX3Rhc2tUaW1l
cih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQpCi0gICAg
LCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCi17Ci0gICAgLy8gV2UgcGFzcyBhIHJlZmVy
ZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhB
ZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0KLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwotfQotCi1JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpCi17Ci0gICAgLy8gSXQg
c2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBnZXQgZGVsZXRlZCB1bnRp
bCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgotICAgIEFTU0VSVChtX3N0YXRlID09
IEZpbmlzaGVkKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVs
ZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0eXBlLCBQYXNzT3du
UHRyPE9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxPcGVyYXRpb24+IGFib3J0VGFzaykKLXsK
LSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KHR5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrKQotICAgICAg
ICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgZWxzZQotICAgICAgICBtX3ByZWVtcHRp
dmVUYXNrUXVldWUuYXBwZW5kKHRhc2spOwotCi0gICAgaWYgKGFib3J0VGFzaykKLSAgICAgICAg
bV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9
PSBVbnVzZWQpCi0gICAgICAgIHN0YXJ0KCk7Ci0gICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBSdW5u
aW5nICYmICFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Rhc2tUaW1lci5zdGFy
dE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQo
KQotewotICAgIGFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgKHVua25vd24gY2F1c2UpIikpOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjphYm9ydCIpOwotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09IFJ1bm5pbmc7Ci0K
LSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2Vk
IHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gYWJvcnQgc3RlcHMgYmVsb3cuIFdlIHRoZXJl
Zm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKLSAgICAvLyBhbGl2
ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwotICAg
IG1fdGFza1RpbWVyLnN0b3AoKTsKLQotICAgIGlmICh3YXNSdW5uaW5nKQotICAgICAgICBtX3Ry
YW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0KLSAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBpZiBh
bnkuCi0gICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBP
d25QdHI8T3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOwotICAg
ICAgICB0YXNrLT5wZXJmb3JtKDApOwotICAgIH0KLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVz
b3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQg
Y2FsbGJhY2tzCi0gICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkg
cmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0
c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3Bl
bkN1cnNvcnMoKTsKLSAgICBtX3RyYW5zYWN0aW9uLnJlc2V0KCk7Ci0KLSAgICAvLyBUcmFuc2Fj
dGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1l
bmQgaXMgbm90aWZpZWQsIGFzCi0gICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5i
bG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCi0gICAgbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsK
LSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3Rp
dmUodGhpcykpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7Ci0K
LSAgICBpZiAobV9jYWxsYmFja3MpCi0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KG1faWQs
IGVycm9yKTsKLQotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZp
cmVkKHRoaXMpOwotCi0gICAgbV9kYXRhYmFzZSA9IDA7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6aXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cHJlZW1wdGl2ZVRhc2tRdWV1ZS5pc0VtcHR5KCkgJiYgbV90YXNrUXVldWUuaXNFbXB0eSgpOwot
fQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Omhhc1BlbmRpbmdUYXNrcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgfHwgIWlzVGFza1F1
ZXVlRW1wdHkoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpyZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqIGN1cnNvcikKLXsKLSAgICBtX29wZW5D
dXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBjdXJzb3IpCi17Ci0g
ICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpydW4oKQotewotICAgIC8vIFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgaGFz
IHN0YXJ0ZWQgdGhpcyB0cmFuc2FjdGlvbi4gU2NoZWR1bGUgYSB0aW1lcgotICAgIC8vIHRvIHBy
b2Nlc3MgdGhlIGZpcnN0IHRhc2suCi0gICAgQVNTRVJUKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5n
IHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKCFtX3Rhc2tUaW1lci5pc0FjdGl2
ZSgpKTsKLQotICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0g
VW51c2VkKTsKLQotICAgIG1fc3RhdGUgPSBTdGFydFBlbmRpbmc7Ci0gICAgbV9kYXRhYmFzZS0+
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOwotICAg
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlzKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQotewotICAgIElEQl9UUkFDRSgiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0Iik7Ci0KLSAgICAvLyBJbiBtdWx0aXByb2Nlc3MgcG9y
dHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1ZXN0ZWQgYSBjb21taXQgYnV0IGFuIGFib3J0IGhh
cyBhbHJlYWR5Ci0gICAgLy8gYmVlbiBpbml0aWF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGJh
Y2stZW5kLgotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVzZWQgfHwgbV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAg
ICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gRnJvbnQtZW5kIGhhcyByZXF1ZXN0
ZWQgYSBjb21taXQsIGJ1dCB0aGVyZSBtYXkgYmUgdGFza3MgbGlrZSBjcmVhdGVJbmRleCB3aGlj
aAotICAgIC8vIGFyZSBjb25zaWRlcmVkIHN5bmNocm9ub3VzIGJ5IHRoZSBmcm9udC1lbmQgYnV0
IGFyZSBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKGhhc1BlbmRpbmdUYXNrcygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBv
YmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gY29tbWl0
IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAg
b3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAg
IFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIGJv
b2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7Ci0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwot
Ci0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90cmFuc2FjdGlvbi5jb21taXQoKTsK
LQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0
IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgLy8gYXJlIGZpcmVkLCBh
cyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0
aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVy
IGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX3RyYW5zYWN0aW9u
LnJlc2V0KCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBj
b21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCi0gICAgLy8gdGhl
IHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3Npbmcg
Y29ubmVjdGlvbnMuCi0gICAgaWYgKCF1bnVzZWQpCi0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLQotICAgIGlmIChjb21taXR0ZWQp
IHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUobV9pZCk7Ci0gICAgICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKHRoaXMpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KG1faWQsIElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOwotICAgIH0KLQotICAgIG1fZGF0
YWJhc2UgPSAwOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1l
ckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KikKLXsKLSAgICBJREJfVFJB
Q0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkIik7Ci0gICAgQVNT
RVJUKCFpc1Rhc2tRdWV1ZUVtcHR5KCkpOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhcnRQZW5k
aW5nKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24uYmVnaW4oKTsKLSAgICAgICAgbV9zdGF0ZSA9
IFJ1bm5pbmc7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQotICAgIC8vIHRhc2tzLiBU
YWtlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIHRoaXMgb2JqZWN0IGFsaXZlIHNvIHRo
YXQKLSAgICAvLyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25kaXRpb25zIGNhbiBiZSBjaGVja2Vk
LgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcm90ZWN0KCp0aGlzKTsKLQot
ICAgIFRhc2tRdWV1ZSogdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZt
X3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7Ci0gICAgd2hpbGUgKCF0YXNrUXVl
dWUtPmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7Ci0gICAgICAgIEFTU0VSVCht
X3N0YXRlID09IFJ1bm5pbmcpOwotICAgICAgICBPd25QdHI8T3BlcmF0aW9uPiB0YXNrKHRhc2tR
dWV1ZS0+dGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5wZXJmb3JtKHRoaXMpOwotCi0gICAg
ICAgIC8vIEV2ZW50IGl0c2VsZiBtYXkgY2hhbmdlIHdoaWNoIHF1ZXVlIHNob3VsZCBiZSBwcm9j
ZXNzZWQgbmV4dC4KLSAgICAgICAgdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50
cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7Ci0gICAgfQotCi0gICAg
Ly8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdlIGhhdmVuJ3QgYWxyZWFkeSBjb21t
aXR0ZWQvYWJvcnRlZCwKLSAgICAvLyBhbmQgdGhlIGZyb250LWVuZCByZXF1ZXN0ZWQgYSBjb21t
aXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgotICAgIGlmICghaGFzUGVuZGluZ1Rhc2tzKCkg
JiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIGNvbW1p
dCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNsb3NlT3BlbkN1cnNv
cnMoKQotewotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+OjppdGVyYXRv
ciBpID0gbV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3BlbkN1cnNvcnMuZW5kKCk7ICsr
aSkKLSAgICAgICAgKCppKS0+Y2xvc2UoKTsKLSAgICBtX29wZW5DdXJzb3JzLmNsZWFyKCk7Ci19
Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYxOGZhMC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJ
REJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOwotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw7Ci1jbGFzcyBJREJEYXRh
YmFzZUNhbGxiYWNrczsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIElEQkRhdGFiYXNl
QmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKLSAgICB2b2lkIGNvbW1pdCgpOwotCi0gICAg
Y2xhc3MgT3BlcmF0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfk9wZXJhdGlv
bigpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKikgPSAwOwotICAgIH07Ci0KLSAgICB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4pOwotICAgIHZvaWQgcnVuKCk7Ci0gICAgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgIGNvbnN0IEhhc2hTZXQ8
aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQotICAg
IHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8T3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRy
PE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyBzY2hlZHVsZVRhc2soSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9Ci0gICAg
dm9pZCBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwg
UGFzc093blB0cjxPcGVyYXRpb24+LCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0g
bnVsbHB0cik7Ci0gICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZElt
cGwqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBs
Kik7Ci0gICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMrKzsgfQotICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVu
ZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMg
Pj0gMCk7IH0KLSAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpIHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9Ci0gICAgaW50NjRfdCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRh
dGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQotCi1wcml2YXRlOgot
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRz
LCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwot
Ci0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRh
c2tzIHlldC4KLSAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IGJh
Y2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVkLgotICAgICAgICBSdW5uaW5n
LCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0ZWQgYnV0IG5vdCB5ZXQgZmluaXNo
ZWQuCi0gICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJvcnRlZCBvciBjb21taXR0ZWQuCi0g
ICAgfTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLQotICAgIGJvb2wgaXNUYXNrUXVldWVFbXB0eSgp
IGNvbnN0OwotICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHRh
c2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+Kik7Ci0gICAgdm9p
ZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBjb25zdCBpbnQ2NF90IG1faWQ7Ci0gICAgY29u
c3QgSGFzaFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOwotICAgIGNvbnN0IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1fbW9kZTsKLQotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgYm9v
bCBtX2NvbW1pdFBlbmRpbmc7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsK
LQotICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPE9wZXJhdGlvbj4gPiBUYXNrUXVldWU7Ci0gICAg
VGFza1F1ZXVlIG1fdGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVl
dWU7Ci0gICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7Ci0KLSAgICBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247Ci0KLSAgICAvLyBGSVhNRTogZGVsZXRlIHRo
ZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgotICAgIFRpbWVyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVyOwotICAgIGludCBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+IG1fb3BlbkN1
cnNvcnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTZmY2Q4ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmNyZWF0ZSgp
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkp
OwotfQotCi1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCkKLXsKLX0KLQotSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6fklEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKQotewotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRp
ZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsK
LSAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uKTsKLX0KLQot
dm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAgbV9xdWV1ZWRUcmFuc2FjdGlv
bnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZEZpbmlzaFRyYW5zYWN0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAgaWYgKG1fcXVldWVk
VHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgewotICAgICAgICBBU1NFUlQoIW1f
c3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotICAgICAgICBtX3F1
ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotICAgIH0gZWxzZSBpZiAobV9z
dGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKLSAgICAgICAgbV9zdGFy
dGVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0KLSAgICBtX3RyYW5zYWN0aW9u
cy5yZW1vdmUodHJhbnNhY3Rpb24pOwotCi0gICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMo
KTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLS8vIFZlcmlmaWVzIGludGVybmFsIGNvbnNpc3RpZW5j
eSB3aGlsZSByZXR1cm5pbmcgd2hldGhlciBhbnl0aGluZyBpcyBmb3VuZC4KLWJvb2wgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcjo6aXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCi17Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGlmIChtX3F1ZXVl
ZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCi0gICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkg
ewotICAgICAgICBBU1NFUlQoIWZvdW5kKTsKLSAgICAgICAgZm91bmQgPSB0cnVlOwotICAgIH0K
LSAgICBBU1NFUlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24p
KTsKLSAgICByZXR1cm4gZm91bmQ7Ci19Ci0jZW5kaWYKLQotdm9pZCBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpCi17Ci0gICAgaWYgKG1fcXVl
dWVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwgKCptX3N0YXJ0ZWRUcmFuc2FjdGlv
bnMuYmVnaW4oKSktPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5n
ZSk7Ci0KLSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKLSAgICB3aGlsZSAo
aXQgIT0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSAqaXQ7Ci0gICAgICAgICsraXQ7Ci0gICAgICAg
IGlmIChjYW5SdW5UcmFuc2FjdGlvbih0cmFuc2FjdGlvbikpIHsKLSAgICAgICAgICAgIG1fcXVl
dWVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0gICAgICAgICAgICBtX3N0YXJ0
ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAgICAgICAgICAgIHRyYW5zYWN0aW9u
LT5ydW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZG9TY29wZXNPdmVy
bGFwKGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlMSwgY29uc3QgSGFzaFNldDxpbnQ2NF90
PiYgc2NvcGUyKQotewotICAgIGZvciAoSGFzaFNldDxpbnQ2NF90Pjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzY29wZTEuYmVnaW4oKTsgaXQgIT0gc2NvcGUxLmVuZCgpOyArK2l0KSB7Ci0gICAgICAg
IGlmIChzY29wZTIuY29udGFpbnMoKml0KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24pCi17Ci0gICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uKSk7Ci0gICAgc3dpdGNoICh0cmFuc2FjdGlvbi0+bW9kZSgpKSB7Ci0gICAgY2FzZSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZToKLSAgICAgICAgQVNTRVJUKG1fcXVldWVk
VHJhbnNhY3Rpb25zLnNpemUoKSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKG1fc3RhcnRlZFRyYW5z
YWN0aW9ucy5pc0VtcHR5KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRXcml0ZToKLSAgICAgICAgZm9yIChIYXNo
U2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0
YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9zdGFydGVkVHJhbnNhY3Rpb25zLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYmIGRvU2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2Nv
cGUoKSwgKCppdCktPnNjb3BlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBmb3IgKExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdpbigpOyAq
aXQgIT0gdHJhbnNhY3Rpb247ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtX3F1
ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSk7Ci0gICAgICAgICAgICBpZiAoKCppdCktPm1vZGUoKSA9
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYmIGRvU2NvcGVzT3ZlcmxhcCh0cmFu
c2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19OwotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGNmZmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
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
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOwotY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLQotLy8gVHJhbnNhY3Rpb25zIGFyZSBleGVjdXRl
ZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KLWNsYXNzIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKTsKLQotICAgIC8vIENhbGxlZCBieSB0cmFuc2FjdGlvbnMgYXMgdGhleSBzdGFydCBh
bmQgZmluaXNoLgotICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopOwotICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBkaWRGaW5pc2hUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBpc0FjdGl2ZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0KLSAgICB2b2lkIHByb2Nlc3NTdGFydGVkVHJhbnNh
Y3Rpb25zKCk7Ci0gICAgYm9vbCBjYW5SdW5UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKik7Ci0KLSAgICAvLyBUaGlzIGlzIGp1c3QgYW4gZWZmaWNpZW50IHdheSB0byBrZWVw
IHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4KLSAgICBIYXNoTWFwPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqLCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gPiBtX3Ry
YW5zYWN0aW9uczsKLSAgICAvLyBUcmFuc2FjdGlvbnMgaW4gZGlmZmVyZW50IHN0YXRlcyBhcmUg
Z3JvdXBlZCBiZWxvdy4KLSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKj4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVs
REIuY3BwCmluZGV4IDQ4ZTBkMzEuLjUyNTA1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3Rv
cmVMZXZlbERCLmNwcApAQCAtMjQsOSArMjQsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmVMZXZlbERCLmgiCiAKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpAQCAtMTk5Myw0ICsxOTkzLDQgQEAg
dm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0
b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJCYWNraW5nU3RvcmVMZXZlbERCLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjhiNzc3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCkBAIC0wLDAgKzEsMjIwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAorI2RlZmluZSBJREJCYWNraW5nU3Rv
cmVfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisj
aW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJJ
bmRleGVkREIuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZl
bERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIExldmVsREJDb21wYXJhdG9yOworY2xhc3MgTGV2ZWxEQkRhdGFiYXNl
OworY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOworY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5
UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xh
c3MgTGV2ZWxEQkZhY3RvcnkgeworcHVibGljOgorICAgIHZpcnR1YWwgfkxldmVsREJGYWN0b3J5
KCkgeyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gb3BlbkxldmVs
REIoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGRlc3Ryb3lMZXZlbERCKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUp
ID0gMDsKK307CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPElE
QkJhY2tpbmdTdG9yZT4geworcHVibGljOgorICAgIGNsYXNzIFRyYW5zYWN0aW9uOworCisgICAg
dmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwg
Y29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFz
ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5Jbk1lbW9yeShTZWN1cml0eU9y
aWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBvcGVuSW5NZW1vcnkoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7CisgICAgV2Vha1B0cjxJREJCYWNraW5n
U3RvcmU+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQ
dHIoKTsgfQorCisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRhYmFzZU5hbWVzKCk7
CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiwgYm9vbCYgc3VjY2VzcykgV0FSTl9VTlVTRURfUkVU
VVJOOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGlu
dDY0X3QmIHJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJz
aW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90
IGludFZlcnNpb24pOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIG5hbWUpOworCisgICAgYm9vbCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlk
LCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcCopIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQp
OworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKKworICAgIGNsYXNzIFJlY29yZElkZW50aWZpZXIgeworICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRJZGVudGlmaWVyKTsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBp
bnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1hcnlLZXkpLCBtX3ZlcnNpb24odmVy
c2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgpKTsgfQorICAgICAgICBSZWNvcmRJ
ZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJzaW9uKC0xKSB7IH0KKworICAgICAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFy
eUtleTsgfQorICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNp
b247IH0KKyAgICAgICAgdm9pZCByZXNldChjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXks
IGludDY0X3QgdmVyc2lvbikgeyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OyBtX3ZlcnNpb24g
PSB2ZXJzaW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8Y2hhcj4gbV9wcmlt
YXJ5S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVu
Y29kZWQqIHZlcnNpb24gb2YgdGhlIGtleS4KKyAgICAgICAgaW50NjRfdCBtX3ZlcnNpb247Cisg
ICAgfTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIHJlY29yZCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAg
IHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSBXQVJOX1VO
VVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGRlbGV0ZVJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisgICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJyZW50TnVtYmVyKSBXQVJOX1VOVVNFRF9SRVRVUk47
CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJl
Y29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJv
b2wgaXNNdWx0aUVudHJ5KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGRl
bGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVjb3JkSWRlbnRp
ZmllciYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWFyeUtl
eVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
LCBSZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZp
cnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5
S2V5LCBib29sJiBleGlzdHMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIGNsYXNzIEN1cnNv
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgZW51
bSBJdGVyYXRvclN0YXRlIHsKKyAgICAgICAgICAgIFJlYWR5ID0gMCwKKyAgICAgICAgICAgIFNl
ZWsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQ3Vyc29yT3B0aW9ucyB7CisgICAgICAg
ICAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAgICAgICAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQ7CisgICAgICAgICAgICBpbnQ2NF90IGluZGV4SWQ7CisgICAgICAgICAgICBWZWN0b3I8Y2hh
cj4gbG93S2V5OworICAgICAgICAgICAgYm9vbCBsb3dPcGVuOworICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IGhpZ2hLZXk7CisgICAgICAgICAgICBib29sIGhpZ2hPcGVuOworICAgICAgICAgICAg
Ym9vbCBmb3J3YXJkOworICAgICAgICAgICAgYm9vbCB1bmlxdWU7CisgICAgICAgIH07CisKKyAg
ICAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtl
eTsgfQorICAgICAgICBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiA9IDAsIEl0
ZXJhdG9yU3RhdGUgPSBTZWVrKTsKKyAgICAgICAgYm9vbCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcp
OworICAgICAgICBib29sIGZpcnN0U2VlaygpOworCisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDdXJzb3I+IGNsb25lKCkgPSAwOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CisgICAgICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgPSAwOworICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KKyAgICAgICAgdmlydHVhbCB+Q3Vyc29y
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpID0gMDsKKworICAg
IHByb3RlY3RlZDoKKyAgICAgICAgQ3Vyc29yKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhj
dXJzb3JPcHRpb25zKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgQ3Vy
c29yKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKiBvdGhlcik7CisKKyAgICAgICAgdmly
dHVhbCBWZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElEQktleSYpID0gMDsKKworICAgICAg
ICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OworICAgICAgICBib29sIGhhdmVFbnRlcmVkUmFu
Z2UoKSBjb25zdDsKKworICAgICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247
CisgICAgICAgIGNvbnN0IEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOworI2lmIFVTRShM
RVZFTERCKQorICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOworI2Vu
ZGlmCisgICAgICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKKyAgICAgICAgSURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIG1fcmVjb3JkSWRlbnRpZmllcjsKKyAgICB9Owor
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29y
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4
S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pOworCisg
ICAgY2xhc3MgVHJhbnNhY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgVHJh
bnNhY3Rpb24oSURCQmFja2luZ1N0b3JlKik7CisgICAgICAgIHZvaWQgYmVnaW4oKTsKKyAgICAg
ICAgYm9vbCBjb21taXQoKTsKKyAgICAgICAgdm9pZCByb2xsYmFjaygpOworICAgICAgICB2b2lk
IHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSAwOworI2lm
IFVTRShMRVZFTERCKQorICAgICAgICAgICAgbV90cmFuc2FjdGlvbiA9IDA7CisjZW5kaWYKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbkZyb20oVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgICAgICB7CisjaWYgVVNF
KExFVkVMREIpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHJhbnNhY3Rpb24qPih0
cmFuc2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisjZWxzZQorICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24pOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSURC
QmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyNpZiBVU0UoTEVWRUxEQikKKyAgICAgICAg
UmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyNlbmRpZgorICAgIH07
CisKK3Byb3RlY3RlZDoKKyAgICBJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBh
cmF0b3I+KTsKKworICAgIC8vIFNob3VsZCBvbmx5IHVzZWQgZm9yIG1vY2tpbmcuCisgICAgSURC
QmFja2luZ1N0b3JlKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExl
dmVsREJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+KTsKKworICAgIGJv
b2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSwgYm9vbCYgZm91
bmQpOworICAgIGJvb2wgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXAqKSBXQVJOX1VOVVNF
RF9SRVRVUk47CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworCisgICAgT3duUHRyPExldmVs
REJEYXRhYmFzZT4gbV9kYjsKKyAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFy
YXRvcjsKKyAgICBXZWFrUHRyRmFjdG9yeTxJREJCYWNraW5nU3RvcmU+IG1fd2Vha0ZhY3Rvcnk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAvLyBJREJCYWNraW5nU3RvcmVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44NmM2N2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5j
cHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIu
aCIKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5o
IgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24gOiBw
dWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVy
YXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjdXJzb3Is
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEN1cnNvckl0ZXJhdGlvbk9w
ZXJhdGlvbihjdXJzb3IsIGtleSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAg
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZExldmVs
REI+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2N1cnNvcihjdXJzb3IpCisgICAgICAgICwgbV9r
ZXkoa2V5KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQor
CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBtX2N1cnNvcjsKKyAgICBSZWZQ
dHI8SURCS2V5PiBtX2tleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsK
K307CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpDdXJzb3JBZHZhbmNlT3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQj4g
Y3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDdXJzb3JBZHZhbmNl
T3BlcmF0aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgor
ICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kTGV2
ZWxEQj4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKKyAgICAgICAgLCBtX2Nv
dW50KGNvdW50KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAg
fQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBtX2N1cnNvcjsKKyAgICB1
bnNpZ25lZCBsb25nIG1fY291bnQ7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFj
a3M7Cit9OworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6Q3Vyc29yUHJlZmV0Y2hJ
dGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6
T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRMZXZlbERCPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
dXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIG51bWJlclRvRmV0Y2gsIGNh
bGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIEN1cnNvclByZWZldGNoSXRlcmF0aW9u
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZExldmVsREI+IGN1cnNvciwgaW50
IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAg
ICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1fbnVtYmVyVG9GZXRjaChudW1iZXJU
b0ZldGNoKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQor
CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBtX2N1cnNvcjsKKyAgICBpbnQg
bV9udW1iZXJUb0ZldGNoOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwor
fTsKKworSURCQ3Vyc29yQmFja2VuZExldmVsREI6OklEQkN1cnNvckJhY2tlbmRMZXZlbERCKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSW5kZXhlZERCOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUg
dGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCisgICAgOiBtX3Rhc2tUeXBlKHRhc2tUeXBlKQorICAgICwgbV9j
dXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgLCBtX2RhdGFiYXNlKHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICwgbV9jdXJzb3IoY3Vyc29yKQorICAgICwgbV9j
bG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRo
aXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6fklEQkN1cnNvckJhY2tlbmRMZXZl
bERCKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsK
K30KKworCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpjb250aW51ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZExl
dmVsREI6OmNvbnRpbnVlIik7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOworICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBl
LCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXksIGNhbGxiYWNrcykp
OworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjphZHZhbmNlKHVuc2lnbmVkIGxv
bmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlv
bkNvZGUmKQoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZExldmVsREI6OmFkdmFu
Y2UiKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
CisgICAgbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEN1cnNvckFkdmFuY2VPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBjb3VudCwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFj
a2VuZExldmVsREI6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQiopCit7CisgICAgSURCX1RSQUNFKCJDdXJzb3JBZHZhbmNlT3BlcmF0
aW9uIik7CisgICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1fY3Vyc29yLT5tX2N1cnNv
ci0+YWR2YW5jZShtX2NvdW50KSkgeworICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwor
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+
KDApKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBtX2N1cnNvci0+dmFs
dWUoKSk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZExldmVsREI6OkN1cnNvckl0ZXJhdGlv
bk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKikKK3sKKyAg
ICBJREJfVFJBQ0UoIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIpOworICAgIGlmICghbV9jdXJz
b3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24obV9r
ZXkuZ2V0KCkpKSB7CisgICAgICAgIG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhtX2N1cnNv
ci0+a2V5KCksIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIG1fY3Vyc29yLT52YWx1ZSgpKTsKK30K
Kwordm9pZCBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgSURC
X1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlIik7CisgICAgQVNTRVJUKG1f
dHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwor
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRlKG1f
Y3Vyc29yLT5wcmltYXJ5S2V5KCkpOworICAgIG1fZGF0YWJhc2UtPmRlbGV0ZVJhbmdlKG1fdHJh
bnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UucmVsZWFzZSgpLCBwcnBD
YWxsYmFja3MpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpwcmVmZXRjaENv
bnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tl
bmRMZXZlbERCOjpwcmVmZXRjaENvbnRpbnVlIik7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhtX3Rhc2tUeXBlLCBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tl
bmRMZXZlbERCOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKikKK3sKKyAgICBJREJfVFJBQ0UoIkN1cnNvclByZWZl
dGNoSXRlcmF0aW9uT3BlcmF0aW9uIik7CisKKyAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBm
b3VuZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsK
KyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gPiBmb3VuZFZhbHVlczsKKworICAgIGlm
IChtX2N1cnNvci0+bV9jdXJzb3IpCisgICAgICAgIG1fY3Vyc29yLT5tX3NhdmVkQ3Vyc29yID0g
bV9jdXJzb3ItPm1fY3Vyc29yLT5jbG9uZSgpOworCisgICAgY29uc3Qgc2l6ZV90IG1heFNpemVF
c3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7CisgICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtYmVyVG9GZXRjaDsgKytpKSB7CisgICAg
ICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRp
bnVlRnVuY3Rpb24oMCkpIHsKKyAgICAgICAgICAgIG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZvdW5kS2V5cy5hcHBlbmQo
bV9jdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBw
ZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpKTsKKworICAgICAgICBzd2l0Y2gg
KG1fY3Vyc29yLT5tX2N1cnNvclR5cGUpIHsKKyAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNv
cktleU9ubHk6CisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1
cnNvcktleUFuZFZhbHVlOgorICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5t
X2N1cnNvci0+dmFsdWUoKS0+c2l6ZSgpOworICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5k
KG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXpl
RXN0aW1hdGUoKTsKKyAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+
cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsKKworICAgICAgICBpZiAoc2l6ZUVzdGltYXRl
ID4gbWF4U2l6ZUVzdGltYXRlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYg
KCFmb3VuZEtleXMuc2l6ZSgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3Rh
dGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJp
bWFyeUtleXMsIGZvdW5kVmFsdWVzKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qjo6cHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCkKK3sKKyAgICBJREJfVFJB
Q0UoIklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpwcmVmZXRjaFJlc2V0Iik7CisgICAgbV9jdXJz
b3IgPSBtX3NhdmVkQ3Vyc29yOworICAgIG1fc2F2ZWRDdXJzb3IgPSAwOworCisgICAgaWYgKG1f
Y2xvc2VkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3Vyc29yKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdXNlZFByZWZldGNoZXM7ICsraSkgeworICAgICAgICAgICAgYm9v
bCBvayA9IG1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKCk7CisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKG9rLCBvayk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFj
a2VuZExldmVsREI6OmNsb3NlKCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRM
ZXZlbERCOjpjbG9zZSIpOworICAgIG1fY2xvc2VkID0gdHJ1ZTsKKyAgICBtX2N1cnNvci5jbGVh
cigpOworICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERC
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjdiYzc3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmgKQEAg
LTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQl9o
CisjZGVmaW5lIElEQkN1cnNvckJhY2tlbmRMZXZlbERCX2gKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxl
dmVsREIuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOworY2xhc3MgSURCS2V5UmFuZ2U7CisKK2NsYXNz
IElEQkN1cnNvckJhY2tlbmRMZXZlbERCIDogcHVibGljIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZl
bERCPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZExldmVsREIoY3Vyc29yLCBjdXJz
b3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkKSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRMZXZlbERCPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZExldmVsREIoY3Vyc29y
LCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB+SURCQ3Vyc29yQmFja2VuZExldmVsREIoKTsKKworICAgIC8vIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSh1bnNpZ25l
ZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHBy
ZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcyk7Cisg
ICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkgeyB9CisKKyAgICBQ
YXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPmtleSgpOyB9
CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1
cnNvci0+cHJpbWFyeUtleSgpOyB9CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1cnNvcktleU9u
bHkpID8gMCA6IG1fY3Vyc29yLT52YWx1ZSgpOyB9CisgICAgdm9pZCBjbG9zZSgpOworCitwcml2
YXRlOgorICAgIElEQkN1cnNvckJhY2tlbmRMZXZlbERCKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOworCisgICAgY2xhc3MgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOwor
ICAgIGNsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb247CisgICAgY2xhc3MgQ3Vyc29yUHJlZmV0
Y2hJdGVyYXRpb25PcGVyYXRpb247CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlIG1fdGFza1R5cGU7CisgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29y
VHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gbV9kYXRh
YmFzZTsKKyAgICBjb25zdCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gbV90
cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKworICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJzb3I7IC8vIE11c3QgYmUgZGVzdHJv
eWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gbV9zYXZlZEN1cnNvcjsgLy8gTXVzdCBiZSBkZXN0cm95ZWQgYmVmb3JlIG1fdHJhbnNh
Y3Rpb24uCisKKyAgICBib29sIG1fY2xvc2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQor
CisjZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZExldmVsREJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOWQ5OWRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAKQEAgLTAsMCArMSwx
Mzg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
QmFja2VuZExldmVsREIuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0Uo
TEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRl
ICJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmgi
CisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5o
IgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFu
Z2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRh
dGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citw
cml2YXRlOgorICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQor
ICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tp
bmdTdG9yZTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVN
ZXRhZGF0YTsKK307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oYmFja2lu
Z1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0
YSkKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgIH0KKwor
ICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOworfTsKKwor
Y2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9w
ZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0
YWJhc2UsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbihkYXRhYmFzZSwgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbiwg
Y2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIFZl
cnNpb25DaGFuZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
PiBkYXRhYmFzZSwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2Up
CisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgICAgICwgbV92
ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAg
ICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgIH0K
KworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBtX2RhdGFiYXNlOworICAg
IGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGludDY0X3QgbV92ZXJzaW9uOworICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisKK2NsYXNzIENyZWF0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6
T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBDcmVh
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgOiBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlk
KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQj4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKK307
CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwg
b2JqZWN0U3RvcmUpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBEZWxldGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJh
c2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisg
ICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI+IG1fZGF0YWJhc2U7CisgICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBjb25zdCBT
dHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlv
bihkYXRhYmFzZSwgcHJldmlvdXNWZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiop
OworcHJpdmF0ZToKKyAgICBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91
c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQorICAgICAgICA6IG1fZGF0YWJh
c2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9wcmV2aW91c1ZlcnNpb24ocHJldmlvdXNWZXJzaW9u
KQorICAgICAgICAsIG1fcHJldmlvdXNJbnRWZXJzaW9uKHByZXZpb3VzSW50VmVyc2lvbikKKyAg
ICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IG1fZGF0
YWJhc2U7CisgICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9uOworICAgIGludDY0X3QgbV9wcmV2
aW91c0ludFZlcnNpb247Cit9OworCitjbGFzcyBDcmVhdGVJbmRleE9wZXJhdGlvbiA6IHB1Ymxp
YyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhPcGVyYXRpb24o
YmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3By
aXZhdGU6CisgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdT
dG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAg
LCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29u
c3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4
TWV0YWRhdGE7Cit9OworCitjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhPcGVyYXRpb24oYmFja2lu
Z1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6
CisgICAgRGVsZXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRh
JiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkK
KyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2lu
ZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRh
dGE7Cit9OworCitjbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2Us
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorICAgICAgICA6IG1fZGF0
YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQp
CisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBtX2RhdGFiYXNlOworICAgIGNvbnN0
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOwor
fTsKKworY2xhc3MgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihk
YXRhYmFzZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRl
OgorICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJh
c2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwg
bV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBtX2RhdGFiYXNlOworICAgIGNvbnN0
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9p
bmRleE1ldGFkYXRhOworfTsKKworY2xhc3MgR2V0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JU
eXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE9wZXJhdGlvbihiYWNraW5nU3RvcmUs
IG1ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwg
Y2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgR2V0T3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1f
YmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQobWV0YWRh
dGEuaWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAg
ICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9rZXlQYXRoKG1ldGFkYXRhLm9iamVj
dFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkua2V5UGF0aCkKKyAgICAgICAgLCBtX2F1dG9JbmNy
ZW1lbnQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5hdXRvSW5jcmVt
ZW50KQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jdXJzb3JU
eXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9y
ZUlkKSk7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0
b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRh
YmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGlu
dDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IElEQktleVBhdGggbV9rZXlQYXRoOworICAgIGNv
bnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4g
bV9rZXlSYW5nZTsKKyAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBl
OworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xh
c3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1v
ZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBQdXRPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlz
KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgUHV0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYg
dmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMpCisgICAgICAgIDogbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlk
KQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgICAgICwgbV92YWx1
ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2tleShrZXkpCisgICAgICAgICwgbV9wdXRNb2RlKHB1dE1v
ZGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1faW5kZXhJ
ZHMoaW5kZXhJZHMpCisgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQorICAgIHsKKyAg
ICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsK
KyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
bV92YWx1ZTsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5PiBtX2tleTsKKyAgICBjb25zdCBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgbV9wdXRNb2RlOworICAgIGNvbnN0IFJl
ZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiBtX2luZGV4SWRzOworICAgIGNvbnN0IFZlY3RvcjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OkluZGV4S2V5cz4gbV9pbmRleEtleXM7Cit9OworCitjbGFzcyBTZXRJbmRleGVzUmVhZHlP
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShzaXplX3QgaW5kZXhDb3VudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKGluZGV4Q291
bnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6
ZV90IGluZGV4Q291bnQpCisgICAgICAgIDogbV9pbmRleENvdW50KGluZGV4Q291bnQpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291bnQ7Cit9OworCitjbGFzcyBP
cGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6
Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JU
eXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFz
a1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5DdXJzb3JPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAg
T3BlbkN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNr
aW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwg
bV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4
SWQpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlv
bihkaXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAg
ICwgbV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3Mp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFj
a2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGlu
dDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAg
IGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgY29uc3QgSW5kZXhlZERC
OjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4g
Y3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb3VudE9wZXJhdGlv
bihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJh
bmdlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBDb3VudE9wZXJhdGlvbihQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
KyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRh
YmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3Jl
SWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9rZXlSYW5nZShr
ZXlSYW5nZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0K
KworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAg
IGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RT
dG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IFJlZlB0cjxJ
REJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKK307CisKK2NsYXNzIERlbGV0ZVJhbmdlT3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbihiYWNraW5nU3Rv
cmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiopOworcHJpdmF0ZToKKyAgICBEZWxldGVSYW5nZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2lu
Z1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1f
b2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFu
Z2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAg
ICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25z
dCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3Qg
UmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBDbGVhck9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDbGVhck9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIENsZWFyT3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAg
LCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2Jq
ZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAg
IH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwor
ICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwor
fTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6UGVuZGluZ09wZW5DYWxsIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nT3BlbkNhbGw+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IHZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlbmRpbmdP
cGVuQ2FsbChjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJz
aW9uKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7
IHJldHVybiBtX2NhbGxiYWNrczsgfQorICAgIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGRhdGFiYXNlQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNrczsgfQor
ICAgIGludDY0X3QgdmVyc2lvbigpIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorICAgIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JZDsgfQorCitwcml2
YXRlOgorICAgIFBlbmRpbmdPcGVuQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywg
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pCisgICAgICAgIDogbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VD
YWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgbV90cmFu
c2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1f
ZGF0YWJhc2VDYWxsYmFja3M7CisgICAgaW50NjRfdCBtX3ZlcnNpb247CisgICAgY29uc3QgaW50
NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpQZW5kaW5nRGVsZXRlQ2FsbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQZW5kaW5nRGVsZXRlQ2Fs
bChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAgUGVuZGluZ0Rl
bGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBtX2NhbGxiYWNrczsKK307CisKK1Bhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQj4gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKiBm
YWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCit7CisgICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI+IGJhY2tlbmQgPSBhZG9wdFJlZihuZXcgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQihuYW1lLCBkYXRhYmFzZSwgZmFjdG9yeSwgdW5pcXVlSWRlbnRpZmll
cikpOworICAgIGlmICghYmFja2VuZC0+b3BlbkludGVybmFsKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBiYWNrZW5kLnJlbGVhc2UoKTsKK30KKworbmFtZXNwYWNlIHsKK2NvbnN0
IGNoYXIqIE5vU3RyaW5nVmVyc2lvbiA9ICIiOworfQorCitJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQiogZmFjdG9y
eSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAgIDogbV9iYWNraW5nU3RvcmUo
YmFja2luZ1N0b3JlKQorICAgICwgbV9tZXRhZGF0YShuYW1lLCBJbnZhbGlkSWQsIE5vU3RyaW5n
VmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uLCBJbnZhbGlkSWQpCisg
ICAgLCBtX2lkZW50aWZpZXIodW5pcXVlSWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0
b3J5KQorICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3JMZXZlbERCOjpjcmVhdGUoKSkKKyAgICAsIG1fY2xvc2luZ0Nvbm5lY3Rpb24oZmFsc2Up
Cit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpCit7
CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9y
ZS5pZCkpOworICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0
YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5tYXhPYmplY3RT
dG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAgIG1fbWV0YWRhdGEubWF4T2Jq
ZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFp
bnMob2JqZWN0U3RvcmVJZCkpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShv
YmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjphZGRJ
bmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3Jl
SWQpOworCisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4Lmlk
KSk7CisgICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKKyAgICBp
ZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAg
ICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKKyAgICAg
ICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4SWQ7CisgICAgfQorICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9
CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cmVtb3ZlSW5kZXgoaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5k
ZXhJZCkpOworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3ZlKGluZGV4SWQpOworICAgIG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Cit9
CisKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6b3BlbkludGVybmFsKCkKK3sKKyAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmdl
dElEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAmbV9tZXRhZGF0YSwgc3VjY2Vz
cyk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09IChtX21ldGFkYXRhLmlkICE9
IEludmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxkIiwgc3VjY2VzcyA/ICJ0cnVl
IiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pZCkpOworICAg
IGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAg
ICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMobV9tZXRhZGF0YS5pZCwg
Jm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsKKworICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUsIG1fbWV0YWRhdGEudmVy
c2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFkYXRhLmlkKTsKK30KKworSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6fklEQkRhdGFiYXNlQmFja2VuZExldmVsREIoKQoreworfQor
CitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
YmFja2luZ1N0b3JlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmU7Cit9CisK
K3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQoreworICAg
IElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0U3RvcmUi
KTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4
SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQp
KTsKKworICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3Jl
SWQpOworfQorCit2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgi
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5j
cmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwg
bV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRo
LCBtX29iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCkpIHsKKyAgICAgICAgUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBl
cnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEu
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5y
ZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZExldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2Up
OworCisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0
b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1l
dGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgIERlbGV0ZU9iamVj
dFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7
CisgICAgcmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5
KQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlSW5k
ZXgiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAgQVNTRVJUKG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0
KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRh
aW5zKGluZGV4SWQpKTsKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIGluZGV4TWV0YWRhdGEo
bmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKworICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tp
bmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisKKyAgICBh
ZGRJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLCBpbmRleElkKTsKK30KKwordm9p
ZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0aW9u
Iik7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBt
X29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUs
IG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4
TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBT
dHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4
ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KK30KKwordm9pZCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElE
Ql9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9VTlVTRUQo
dHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+cmVtb3ZlSW5kZXgo
bV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI6OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCOjpkZWxldGVJbmRleCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQp
OworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7
CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisKKyAgICBBU1NFUlQo
b2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3JlLmluZGV4ZXMuZ2V0KGluZGV4
SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlv
bjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSwg
RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGlu
ZGV4TWV0YWRhdGEpKTsKKworICAgIHJlbW92ZUluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4SWQp
OworfQorCit2b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiRGVsZXRlSW5k
ZXhPcGVyYXRpb24iKTsKKyAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCB0cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQpOworICAg
IGlmICghb2spIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBpbmRleCAnJXMnLiIsIG1f
aW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KGVycm9yKTsKKyAgICB9Cit9CisKK3ZvaWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlv
bjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOworICAgIG1fZGF0YWJhc2UtPmFkZElu
ZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJ
bnZhbGlkSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvbW1pdChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhlIGZyb250ZW5kIHN1Z2dlc3RzIHRo
YXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gYWJv
cnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25BYm9ydCBoYXMg
YWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3aWxsIGZpbmQg
b3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCktPmNvbW1pdCgpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OmFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkKK3sKKyAgICAvLyBJZiB0aGUgdHJhbnNhY3Rp
b24gaXMgdW5rbm93biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkgdGhlIGJh
Y2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4KKyAgICBp
ZiAobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCisgICAgICAgIG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsKK30KKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCit7CisgICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9u
IGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNr
ZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCisgICAgaWYg
KG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmdldCIpOwor
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAg
IHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpj
cmVhdGUobV9iYWNraW5nU3RvcmUsIG1fbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGtleVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5IDogSW5kZXhlZERC
OjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgR2V0T3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQorewor
ICAgIElEQl9UUkFDRSgiR2V0T3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7
CisKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisgICAgICAgIGtleSA9IG1fa2V5
UmFuZ2UtPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgICAgICBpZiAobV9pbmRleElkID09
IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
c29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOworICAgICAgICAgICAgLy8gT2Jq
ZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5
T25seSkKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9u
CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9w
ZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQo
KSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAg
ICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVD
dXJzb3IpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNv
ci0+a2V5KCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKKyAgICBi
b29sIG9rOworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElk
KSB7CisgICAgICAgIC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAg
IFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAgICAgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVj
b3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOworICAgICAgICBpZiAoIW9rKSB7CisgICAg
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJl
Y29yZC4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9hdXRvSW5j
cmVtZW50ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgbV9rZXlQ
YXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOworICAgICAg
ICByZXR1cm47CisKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25s
eSB3aXRoIGluZGV4ZXMuCisgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZp
YUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAgICBp
ZiAoIW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIXByaW1hcnlLZXkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcygp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhl
ZERCOjpDdXJzb3JLZXlPbmx5KSB7CisgICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBP
cGVyYXRpb24KKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFs
dWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAgICBvayA9
IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgdmFs
dWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNj
ZXNzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fYXV0b0luY3JlbWVudCAm
JiAhbV9rZXlQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHByaW1hcnlLZXksIG1fa2V5UGF0aCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFy
ZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OnB1dCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24p
CisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0
KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0lu
Y3JlbWVudCB8fCBrZXkuZ2V0KCkpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhQ
dXRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlz
KSk7Cit9CisKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiUHV0T3BlcmF0aW9uIik7
CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
blJlYWRPbmx5KTsKKyAgICBBU1NFUlQobV9pbmRleElkcy5zaXplKCkgPT0gbV9pbmRleEtleXMu
c2l6ZSgpKTsKKyAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOworCisgICAgUmVmUHRy
PElEQktleT4ga2V5OworICAgIGlmIChtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpDdXJzb3JVcGRhdGUgJiYgbV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmICFt
X2tleSkgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kTGV2ZWxEQjo6Z2VuZXJhdGVLZXkobV9iYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9u
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAgICAgICBrZXlXYXNHZW5lcmF0
ZWQgPSB0cnVlOworICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3Ig
dmFsdWUgcmVhY2hlZC4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAga2V5ID0gYXV0b0luY0tleTsKKyAgICB9IGVsc2UKKyAgICAgICAga2V5ID0gbV9rZXk7CisK
KyAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKKworICAgIElEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOworICAgIGlmIChtX3B1dE1vZGUg
PT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5KSB7CisgICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlz
dHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksICZyZWNvcmRJZGVudGlmaWVyLCBm
b3VuZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0
aGUgb2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFZlY3RvcjxPd25QdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6SW5k
ZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAg
Ym9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7CisgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNj
ZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6bWFrZUluZGV4V3JpdGVycyh0cmFu
c2FjdGlvbiwgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1faW5kZXhJZHMsIG1faW5kZXhLZXlzLCAmaW5kZXhX
cml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tp
bmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFu
eSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGlu
IGNhc2Ugb2YgZXJyb3IuCisgICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3Jl
LT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgJnJlY29yZElkZW50aWZp
ZXIpOworICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgeworICAgICAgICBtX2NhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZv
cm1pbmcgcHV0L2FkZC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBJREJP
YmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRl
eFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhy
ZWNvcmRJZGVudGlmaWVyLCAqbV9iYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAgIH0K
KworICAgIGlmIChtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgbV9wdXRNb2RlICE9IElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09
IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gSURCT2JqZWN0U3RvcmVC
YWNrZW5kTGV2ZWxEQjo6dXBkYXRlS2V5R2VuZXJhdG9yKG1fYmFja2luZ1N0b3JlLCB0cmFuc2Fj
dGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCBrZXkuZ2V0KCksICFrZXlXYXNH
ZW5lcmF0ZWQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQor
eworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6c2V0SW5kZXhLZXlz
Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIFJlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IHN0b3Jl
ID0gYmFja2luZ1N0b3JlKCk7CisgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFz
eW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0
cmEgY29tcGxleGl0eS4KKyAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVj
b3JkSWRlbnRpZmllcjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IHN0
b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgJnJl
Y29yZElkZW50aWZpZXIsIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cy4iKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkgeworICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVy
cm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OkluZGV4
V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJv
b2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBJREJP
YmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjptYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBz
dG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgcHJpbWFyeUtleSwgZmFsc2Us
IGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UsIG9iZXlz
Q29uc3RyYWludHMpOworICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgeworICAgICAgICB0
cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJv
ciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9y
LCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIElEQk9i
amVjdFN0b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4
V3JpdGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJl
Y29yZElkZW50aWZpZXIsICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAgIH0KK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKQoreworICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6c2V0SW5kZXhlc1JlYWR5Iik7
CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
bjo6Y3JlYXRlKGluZGV4SWRzLnNpemUoKSkpOworfQorCit2b2lkIFNldEluZGV4ZXNSZWFkeU9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBJREJfVFJBQ0UoIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyArK2kpCisgICAgICAgIHRyYW5zYWN0
aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOworfQorCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZExldmVsREI6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBrZXlP
bmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6Om9wZW5DdXJz
b3IiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQor
ICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5DdXJz
b3JPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29y
S2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFj
a3MpKTsKK30KKwordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT3BlbkN1
cnNvck9wZXJhdGlvbiIpOworCisgICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGlu
Zywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCisgICAgLy8gdW50aWwgdGhlIGluZGV4
aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgorICAgIC8vIGJl
Y2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRp
cGxlCisgICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQo
KSdzIGluIGJldHdlZW4uCisgICAgaWYgKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFkZFByZWVt
cHRpdmVFdmVudCgpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3I7CisgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJ
bnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1
cnNvcktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
bV9kaXJlY3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX3Rhc2tUeXBlID09
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzayk7CisgICAgICAgIGlmICht
X2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KQorICAgICAgICAgICAgYmFj
a2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVj
dFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdl
dCgpLCBtX2RpcmVjdGlvbik7CisgICAgfQorCisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3Ip
IHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZm
ZXIqPigwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGU+KG1fdGFza1R5cGUpKTsKKyAgICBSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZExldmVsREI+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpjcmVh
dGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCB0cmFu
c2FjdGlvbiwgbV9vYmplY3RTdG9yZUlkKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1
cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUo
KSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y291bnQoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpj
b3VudCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhD
b3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgQ291bnRPcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7
CisgICAgSURCX1RSQUNFKCJDb3VudE9wZXJhdGlvbiIpOworICAgIHVpbnQzMl90IGNvdW50ID0g
MDsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
cjsKKworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQor
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0
b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpD
dXJzb3JOZXh0KTsKKyAgICBlbHNlCisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFj
a2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1f
a2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgaWYgKCFiYWNraW5n
U3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgICsrY291bnQ7CisgICAg
fSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKKworICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNl
QmFja2VuZExldmVsREI6OmRlbGV0ZVJhbmdlIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7
CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7CisKKyAg
ICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjcmVhdGUo
bV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKK30KKwordm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkRlbGV0ZVJh
bmdlT3BlcmF0aW9uIik7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAg
ICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlm
ICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIGJhY2tpbmdTdG9y
ZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKSkgeworICAgICAgICAgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGJhY2tp
bmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7CisgICAgfQorCisgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcygpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y2xlYXIiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAg
IHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ2xlYXJPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tp
bmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgQ2xl
YXJPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNh
Y3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Cisg
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQpKSB7
CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2JqZWN0
IHN0b3JlIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoKTsKK30KKwordm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJB
Q0UoIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisgICAgYm9vbCBvayA9IG1fYmFja2lu
Z1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YS5pZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9i
amVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKKyAgICB9Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJ
REJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24iKTsKKyAgICBpbnQ2NF90IGRhdGFiYXNl
SWQgPSBtX2RhdGFiYXNlLT5pZCgpOworICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IG1fZGF0YWJh
c2UtPm1fbWV0YWRhdGEuaW50VmVyc2lvbjsKKyAgICBBU1NFUlQobV92ZXJzaW9uID4gb2xkVmVy
c2lvbik7CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV92ZXJzaW9u
OworICAgIGlmICghbV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNl
SW50VmVyc2lvbih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJh
c2VJZCwgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkgeworICAgICAgICBSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBz
dGFibGUgc3RvcmFnZSB3aGVuIHVwZGF0aW5nIHZlcnNpb24uIik7CisgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fcGVuZGlu
Z1NlY29uZEhhbGZPcGVuKTsKKyAgICBtX2RhdGFiYXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
biA9IFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKG1fY2FsbGJhY2tzLCBtX2RhdGFiYXNlQ2FsbGJh
Y2tzLCBtX3RyYW5zYWN0aW9uSWQsIG1fdmVyc2lvbik7CisgICAgbV9jYWxsYmFja3MtPm9uVXBn
cmFkZU5lZWRlZChvbGRWZXJzaW9uLCBtX2RhdGFiYXNlLCBtX2RhdGFiYXNlLT5tZXRhZGF0YSgp
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvblN0YXJ0
ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBwcnBUcmFuc2FjdGlv
bikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rp
b24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgeworICAgICAgICBBU1NFUlQoIW1fcnVu
bmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAgIH0KK30KKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247
CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT5pZCgpKSk7
CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi0+aWQoKSkgPT0gdHJh
bnNhY3Rpb24uZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbi0+
aWQoKSk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmdldCgpID09
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgIG1fcnVu
bmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOworICAgIH0KK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJl
ZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHBycFRyYW5zYWN0aW9u
KQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiB0cmFuc2FjdGlv
biA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7CisgICAgICAgIC8vIElmIHRoaXMgd2Fz
IGFuIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwgYmUgYSAic2Vjb25kCisgICAg
ICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBwcm9jZXNzUGVuZGluZ0Nh
bGxzLgorICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBsb25nZXIgc3VwcG9ydCBzZXRWZXJz
aW9uLCBhc3NlcnQgc3VjaCBhIHRoaW5nLgorICAgICAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFs
Zk9wZW4pIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3Mo
KS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkFib3J0RXJyb3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZCBpbiB1
cGdyYWRlbmVlZGVkIGV2ZW50IGhhbmRsZXIuIikpOworICAgICAgICAgICAgbV9wZW5kaW5nU2Vj
b25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIHByb2Nlc3NQZW5kaW5n
Q2FsbHMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJh
bnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBp
ZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNo
YW5nZSkKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworfQorCitzaXplX3QgSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y29ubmVjdGlvbkNvdW50KCkKK3sKKyAgICAvLyBUaGlzIGRv
ZXMgbm90IGluY2x1ZGUgcGVuZGluZyBvcGVuIGNhbGxzLCBhcyB0aG9zZSBzaG91bGQgbm90IGJs
b2NrIHZlcnNpb24gY2hhbmdlcyBhbmQgZGVsZXRlcy4KKyAgICByZXR1cm4gbV9kYXRhYmFzZUNh
bGxiYWNrc1NldC5zaXplKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
cHJvY2Vzc1BlbmRpbmdDYWxscygpCit7CisgICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVu
KSB7CisgICAgICAgIEFTU0VSVChtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09
IG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CisgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9
IEludmFsaWRJZCk7CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3Mo
KS0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOworICAgICAgICBtX3BlbmRpbmdT
ZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNv
bXBsZXRlLCBhcyBwZW5kaW5nIGRlbGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4K
KyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXph
dGlvbiB0byByZWR1Y2UgcXVldWUtY2h1cm4gYW5kCisgICAgLy8gbm90IG5lY2Vzc2FyeSBmb3Ig
Y29ycmVjdG5lc3M7IGRlbGV0ZURhdGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCisgICAg
Ly8gcmVxdWV1ZSB0aGVpciBjYWxscyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgorICAgIGlm
IChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJh
c2VCbG9ja2VkKCkpCisgICAgICAgIHJldHVybjsKKyAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0
ZUNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBl
bmRpbmdEZWxldGVDYWxsID0gbV9wZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7CisgICAg
ICAgIGRlbGV0ZURhdGFiYXNlRmluYWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsK
KyAgICB9CisgICAgLy8gZGVsZXRlRGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVldWUg
Y2FsbHMuCisgICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7CisKKyAg
ICAvLyBUaGlzIGNoZWNrIGlzIGFsc28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0aW9u
IHdvdWxkIGp1c3QgcmVxdWV1ZSBpdHMgY2FsbHMuCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3BlbiBjYWxscyBj
YW4gYmUgcmVxdWV1ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0
cmFuc2FjdGlvbi4KKyAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRpbmdP
cGVuQ2FsbHM7CisgICAgbV9wZW5kaW5nT3BlbkNhbGxzLnN3YXAocGVuZGluZ09wZW5DYWxscyk7
CisgICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBPd25Q
dHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxzLnRh
a2VGaXJzdCgpOworICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNhbGxi
YWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIHBlbmRpbmdPcGVu
Q2FsbC0+dHJhbnNhY3Rpb25JZCgpLCBwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSk7CisgICAg
fQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNyZWF0ZVRyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmNyZWF0ZSh0cmFu
c2FjdGlvbklkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZT4obW9kZSksIHRoaXMpOworICAgIEFTU0VSVCghbV90cmFuc2Fj
dGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0
cmFuc2FjdGlvbklkLCB0cmFuc2FjdGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQjo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VD
YWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQoreworICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKKworICAgIGlmICgh
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbikgeworICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKFBlbmRpbmdP
cGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9u
SWQsIHZlcnNpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX21ldGFk
YXRhLmlkID09IEludmFsaWRJZCkgeworICAgICAgICAvLyBUaGUgZGF0YWJhc2Ugd2FzIGRlbGV0
ZWQgdGhlbiBpbW1lZGlhdGVseSByZS1vcGVuZWQ7IG9wZW5JbnRlcm5hbCgpIHJlY3JlYXRlcyBp
dCBpbiB0aGUgYmFja2luZyBzdG9yZS4KKyAgICAgICAgaWYgKG9wZW5JbnRlcm5hbCgpKQorICAg
ICAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFk
YXRhOjpOb0ludFZlcnNpb24pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBt
ZXNzYWdlOworICAgICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yOworICAg
ICAgICAgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9u
KQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRh
YmFzZSB3aXRoIG5vIHZlcnNpb24gc3BlY2lmaWVkLiI7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBvcGVu
aW5nIGRhdGFiYXNlIHdpdGggdmVyc2lvbiAlbGxkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2
ZXJzaW9uKSk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGluZmVy
IHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlzdCBmcm9tIGl0cyBsYWNrIG9mIGVpdGhlciB0
eXBlIG9mIHZlcnNpb24uCisgICAgYm9vbCBpc05ld0RhdGFiYXNlID0gbV9tZXRhZGF0YS52ZXJz
aW9uID09IE5vU3RyaW5nVmVyc2lvbiAmJiBtX21ldGFkYXRhLmludFZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOworCisgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0
YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pIHsKKyAgICAgICAgLy8gRklYTUU6IHRo
aXMgY29tbWVudHMgd2FzIHJlbGF0ZWQgdG8gQ2hyb21pdW0gY29kZS4gSXQgbWF5IGJlIGluY29y
cmVjdAorICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0cyBvbmx5IC0gc2tpcCB1cGdyYWRlIHN0ZXBz
LiBDYWxsaW5nIGZyb20gc2NyaXB0IHdpdGggRGVmYXVsdEludFZlcnNpb24gdGhyb3dzIGV4Y2Vw
dGlvbi4KKyAgICAgICAgQVNTRVJUKGlzTmV3RGF0YWJhc2UpOworICAgICAgICBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9u
KSB7CisgICAgICAgIGlmICghaXNOZXdEYXRhYmFzZSkgeworICAgICAgICAgICAgbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihkYXRhYmFzZUNh
bGxiYWNrcykpOworICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+
bWV0YWRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g
U3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhp
c3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0byAxLgorICAgICAgICB2ZXJzaW9uID0gMTsKKyAg
ICB9CisKKyAgICBpZiAodmVyc2lvbiA+IG1fbWV0YWRhdGEuaW50VmVyc2lvbikgeworICAgICAg
ICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxi
YWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKHZlcnNpb24gPCBtX21ldGFkYXRhLmludFZlcnNpb24pIHsKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICgl
bGxkKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCVsbGQpLiIsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4odmVyc2lvbiksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0
YS5pbnRWZXJzaW9uKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQodmVy
c2lvbiA9PSBtX21ldGFkYXRhLmludFZlcnNpb24pOworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlz
LCB0aGlzLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
OjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJh
c2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNr
czsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0g
cHJwRGF0YWJhc2VDYWxsYmFja3M7CisgICAgQVNTRVJUKGNhbGxiYWNrcyk7CisgICAgZm9yIChE
YXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBh
dCBjb25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KKyAgICAgICAgaWYgKCpp
dCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFu
Z2UobV9tZXRhZGF0YS5pbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uKTsKKyAgICB9CisgICAg
Ly8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRpbCBhbGwgdGhlIHZlcnNpb24gY2hhbmdl
IGV2ZW50cyBhcmUKKyAgICAvLyBkZWxpdmVyZWQgYW5kIHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNh
bGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5nCisgICAgLy8gb3IgZmlyaW5nIGEgYmxv
Y2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cK
KyAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29ycmVjdGx5KSBkaWQgaXQuCisgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2NrZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRp
bCB0aGUgZnJvbnRlbmQKKyAgICAvLyB0ZWxscyB1cyB0aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVu
dHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpKQorICAg
ICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLmludFZlcnNpb24pOworICAgIC8v
IEZJWE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLgor
ICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgY29ubmVjdGlvbkNv
dW50KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNh
bGw6OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCBy
ZXF1ZXN0ZWRWZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8
aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgY3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rp
b25JZCwgZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5z
YWN0aW9uVmVyc2lvbkNoYW5nZSk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwor
CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpj
cmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBk
YXRhYmFzZUNhbGxiYWNrcyksIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uKSk7CisKKyAgICBB
U1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKKyAgICBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQjo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxi
YWNrcykKK3sKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7CisgICAgaWYgKGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpIHsKKyAgICAgICAgZm9yIChE
YXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRoZSBldmVudCBpcyBub3QgZmly
ZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGluZyBzZXQuCisgICAgICAgICAg
ICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgSURCRGF0YWJh
c2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTog
T25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0
aGUKKyAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0
IHNldCB1cCB0byBmaXJlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0
YS5pbnRWZXJzaW9uKTsKKyAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRp
bmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzLnJlbGVhc2UoKSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGRlbGV0ZURhdGFiYXNlRmluYWwoY2FsbGJhY2tzLnJlbGVhc2UoKSk7
Cit9CisKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6aXNEZWxldGVEYXRhYmFzZUJs
b2NrZWQoKQoreworICAgIHJldHVybiBjb25uZWN0aW9uQ291bnQoKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxv
Y2tlZCgpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgIGlmICghbV9iYWNraW5n
U3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbWV0YWRhdGEubmFtZSkpIHsKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgZGF0YWJhc2UuIikpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbWV0YWRhdGEudmVyc2lvbiA9IE5vU3RyaW5n
VmVyc2lvbjsKKyAgICBtX21ldGFkYXRhLmlkID0gSW52YWxpZElkOworICAgIG1fbWV0YWRhdGEu
aW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKKyAgICBtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7
Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y2xvc2UoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIFJlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNrcykpOworCisgICAgbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tzKTsKKyAgICBpZiAobV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmRhdGFiYXNlQ2FsbGJhY2tzKCkg
PT0gY2FsbGJhY2tzKSB7CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFj
a3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKKyAgICAgICAg
bV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAgIH0KKworICAgIGlmIChjb25u
ZWN0aW9uQ291bnQoKSA+IDEpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIHByb2Nlc3NQZW5k
aW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3IgdG8gcHJvY2VzcyBhIHBlbmRpbmcgb3BlbiBj
YWxsCisgICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJlZW50ZXJpbmcgSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQjo6Y2xvc2UuIFRoZW4gdGhlCisgICAgLy8gYmFja2VuZCB3b3VsZCBiZSByZW1vdmVk
IGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBjb25uZWN0aW9uLCBhbmQKKyAgICAv
LyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxlZCBjbG9zZS4KKyAgICAvLyBUbyBh
dm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBpbiBjYXNlIG9mIHJlZW50cmFuY3ku
CisgICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBUZW1w
b3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24obV9jbG9zaW5nQ29ubmVjdGlvbiwg
dHJ1ZSk7CisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworCisgICAgLy8gRklYTUU6IEFkZCBh
IHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2FzZXMgYmVsb3cuCisgICAgaWYgKCFj
b25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLnNpemUoKSAmJiAhbV9wZW5k
aW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7CisgICAgICAgIFRyYW5zYWN0aW9uTWFwIHRyYW5zYWN0
aW9ucyhtX3RyYW5zYWN0aW9ucyk7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBl
cnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIpOworICAgICAgICBmb3IgKFRyYW5z
YWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0gdHJhbnNhY3Rpb25zLnZhbHVl
cygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9ucy52YWx1ZXMoKS5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICAgICAgKCppdCktPmFib3J0KGVycm9yKTsKKworICAgICAgICBBU1NF
UlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKKworICAgICAgICBtX2JhY2tpbmdTdG9yZS5j
bGVhcigpOworCisgICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgYmUgZmFsc2UgaW4g
dW5pdCB0ZXN0cy4KKyAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7CisgICAgICAgIGlmIChtX2Zh
Y3RvcnkpCisgICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZCht
X2lkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9u
KQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwor
ICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRh
YmFzZS0+cmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBEZWxl
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiRGVsZXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFu
c2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+YWRkT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZU1l
dGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOworfQorCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJ
REJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9VTlVT
RUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0
YS52ZXJzaW9uID0gbV9wcmV2aW91c1ZlcnNpb247CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0
YS5pbnRWZXJzaW9uID0gbV9wcmV2aW91c0ludFZlcnNpb247Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVW
RUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4ZjY2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQi5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQl9oCisKKyNpbmNs
dWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgorI2luY2x1ZGUg
PHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SURCQmFja2luZ1N0b3JlOworY2xhc3MgSURCRGF0YWJhc2U7CitjbGFzcyBJREJGYWN0b3J5QmFj
a2VuZExldmVsREI7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOworY2xhc3Mg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI7CisKK2NsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREIgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJGYWN0
b3J5QmFja2VuZExldmVsREIqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOworICAg
IHZpcnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZExldmVsREIoKTsKKworICAgIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdDsKKworICAgIHN0YXRpYyBjb25z
dCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YWRhdGEuaWQ7IH0KKyAgICB2b2lkIGFkZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpOworICAgIHZvaWQg
cmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2b2lkIGFkZElu
ZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIGludDY0
X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdm9pZCByZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisKKyAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKTsKKyAgICB2b2lkIGRlbGV0ZURh
dGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgY29uc3QgSURCRGF0YWJhc2VN
ZXRhZGF0YSYgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9CisKKyAgICAv
LyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hv
cnQgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21taXQoaW50NjRfdCB0cmFuc2FjdGlv
bklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRleChpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBt
dWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisKKyAgICBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQiogdHJhbnNhY3Rpb25Db29yZGluYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorICAgIHZv
aWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQj4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI+KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRD
b21wbGV0ZUZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4pOwor
ICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHB1dChpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5
cz4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
UHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURF
OworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJGYWN0b3J5QmFja2VuZExldmVs
REIqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOworCisgICAgYm9vbCBvcGVuSW50
ZXJuYWwoKTsKKyAgICB2b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7CisgICAgc2l6ZV90
IGNvbm5lY3Rpb25Db3VudCgpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworCisg
ICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpOworICAgIHZvaWQgZGVsZXRlRGF0YWJh
c2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisgICAgY2xhc3MgVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbjsKKworICAgIC8vIFdoZW4gYSAidmVyc2lvbmNoYW5nZSIgdHJhbnNhY3Rp
b24gYWJvcnRzLCB0aGVzZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBvYmplY3QgaGllcmFyY2h5Lgor
ICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsKKworICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbV9t
ZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgLy8gVGhpcyBtaWdodCBu
b3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0aW1lIGlzIHRo
YXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25zZXJ2aXRpdmUg
dGhhbiBzb3JyeS4KKyAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCPiBtX2ZhY3Rv
cnk7CisKKyAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI+IG1fdHJh
bnNhY3Rpb25Db29yZGluYXRvcjsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQj4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOworCisgICAgdHlwZWRlZiBI
YXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqPiBUcmFuc2FjdGlv
bk1hcDsKKyAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKKworICAgIGNsYXNzIFBl
bmRpbmdPcGVuQ2FsbDsKKyAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPiA+IG1fcGVu
ZGluZ09wZW5DYWxsczsKKyAgICBPd25QdHI8UGVuZGluZ09wZW5DYWxsPiBtX3BlbmRpbmdTZWNv
bmRIYWxmT3BlbjsKKworICAgIGNsYXNzIFBlbmRpbmdEZWxldGVDYWxsOworICAgIERlcXVlPE93
blB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdEZWxldGVDYWxsczsKKworICAgIHR5
cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiA+IERhdGFiYXNl
Q2FsbGJhY2tzU2V0OworICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQ7CisKKyAgICBib29sIG1fY2xvc2luZ0Nvbm5lY3Rpb247Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNF
KExFVkVMREIpCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40YTM4MTA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCkBA
IC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
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
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQi5oIgorCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1
ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVs
REIuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIE0+CitzdGF0aWMgdm9pZCBjbGVhbldlYWtNYXAoSGFz
aE1hcDxLLCBXZWFrUHRyPE0+ID4mIG1hcCkKK3sKKyAgICBIYXNoTWFwPEssIFdlYWtQdHI8TT4g
PiBvdGhlcjsKKyAgICBvdGhlci5zd2FwKG1hcCk7CisKKyAgICB0eXBlbmFtZSBIYXNoTWFwPEss
IFdlYWtQdHI8TT4gPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLmJlZ2luKCk7CisgICAg
d2hpbGUgKGl0ZXIgIT0gb3RoZXIuZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlLmdl
dCgpKQorICAgICAgICAgICAgbWFwLnNldChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKTsKKyAgICAg
ICAgKytpdGVyOworICAgIH0KK30KKworc3RhdGljIFN0cmluZyBjb21wdXRlRmlsZUlkZW50aWZp
ZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyIGxldmVsREJGaWxlU3VmZml4W10gPSAiQDEiOworICAgIHJldHVybiBzZWN1cml0eU9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyBsZXZlbERCRmlsZVN1ZmZpeDsKK30KKworc3RhdGlj
IFN0cmluZyBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3Vy
aXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1cm4gY29tcHV0ZUZpbGVJZGVu
dGlmaWVyKHNlY3VyaXR5T3JpZ2luKSArIG5hbWU7Cit9CisKK0lEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQjo6SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCkKK3sKK30KKworSURCRmFjdG9yeUJhY2tl
bmRMZXZlbERCOjp+SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCkKK3sKK30KKwordm9pZCBJREJG
YWN0b3J5QmFja2VuZExldmVsREI6OnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJp
bmcmIHVuaXF1ZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VCYWNrZW5kTWFw
LmNvbnRhaW5zKHVuaXF1ZUlkZW50aWZpZXIpKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5y
ZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIElEQl9UUkFD
RSgiSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpnZXREYXRhYmFzZU5hbWVzIik7CisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1
cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBiYWNr
aW5nIHN0b3JlIGZvciBpbmRleGVkREIud2Via2l0R2V0RGF0YWJhc2VOYW1lcy4iKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZGF0YWJhc2VO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4gZm91
bmROYW1lcyA9IGJhY2tpbmdTdG9yZS0+Z2V0RGF0YWJhc2VOYW1lcygpOworICAgIGZvciAoVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm91bmROYW1lcy5iZWdpbigpOyBpdCAh
PSBmb3VuZE5hbWVzLmVuZCgpOyArK2l0KQorICAgICAgICBkYXRhYmFzZU5hbWVzLT5hcHBlbmQo
Kml0KTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgp
KTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit7CisgICAgSURCX1RSQUNFKCJJ
REJGYWN0b3J5QmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFiYXNlIik7CisgICAgY29uc3QgU3Ry
aW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1
cml0eU9yaWdpbi5nZXQoKSk7CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBp
ZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gSWYgdGhl
cmUgYXJlIGFueSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UsIGRpcmVjdGx5IGRlbGV0ZSB0
aGUKKyAgICAgICAgLy8gZGF0YWJhc2UuCisgICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlRGF0YWJh
c2UoY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBF
dmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgor
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3Rv
cmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgIGlmICghYmFja2luZ1N0b3Jl
KSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIG9wZW5p
bmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlLiIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
PiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjcmVhdGUobmFt
ZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBpZiAo
ZGF0YWJhc2VCYWNrZW5kKSB7CisgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlx
dWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworICAgICAgICBkYXRhYmFzZUJh
Y2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CisgICAgICAgIG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgZGF0YWJhc2UgYmFj
a2VuZCBmb3IgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlLiIpKTsKK30KKworUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6b3BlbkJhY2tpbmdTdG9y
ZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyZWN0b3J5KQoreworICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNv
bXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSk7CisgICAgY29uc3QgYm9v
bCBvcGVuSW5NZW1vcnkgPSBkYXRhRGlyZWN0b3J5LmlzRW1wdHkoKTsKKworICAgIElEQkJhY2tp
bmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5nU3RvcmVNYXAuZmluZChmaWxlSWRl
bnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSAmJiBpdDIt
PnZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gaXQyLT52YWx1ZS5nZXQoKTsKKworICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBpZiAob3BlbkluTWVtb3J5
KQorICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW5Jbk1lbW9yeShz
ZWN1cml0eU9yaWdpbi5nZXQoKSwgZmlsZUlkZW50aWZpZXIpOworICAgIGVsc2UKKyAgICAgICAg
YmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgp
LCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllcik7CisKKyAgICBpZiAoYmFja2luZ1N0b3Jl
KSB7CisgICAgICAgIGNsZWFuV2Vha01hcChtX2JhY2tpbmdTdG9yZU1hcCk7CisgICAgICAgIG1f
YmFja2luZ1N0b3JlTWFwLnNldChmaWxlSWRlbnRpZmllciwgYmFja2luZ1N0b3JlLT5jcmVhdGVX
ZWFrUHRyKCkpOworICAgICAgICAvLyBJZiBhbiBpbi1tZW1vcnkgZGF0YWJhc2UsIGJpbmQgbGlm
ZXRpbWUgdG8gdGhpcyBmYWN0b3J5IGluc3RhbmNlLgorICAgICAgICBpZiAob3BlbkluTWVtb3J5
KQorICAgICAgICAgICAgbV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXMuYWRkKGJhY2tpbmdTdG9y
ZSk7CisKKyAgICAgICAgLy8gQWxsIGJhY2tpbmcgc3RvcmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGZhY3Rvcnkgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEFTU0VSVChtX3Nl
c3Npb25Pbmx5QmFja2luZ1N0b3Jlcy5pc0VtcHR5KCkgfHwgb3BlbkluTWVtb3J5KTsKKworICAg
ICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVsREI6Om9wZW4oY29uc3QgU3RyaW5n
JiBuYW1lLCBpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4gZGF0YWJhc2VDYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3Vy
aXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
ZWN0b3J5KQoreworICAgIElEQl9UUkFDRSgiSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpvcGVu
Iik7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IHBycFNlY3Vy
aXR5T3JpZ2luOworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVu
aXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworCisgICAgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlQmFja2VuZDsKKyAgICBJREJEYXRh
YmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1
bmlxdWVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgPT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5k
KCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3Bl
bkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgICAgIGlm
ICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9yIGluZGV4ZWREQi5vcGVuLiIp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFiYXNlQmFj
a2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3Rv
cmUuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgICAgICBpZiAoZGF0YWJhc2VC
YWNrZW5kKQorICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50
aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgZGF0YWJh
c2UgYmFja2VuZCBmb3IgaW5kZXhlZGRiLm9wZW4uIikpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IGl0LT52YWx1
ZTsKKworICAgIGRhdGFiYXNlQmFja2VuZC0+b3BlbkNvbm5lY3Rpb24oY2FsbGJhY2tzLCBkYXRh
YmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0Uo
TEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDkxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQi5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJGYWN0b3J5QmFja2VuZExldmVsREJf
aAorI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZExldmVsREJfaAorCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NU3Ry
aW5nTGlzdDsKKworY2xhc3MgSURCQmFja2luZ1N0b3JlOworY2xhc3MgSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjsKKworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCIDogcHVibGljIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJGYWN0b3J5QmFja2VuZExldmVsREI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQigpKTsKKyAgICB9CisgICAg
dmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCk7CisKKyAgICAvLyBOb3RpZmljYXRp
b25zIGZyb20gd2VhayBwb2ludGVycy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCRGF0YWJh
c2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGlu
dDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURp
cik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKworcHJvdGVj
dGVkOgorICAgIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQigpOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisKK3ByaXZhdGU6CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+ID4gSURC
RGF0YWJhc2VCYWNrZW5kTWFwOworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNl
QmFja2VuZE1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFdlYWtQdHI8SURCQmFj
a2luZ1N0b3JlPiA+IElEQkJhY2tpbmdTdG9yZU1hcDsKKyAgICBJREJCYWNraW5nU3RvcmVNYXAg
bV9iYWNraW5nU3RvcmVNYXA7CisKKyAgICBIYXNoU2V0PFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
ID4gbV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXM7CisKKyAgICAvLyBPbmx5IG9uZSBpbnN0YW5j
ZSBvZiB0aGUgZmFjdG9yeSBzaG91bGQgZXhpc3QgYXQgYW55IGdpdmVuIHRpbWUuCisgICAgc3Rh
dGljIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQiogaWRiRmFjdG9yeUJhY2tlbmRJbXBsOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCmluZGV4IDg4ZTBlMGIuLjA0ZTQyNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2
ZWxEQkNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcApAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKIAotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKSAmJiBVU0UoTEVWRUxEQikKIAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklE
QktleVBhdGguaCIKQEAgLTE1MjIsNyArMTUyMSw3IEBAIGludDY0X3QgSW5kZXhGcmVlTGlzdEtl
eTo6aW5kZXhJZCgpIGNvbnN0CiB9CiAKIC8vIEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBs
b29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0vLyBpcyBrZXB0IGlu
IHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVs
aWFibGU/CisvLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLiBDYW4g
dGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CiAvLyBDYW4gd2UgcmVtb3ZlIHRoaXM/CiBj
b25zdCBjaGFyKiBPYmplY3RTdG9yZU5hbWVzS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQs
IGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5KiByZXN1bHQpCiB7CkBAIC0x
ODA1LDUgKzE4MDQsNCBAQCBQYXNzUmVmUHRyPElEQktleT4gSW5kZXhEYXRhS2V5OjpwcmltYXJ5
S2V5KCkgY29uc3QKIH0gLy8gbmFtZXNwYWNlIElEQkxldmVsREJDb2RpbmcKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBV
U0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5kZXggNTYxOTdmNi4uYWQyMmYxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJM
ZXZlbERCQ29kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgSURCTGV2
ZWxEQkNvZGluZ19oCiAjZGVmaW5lIElEQkxldmVsREJDb2RpbmdfaAogCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQogCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTI4Miw3ICsyODEsNyBAQCBwcml2YXRlOgogY2xhc3MgT2Jq
ZWN0U3RvcmVOYW1lc0tleSB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0
aGlzIHRvIGxvb2sgdXAgb2JqZWN0IHN0b3JlIGlkcywgYmVjYXVzZSBhIG1hcHBpbmcKLSAgICAv
LyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4gdGhlIG1hcHBpbmcg
YmVjb21lIHVucmVsaWFibGU/CisgICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQi4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPwogICAgIC8vIENh
biB3ZSByZW1vdmUgdGhpcz8KICAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1lc0tleSogcmVzdWx0
KTsKICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsKQEAgLTM2Myw3ICszNjIsNiBAQCBwcml2YXRl
OgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLSNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAKICNlbmRpZiAvLyBJREJMZXZlbERCQ29kaW5n
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTBlN2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZExldmVsREIuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuaCIKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklE
QkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZExl
dmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJU
cmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlcjo6dmVyaWZ5SW5kZXhLZXlz
KElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywgY29uc3QgSURCS2V5KiBwcmlt
YXJ5S2V5LCBTdHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QKK3sKKyAgICBjYW5BZGRLZXlzID0g
ZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBib29sIG9rID0gYWRkaW5nS2V5QWxsb3dlZChiYWNraW5nU3RvcmUsIHRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAobV9pbmRleEtl
eXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5LCBjYW5BZGRLZXlzKTsKKyAgICAgICAgaWYgKCFvaykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjYW5BZGRLZXlzKSB7Cisg
ICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICAgICAgICAgICplcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQg
bGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50
cy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGNhbkFkZEtleXMgPSB0cnVlOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6Oklu
ZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNraW5nU3RvcmU6OlJlY29yZElk
ZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3Jl
LCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0Cit7CisgICAgaW50NjRfdCBpbmRl
eElkID0gbV9pbmRleE1ldGFkYXRhLmlkOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
bmRleEtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS5w
dXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCByZWNvcmRJZGVudGlmaWVyKTsK
KyAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gdmVyaWZpZWQgYXMgYSB2
YWxpZCB3cml0ZSBkdXJpbmcgdmVyaWZ5SW5kZXhLZXlzLgorICAgICAgICBBU1NFUlRfVU5VU0VE
KG9rLCBvayk7CisgICAgfQorfQorCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6
OkluZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0
b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2Vk
KSBjb25zdAoreworICAgIGFsbG93ZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1faW5kZXhNZXRhZGF0
YS51bmlxdWUpIHsKKyAgICAgICAgYWxsb3dlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtleTsKKyAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS5rZXlFeGlzdHNJbklu
ZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqaW5k
ZXhLZXksIGZvdW5kUHJpbWFyeUtleSwgZm91bmQpOworICAgIGlmICghb2spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kIHx8IChwcmltYXJ5S2V5ICYmIGZvdW5kUHJpbWFy
eUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkpCisgICAgICAgIGFsbG93ZWQgPSB0cnVlOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6Om1h
a2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiB0
cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3JpdGVyPiA+
KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCit7
CisgICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgpKTsKKyAgICBj
b21wbGV0ZWQgPSBmYWxzZTsKKworICAgIEhhc2hNYXA8aW50NjRfdCwgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFwOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5kZXhJZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGluZGV4S2V5TWFwLmFkZChp
bmRleElkc1tpXSwgaW5kZXhLZXlzW2ldKTsKKworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUuaW5kZXhlcy5i
ZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CisKKyAgICAg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+dmFsdWU7CisKKyAgICAgICAg
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFw
LmdldChpdC0+a2V5KTsKKyAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1
dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBu
ZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KKyAg
ICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCAmJiAoaW5kZXgua2V5UGF0aCA9PSBvYmplY3RTdG9y
ZS5rZXlQYXRoKSkKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKHByaW1hcnlLZXkpOworCisgICAg
ICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3IEluZGV4V3Jp
dGVyKGluZGV4LCBrZXlzKSkpOworICAgICAgICBib29sIGNhbkFkZEtleXMgPSBmYWxzZTsKKyAg
ICAgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gaW5kZXhXcml0ZXItPnZlcmlmeUluZGV4
S2V5cygqYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUuaWQsIGluZGV4LmlkLCBjYW5BZGRLZXlzLCBwcmlt
YXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1
Y2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghY2FuQWRkS2V5
cykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGluZGV4V3JpdGVycy0+YXBw
ZW5kKGluZGV4V3JpdGVyLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgY29tcGxldGVkID0gdHJ1
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREI6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4g
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQor
eworICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQwOTky
TEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4KKyAg
ICBpbnQ2NF90IGN1cnJlbnROdW1iZXI7CisgICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS0+Z2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3VycmVudE51bWJlcik7CisgICAg
aWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyIik7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsK
KyAgICB9CisgICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8IGN1cnJlbnROdW1iZXIgPiBtYXhH
ZW5lcmF0b3JWYWx1ZSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwor
CisgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOworfQorCiti
b29sIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OnVwZGF0ZUtleUdlbmVyYXRvcihQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50
KQoreworICAgIEFTU0VSVChrZXkgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBl
KTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVy
KCkpKSArIDEsIGNoZWNrQ3VycmVudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDA5YjZlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxE
Qi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQk9iamVjdFN0b3JlQmFja2Vu
ZExldmVsREJfaAorI2RlZmluZSBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCX2gKKworI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIklEQk1l
dGFkYXRhLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVM
REIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQjsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI7CitzdHJ1Y3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YTsKKworLy8gRklYTUU6IHRoaXMgbmFtZXNwYWNlIGlzIHRlbXBvcmFy
eSB1bnRpbCB3ZSBtb3ZlIGl0cyBjb250ZW50cyBvdXQgdG8gdGhlaXIgb3duIGhvbWUuCituYW1l
c3BhY2UgSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQiB7CisKKyAgICBjbGFzcyBJbmRleFdy
aXRlciB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICAgICAgOiBtX2luZGV4TWV0
YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgSW5kZXhXcml0ZXIo
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwgY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMmIGluZGV4S2V5cykKKyAgICAgICAgICAgIDogbV9p
bmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgICAgICAgICAsIG1faW5kZXhLZXlzKGlu
ZGV4S2V5cykKKyAgICAgICAgeyB9CisKKyAgICAgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURC
QmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNh
bkFkZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAsIFN0cmluZyogZXJyb3JNZXNz
YWdlID0gMCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgICAgIHZvaWQgd3JpdGVJ
bmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiwgSURCQmFj
a2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3RvcmUmLCBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5
KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CisK
KyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7CisgICAgICAg
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOworICAg
IH07CisKKyAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
LCBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+Jiwg
VmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9y
TWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICBQYXNz
UmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+LCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3Io
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREI+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZF
TERCKQorCisjZW5kaWYgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45ZjlkMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCLmNwcApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgiCisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmVMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKKyNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxs
YmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklE
QlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQj4gSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlKGludDY0X3Qg
aWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUg
bW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCit7CisgICAgSGFzaFNldDxp
bnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKKyAgICAgICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFk
ZChvYmplY3RTdG9yZUlkc1tpXSk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREIoaWQsIGNhbGxiYWNrcywgb2JqZWN0U3RvcmVIYXNoU2V0LCBt
b2RlLCBkYXRhYmFzZSkpOworfQorCitJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqIGRhdGFiYXNlKQorICAgIDogbV9pZChpZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVJZHMo
b2JqZWN0U3RvcmVJZHMpCisgICAgLCBtX21vZGUobW9kZSkKKyAgICAsIG1fc3RhdGUoVW51c2Vk
KQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAsIG1fdHJhbnNhY3Rpb24oZGF0
YWJhc2UtPmJhY2tpbmdTdG9yZSgpLmdldCgpKQorICAgICwgbV90YXNrVGltZXIodGhpcywgJklE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnRhc2tUaW1lckZpcmVkKQorICAgICwgbV9wZW5k
aW5nUHJlZW1wdGl2ZUV2ZW50cygwKQoreworICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ugb2Yg
dGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgorICAgIHJlbGF4QWRvcHRpb25S
ZXF1aXJlbWVudCgpOworCisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigp
LT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKK30KKworSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6fklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIoKQoreworICAgIC8vIEl0IHNo
b3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50aWwg
aXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBG
aW5pc2hlZCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c2NoZWR1
bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdHlwZSwgUGFzc093
blB0cjxPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8T3BlcmF0aW9uPiBhYm9ydFRhc2spCit7
CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICh0eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaykKKyAgICAg
ICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOworICAgIGVsc2UKKyAgICAgICAgbV9wcmVlbXB0
aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKworICAgIGlmIChhYm9ydFRhc2spCisgICAgICAg
IG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2spOworCisgICAgaWYgKG1fc3RhdGUg
PT0gVW51c2VkKQorICAgICAgICBzdGFydCgpOworICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gUnVu
bmluZyAmJiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90YXNrVGltZXIuc3Rh
cnRPbmVTaG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmFi
b3J0KCkKK3sKKyAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yICh1bmtub3duIGNhdXNlKSIp
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjphYm9ydChQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQoreworICAgIElEQl9UUkFDRSgiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6YWJvcnQiKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB3YXNSdW5uaW5nID0gbV9zdGF0ZSA9PSBS
dW5uaW5nOworCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBi
ZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGFib3J0IHN0ZXBzIGJlbG93
LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCisg
ICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgorICAgIFJlZjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIG1fc3RhdGUgPSBG
aW5pc2hlZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisKKyAgICBpZiAod2FzUnVubmluZykK
KyAgICAgICAgbV90cmFuc2FjdGlvbi5yb2xsYmFjaygpOworCisgICAgLy8gUnVuIHRoZSBhYm9y
dCB0YXNrcywgaWYgYW55LgorICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgT3duUHRyPE9wZXJhdGlvbj4gdGFzayhtX2Fib3J0VGFza1F1ZXVlLnRha2VG
aXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSgwKTsKKyAgICB9CisKKyAgICAvLyBCYWNr
aW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBi
ZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBj
YWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3Rv
cmUKKyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4K
KyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2FjdGlvbi5yZXNldCgpOworCisg
ICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9y
ZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBj
b21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgor
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNh
Y3Rpb24odGhpcyk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlz
aGVkKHRoaXMpOworCisgICAgaWYgKG1fY2FsbGJhY2tzKQorICAgICAgICBtX2NhbGxiYWNrcy0+
b25BYm9ydChtX2lkLCBlcnJvcik7CisKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlz
aGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKworICAgIG1fZGF0YWJhc2UgPSAwOworfQorCitib29s
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmlzVGFza1F1ZXVlRW1wdHkoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByZWVtcHRpdmVUYXNrUXVldWUuaXNFbXB0eSgpICYmIG1fdGFza1F1
ZXVlLmlzRW1wdHkoKTsKK30KKworYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpo
YXNQZW5kaW5nVGFza3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzIHx8ICFpc1Rhc2tRdWV1ZUVtcHR5KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBj
dXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JC
YWNrZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNvcik7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6cnVuKCkKK3sKKyAgICAv
LyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRoaXMgdHJhbnNhY3Rpb24uIFNj
aGVkdWxlIGEgdGltZXIKKyAgICAvLyB0byBwcm9jZXNzIHRoZSBmaXJzdCB0YXNrLgorICAgIEFT
U0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOworICAg
IEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7CisKKyAgICBtX3Rhc2tUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6c3Rh
cnQoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNlZCk7CisKKyAgICBtX3N0YXRlID0g
U3RhcnRQZW5kaW5nOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+
ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvblN0
YXJ0ZWQodGhpcyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6Y29t
bWl0KCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmNv
bW1pdCIpOworCisgICAgLy8gSW4gbXVsdGlwcm9jZXNzIHBvcnRzLCBmcm9udC1lbmQgbWF5IGhh
dmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBhbiBhYm9ydCBoYXMgYWxyZWFkeQorICAgIC8vIGJl
ZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBiYWNrLWVuZC4KKyAgICBpZiAobV9z
dGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RhdGUg
PT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAgbV9jb21taXRQZW5kaW5nID0g
dHJ1ZTsKKworICAgIC8vIEZyb250LWVuZCBoYXMgcmVxdWVzdGVkIGEgY29tbWl0LCBidXQgdGhl
cmUgbWF5IGJlIHRhc2tzIGxpa2UgY3JlYXRlSW5kZXggd2hpY2gKKyAgICAvLyBhcmUgY29uc2lk
ZXJlZCBzeW5jaHJvbm91cyBieSB0aGUgZnJvbnQtZW5kIGJ1dCBhcmUgcHJvY2Vzc2VkIGFzeW5j
aHJvbm91c2x5LgorICAgIGlmIChoYXNQZW5kaW5nVGFza3MoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNl
ZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBzdGVwcyBiZWxvdy4gV2UgdGhl
cmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91cnNlbHZlcworICAgIC8vIGFs
aXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBSZWY8SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBib29sIHVudXNlZCA9IG1fc3Rh
dGUgPT0gVW51c2VkOworICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKKworICAgIGJvb2wgY29tbWl0
dGVkID0gdW51c2VkIHx8IG1fdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICAvLyBCYWNraW5n
IHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBiZWZv
cmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBjYWxs
YmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3RvcmUK
KyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KKyAg
ICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2FjdGlvbi5yZXNldCgpOworCisgICAg
Ly8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0
aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21w
bGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgorICAg
IGlmICghdW51c2VkKQorICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uRmluaXNoZWQodGhpcyk7CisKKyAgICBpZiAoY29tbWl0dGVkKSB7CisgICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkNvbXBsZXRlKG1faWQpOworICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X2NhbGxiYWNrcy0+b25BYm9ydChtX2lkLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNvbW1pdHRpbmcg
dHJhbnNhY3Rpb24uIikpOworICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVk
QW5kQWJvcnRGaXJlZCh0aGlzKTsKKyAgICB9CisKKyAgICBtX2RhdGFiYXNlID0gMDsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiopCit7CisgICAgSURCX1RSQUNFKCJJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0YXNrVGltZXJGaXJlZCIpOworICAgIEFTU0VSVCghaXNU
YXNrUXVldWVFbXB0eSgpKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVuZGluZykgewor
ICAgICAgICBtX3RyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgICAgIG1fc3RhdGUgPSBSdW5uaW5n
OworICAgIH0KKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkg
YmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyB0YXNrcy4gVGFrZSB0YWtl
IGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9iamVjdCBhbGl2ZSBzbyB0aGF0CisgICAg
Ly8gdGhlIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9ucyBjYW4gYmUgY2hlY2tlZC4KKyAgICBS
ZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBU
YXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVl
bXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOworICAgIHdoaWxlICghdGFza1F1ZXVlLT5p
c0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgeworICAgICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBSdW5uaW5nKTsKKyAgICAgICAgT3duUHRyPE9wZXJhdGlvbj4gdGFzayh0YXNrUXVldWUt
PnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSh0aGlzKTsKKworICAgICAgICAv
LyBFdmVudCBpdHNlbGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1ZSBzaG91bGQgYmUgcHJvY2Vzc2Vk
IG5leHQuCisgICAgICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPyAm
bV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOworICAgIH0KKworICAgIC8vIElm
IHRoZXJlIGFyZSBubyBwZW5kaW5nIHRhc2tzLCB3ZSBoYXZlbid0IGFscmVhZHkgY29tbWl0dGVk
L2Fib3J0ZWQsCisgICAgLy8gYW5kIHRoZSBmcm9udC1lbmQgcmVxdWVzdGVkIGEgY29tbWl0LCBp
dCBpcyBub3cgc2FmZSB0byBkbyBzby4KKyAgICBpZiAoIWhhc1BlbmRpbmdUYXNrcygpICYmIG1f
c3RhdGUgIT0gRmluaXNoZWQgJiYgbV9jb21taXRQZW5kaW5nKQorICAgICAgICBjb21taXQoKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpjbG9zZU9wZW5DdXJzb3Jz
KCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPjo6aXRlcmF0b3Ig
aSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAhPSBtX29wZW5DdXJzb3JzLmVuZCgpOyArK2kp
CisgICAgICAgICgqaSktPmNsb3NlKCk7CisgICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigpOworfQor
Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERC
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M4NjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw7
CitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKKworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKyAgICB2aXJ0dWFsIH5JREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsK
KyAgICB2b2lkIGNvbW1pdCgpOworCisgICAgY2xhc3MgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbigpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKikgPSAwOworICAgIH07CisKKyAg
ICB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOworICAgIHZvaWQgcnVu
KCk7CisgICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kZTsgfQorICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQorICAgIHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NPd25Q
dHI8T3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVs
bHB0cikgeyBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxU
YXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9CisgICAgdm9pZCBzY2hlZHVsZVRhc2soSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+LCBQYXNz
T3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7CisgICAgdm9pZCByZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJP
cGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7CisgICAgdm9pZCBhZGRQcmVlbXB0aXZl
RXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQorICAgIHZvaWQgZGlkQ29t
cGxldGVQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNT
RVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KKyAgICBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuICZtX3Ry
YW5zYWN0aW9uOyB9CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKwor
ICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhYmFzZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIoaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworCisgICAgZW51bSBTdGF0ZSB7CisgICAg
ICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KKyAgICAgICAgU3RhcnRQ
ZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24g
bm90IHlldCBzdGFydGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5z
YWN0aW9uIHN0YXJ0ZWQgYnV0IG5vdCB5ZXQgZmluaXNoZWQuCisgICAgICAgIEZpbmlzaGVkLCAv
LyBFaXRoZXIgYWJvcnRlZCBvciBjb21taXR0ZWQuCisgICAgfTsKKworICAgIHZvaWQgc3RhcnQo
KTsKKworICAgIGJvb2wgaXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0OworICAgIGJvb2wgaGFzUGVu
ZGluZ1Rhc2tzKCkgY29uc3Q7CisKKyAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI+Kik7CisgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7
CisKKyAgICBjb25zdCBpbnQ2NF90IG1faWQ7CisgICAgY29uc3QgSGFzaFNldDxpbnQ2NF90PiBt
X29iamVjdFN0b3JlSWRzOworICAgIGNvbnN0IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1f
bW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7Cisg
ICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKworICAgIHR5cGVkZWYgRGVxdWU8
T3duUHRyPE9wZXJhdGlvbj4gPiBUYXNrUXVldWU7CisgICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVl
OworICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7CisgICAgVGFza1F1ZXVlIG1f
YWJvcnRUYXNrUXVldWU7CisKKyAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIG1fdHJh
bnNhY3Rpb247CisKKyAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUg
dGhyZWFkcyBpbnN0ZWFkLgorICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+
IG1fdGFza1RpbWVyOworICAgIGludCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzOworCisgICAg
SGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+IG1fb3BlbkN1cnNvcnM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkg
JiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5YTE2MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JM
ZXZlbERCLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIp
CisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI+IElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3JMZXZlbERCOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIoKSk7Cit9CisKK0lEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3JMZXZlbERCOjpJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQigpCit7
Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjp+SURCVHJhbnNhY3Rpb25D
b29yZGluYXRvckxldmVsREIoKQoreworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3JMZXZlbERCOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uKSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFu
c2FjdGlvbik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OmRp
ZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rp
b24pCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7
CisKKyAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAgIHByb2Nl
c3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvckxldmVsREI6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlu
cyh0cmFuc2FjdGlvbikpOworCisgICAgaWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uKSkgeworICAgICAgICBBU1NFUlQoIW1fc3RhcnRlZFRyYW5zYWN0aW9ucy5j
b250YWlucyh0cmFuc2FjdGlvbikpOworICAgICAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5yZW1v
dmUodHJhbnNhY3Rpb24pOworICAgIH0gZWxzZSBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAgICAgICAgbV9zdGFydGVkVHJhbnNhY3Rpb25zLnJlbW92
ZSh0cmFuc2FjdGlvbik7CisKKyAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24p
OworCisgICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKK30KKworI2lmbmRlZiBOREVC
VUcKKy8vIFZlcmlmaWVzIGludGVybmFsIGNvbnNpc3RpZW5jeSB3aGlsZSByZXR1cm5pbmcgd2hl
dGhlciBhbnl0aGluZyBpcyBmb3VuZC4KK2Jvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxl
dmVsREI6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9u
KQoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24pKQorICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgaWYg
KG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKKyAgICAgICAg
QVNTRVJUKCFmb3VuZCk7CisgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJU
KGZvdW5kID09IG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgcmV0
dXJuIGZvdW5kOworfQorI2VuZGlmCisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxl
dmVsREI6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKK3sKKyAgICBpZiAobV9xdWV1ZWRU
cmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9z
dGFydGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSB8fCAoKm1fc3RhcnRlZFRyYW5zYWN0aW9ucy5i
ZWdpbigpKS0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsK
KworICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdpbigpOworICAgIHdoaWxlIChp
dCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICBJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9ICppdDsKKyAgICAgICAgKytpdDsKKyAgICAg
ICAgaWYgKGNhblJ1blRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSkgeworICAgICAgICAgICAgbV9x
dWV1ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICAgICAgICAgIG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAgICAgICAgICAgdHJhbnNhY3Rp
b24tPnJ1bigpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBkb1Njb3Blc092
ZXJsYXAoY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUxLCBjb25zdCBIYXNoU2V0PGludDY0
X3Q+JiBzY29wZTIpCit7CisgICAgZm9yIChIYXNoU2V0PGludDY0X3Q+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHNjb3BlMS5iZWdpbigpOyBpdCAhPSBzY29wZTEuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgaWYgKHNjb3BlMi5jb250YWlucygqaXQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yTGV2ZWxEQjo6Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uKSk7CisgICAgc3dpdGNoICh0cmFuc2FjdGlvbi0+bW9kZSgpKSB7Cisg
ICAgY2FzZSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZToKKyAgICAgICAgQVNT
RVJUKG1fcXVldWVkVHJhbnNhY3Rpb25zLnNpemUoKSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKG1f
c3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRXcml0ZToKKyAgICAg
ICAgZm9yIChIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9zdGFydGVk
VHJhbnNhY3Rpb25zLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoKCppdCktPm1vZGUo
KSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYmIGRvU2NvcGVzT3ZlcmxhcCh0
cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKExpc3RIYXNoU2V0PElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5z
YWN0aW9ucy5iZWdpbigpOyAqaXQgIT0gdHJhbnNhY3Rpb247ICsraXQpIHsKKyAgICAgICAgICAg
IEFTU0VSVChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSk7CisgICAgICAgICAgICBp
ZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYmIGRv
U2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZF
TERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MWE2YjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREJfaAorI2RlZmluZSBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yTGV2ZWxEQl9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI7CisKKy8vIFRyYW5zYWN0aW9ucyBhcmUgZXhl
Y3V0ZWQgaW4gdGhlIG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQuCitjbGFzcyBJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yTGV2ZWxEQiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI+IGNyZWF0ZSgpOworICAgIHZpcnR1YWwgfklE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCKCk7CisKKyAgICAvLyBDYWxsZWQgYnkgdHJh
bnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlzaC4KKyAgICB2b2lkIGRpZENyZWF0ZVRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKKyAgICB2b2lkIGRpZFN0
YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworICAgIHZvaWQg
ZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworCisj
aWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ckxldmVsREIoKTsKKworICAgIHZvaWQgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKKyAg
ICBib29sIGNhblJ1blRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsK
KworICAgIC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQgd2F5IHRvIGtlZXAgcmVmZXJlbmNl
cyB0byBhbGwgdHJhbnNhY3Rpb25zLgorICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQiosIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiA+IG1fdHJhbnNh
Y3Rpb25zOworICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZmZXJlbnQgc3RhdGVzIGFyZSBncm91
cGVkIGJlbG93LgorICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
PiBtX3F1ZXVlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2VuZGlmIC8v
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDZkOWU0
YjAuLjUwNGU3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzA2MywyMyArMzA2MywyMyBAQCBlbmFibGU/
KElOREVYRURfREFUQUJBU0UpIHsKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55Lmgg
XAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCiAgICAgICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmggXAotICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VFcnJvci5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNl
cHRpb24uaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5o
IFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oIFwKLSAgICAgICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAorICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIFwKICAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBcCiAgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkhpc3RvZ3JhbXMuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaCBc
CiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmggXAogICAgICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmggXAogICAgICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSW5kZXhlZERCLmgK
QEAgLTMwOTIsMTkgKzMwOTIsMTkgQEAgZW5hYmxlPyhJTkRFWEVEX0RBVEFCQVNFKSB7CiAgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgXAogICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcCBcCi0gICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
Q3Vyc29yQmFja2VuZExldmVsREIuY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VFeGNlcHRpb24uY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRXZlbnRE
aXNwYXRjaGVyLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3Bw
IFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
Y3BwIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcCBcCiAg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAgXAogICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAgXAotICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRh
YmFzZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGQ0ZTliODQuLmNmZTIyZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NDcsNyArMTY0NywxMyBA
QAogCQk1MTFFRjJDRjE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJBbnlDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRUYyQ0MxN0YwRkRG
MTAwRTRGQTE2IC8qIEpTSURCQW55Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNTExRUYyRDAxN0YwRkRG
MTAwRTRGQTE2IC8qIEpTSURCRGF0YWJhc2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRUYyQ0QxN0YwRkRGMTAwRTRGQTE2IC8qIEpT
SURCRGF0YWJhc2VDdXN0b20uY3BwICovOyB9OwogCQk1MTFFRjJEMTE3RjBGREYxMDBFNEZBMTYg
LyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjJDRTE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJPYmpl
Y3RTdG9yZUN1c3RvbS5jcHAgKi87IH07Ci0JCTUxMUVGMzI5MTdGMEZGMDMwMEU0RkExNiAvKiBJ
REJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTExRUYzMjgxN0YwRkYwMzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZS5jcHAg
Ki87IH07CisJCTUxMUVGMzM5MTdGMjNCNzMwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmVMZXZl
bERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MUVGMzJCMTdGMjNCNjkwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCAqLzsg
fTsKKwkJNTExRUYzM0ExN0YyM0I3MzAwRTRGQTE2IC8qIElEQkN1cnNvckJhY2tlbmRMZXZlbERC
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVG
MzJEMTdGMjNCNjkwMEU0RkExNiAvKiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgKi87IH07
CisJCTUxMUVGMzNCMTdGMjNCNzMwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVG
MzJGMTdGMjNCNjkwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCAqLzsg
fTsKKwkJNTExRUYzM0MxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFF
RjMzMTE3RjIzQjY5MDBFNEZBMTYgLyogSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCAqLzsg
fTsKKwkJNTExRUYzM0QxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkxldmVsREJDb2RpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRUYzMzMxN0Yy
M0I2OTAwRTRGQTE2IC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovOyB9OworCQk1MTFFRjMzRTE3
RjIzQjczMDBFNEZBMTYgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjMzNTE3RjIzQjY5
MDBFNEZBMTYgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgKi87IH07CisJCTUx
MUVGMzNGMTdGMjNCNzMwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVGMzM3
MTdGMjNCNjkwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCAqLzsg
fTsKIAkJNTExRjIzMTkwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTUwREMxNjBE
QTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwICovOyB9OwogCQk1MTFGMjMxQTBEQzE2MERB
MDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTYwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJl
YWQuaCAqLzsgfTsKIAkJNTEyNkU2QkIwQTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI2RTZC
OTBBMkUzQjEyMDA1QzI5RkEgLyogSWNvbkRhdGFiYXNlLmNwcCAqLzsgfTsKQEAgLTE3MzEsNiAr
MTczNyw3IEBACiAJCTUxQzgxQjg5MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFD
ODFCODcwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5jcHAgKi87IH07CiAJ
CTUxQzgxQjhBMEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzgxQjg4MEM0NDIyRjcw
MDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLzsgfTsKIAkJNTFDQkZDOTkwRDEwRTQ4
MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUNCRkM5ODBEMTBFNDgzMDAyREJGNTEgLyog
Q2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1MUNFRkIyQjE3RjI0OTI5MDBBQ0FBMTggLyogSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFDRUZCMjkxN0YyNDkyMTAwQUNBQTE4IC8qIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcCAqLzsgfTsKIAkJNTFEMEM1MTYwREFBOTBCNzAwM0Iz
ODMxIC8qIEpTU3RvcmFnZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUQwQzUxNTBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3Vz
dG9tLmNwcCAqLzsgfTsKIAkJNTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0
U2V0Um93TGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MURDRTgwMTBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dM
aXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNTFERjZEN0UwQjkyQTE2RDAwQzJEQzg1IC8qIFRocmVh
ZENoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MURGNkQ3RDBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzEyNCwxNiArMzEzMSwxMSBAQAog
CQk5NzEyQTVBRDE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU0
MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwICovOyB9Owog
CQk5NzEyQTVBRTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1NTE1
MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggKi87IH07CiAJCTk3
MTJBNUIxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJB
bnkuaCAqLzsgfTsKLQkJOTcxMkE1QjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovOyB9OwogCQk5NzEyQTVC
NDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1QjE1MDA0RURBMDA0OEFGMTAgLyogSURC
Q2FsbGJhY2tzLmggKi87IH07CiAJCTk3MTJBNUI2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJz
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLzsgfTsKLQkJOTcxMkE1QjgxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVGMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTk3MTJBNUI5MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNv
ckJhY2tlbmRJbXBsLmggKi87IH07CiAJCTk3MTJBNUJBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzEyQTU2MTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZS5oICovOyB9OwogCQk5NzEyQTVCQzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vy
c29yV2l0aFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU2MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggKi87
IH07CiAJCTk3MTJBNUJGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjYxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkRhdGFiYXNlLmggKi87IH07Ci0JCTk3MTJBNUMxMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTY4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1QzIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmggKi87IH07CiAJCTk3MTJBNUMzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTZBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1QzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRh
dGFiYXNlQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzEyQTU2QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3Mu
aCAqLzsgfTsKIAkJOTcxMkE1QzUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU2QzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNw
cCAqLzsgfTsKQEAgLTMxNDMsOCArMzE0NSw2IEBACiAJCTk3MTJBNUNBMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
RXhjZXB0aW9uLmggKi87IH07CiAJCTk3MTJBNUNEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVu
dERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTc0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIuaCAqLzsg
fTsKIAkJOTcxMkE1Q0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc2MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJGYWN0b3J5LmggKi87IH07Ci0JCTk3MTJBNUQxMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJG
YWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTc5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZElt
cGwuaCAqLzsgfTsKIAkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTdBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5jcHAgKi87IH07CiAJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcxMkE1N0IxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmggKi87IH07CiAJCTk3MTJBNUQ2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0Qx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi87IH07CkBAIC0zMTUyLDE3ICszMTUyLDEx
IEBACiAJCTk3MTJBNURGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4NjE1MDA0RURBMDA0
OEFGMTAgLyogSURCS2V5UGF0aC5oICovOyB9OwogCQk5NzEyQTVFMzE1MDA0RURBMDA0OEFGMTAg
LyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNThBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oICovOyB9Owog
CQk5NzEyQTVFQTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTkxMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICovOyB9OwotCQk5NzEyQTVFQzE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5MzE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTk3MTJBNUVEMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5NDE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovOyB9OwogCQk5NzEyQTVFRjE1MDA0RURBMDA0OEFG
MTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5NjE1MDA0RURBMDA0OEFGMTAgLyog
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgKi87IH07CiAJCTk3MTJBNUYwMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5NzE1MDA0RURBMDA0OEFG
MTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oICovOyB9OwogCQk5NzEyQTVGMjE1
MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVl
c3QuaCAqLzsgfTsKIAkJOTcxMkE1RjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTlCMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi87IH07CiAJCTk3MTJBNUY2MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uLmggKi87IH07Ci0JCTk3MTJBNUY4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTlGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNUEwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmggKi87IH07Ci0JCTk3MTJBNUZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcCAqLzsgfTsKLQkJOTcxMkE1RkQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNUE0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmggKi87IH07CiAJCTk3MTJBNUZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1QTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAg
Ki87IH07CiAJCTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NUE2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLzsgfTsKIAkJ
OTcxMkE2MDQxNTAwNEVEQTAwNDhBRjEwIC8qIFBhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBQjE1
MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNlLmNwcCAqLzsgfTsKQEAg
LTgyNDUsNyArODIzOSwyMCBAQAogCQk1MTFFRjJDQzE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJB
bnlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJB
bnlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFFRjJDRDE3RjBG
REYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUYyQ0UxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0
U3RvcmVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
REJPYmplY3RTdG9yZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
MUVGMzI4MTdGMEZGMDMwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQmFja2luZ1N0b3JlLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxMUVGMzJCMTdGMjNCNjkwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmVMZXZl
bERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkMxN0YyM0I2OTAwRTRGQTE2
IC8qIElEQkJhY2tpbmdTdG9yZUxldmVsREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQmFja2luZ1N0
b3JlTGV2ZWxEQi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5n
U3RvcmVMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzJEMTdG
MjNCNjkwMEU0RkExNiAvKiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkUxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkN1cnNvckJhY2tl
bmRMZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzJGMTdGMjNCNjkwMEU0RkExNiAv
KiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkRh
dGFiYXNlQmFja2VuZExldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTExRUYzMzAxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFja2VuZExldmVs
REIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzMxMTdGMjNCNjkwMEU0RkExNiAvKiBJ
REJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
RmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTExRUYzMzIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZExldmVsREIuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzMzMTdGMjNCNjkwMEU0RkExNiAvKiBJREJMZXZlbERC
Q29kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkxldmVsREJDb2RpbmcuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzQxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkxl
dmVsREJDb2RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkNvZGluZy5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzM1MTdGMjNCNjkwMEU0RkExNiAvKiBJREJPYmplY3RT
dG9yZUJhY2tlbmRMZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3Jl
QmFja2VuZExldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTExRUYzMzYxN0YyM0I2OTAwRTRGQTE2IC8qIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzM3MTdGMjNCNjkwMEU0RkEx
NiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzgxN0YyM0I2OTAwRTRGQTE2IC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUYyMzE1
MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTFGMjMxNjBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjZFNkI5MEEyRTNCMTIwMDVDMjlGQSAvKiBJY29uRGF0
YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEljb25EYXRh
YmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MzMzLDYgKzgzNDAsOCBA
QAogCQk1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGVFBEaXJlY3RvcnlQYXJzZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUM4MUI4ODBDNDQyMkY3MDAxOUVD
RTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGVFBEaXJlY3RvcnlQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFDQkZDOTgwRDEwRTQ4MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQ0VGQjI5MTdGMjQ5MjEwMEFDQUExOCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFDRUZCMkExN0YyNDkyMTAwQUNBQTE4IC8qIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0b3JhZ2VDdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdG9yYWdlQ3VzdG9t
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFEQ0U4MDEwQ0FDOUYxQzAwNDg4
MzU4IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MURGNkQ3RDBCOTJBMTZEMDBDMkRDODUgLyogVGhy
ZWFkQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkQ2hlY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NDUsMTkgKzk3NTQsMTQgQEAKIAkJ
OTcxMkE1NTYxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlkbDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJB
bnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQW55Lmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTcxMkE1NTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gSURCQW55LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQmFj
a2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NUIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkNhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJDYWxs
YmFja3MuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU1RDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vy
c29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvci5oOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3MTJBNTVFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IElEQkN1cnNvci5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU1RjE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk5NzEyQTU2MDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTYxMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTcxMkE1NjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJDdXJzb3JXaXRoVmFsdWUuaDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NzEyQTU2NDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0
aFZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJDdXJzb3JXaXRoVmFsdWUuaWRs
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRh
dGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlLmg7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NzEyQTU2NzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkRhdGFiYXNlLmlkbDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OTcxMkE1NjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NzEyQTU2QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTZCMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJREJEYXRhYmFzZUNhbGxiYWNrcy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VDYWxsYmFja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcx
MkE1NkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRhYmFzZUNhbGxiYWNrc0lt
cGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NjgsOCArOTc3Miw2IEBACiAJ
CTk3MTJBNTc0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRXZlbnREaXNwYXRjaGVyLmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTcxMkE1NzYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRmFjdG9yeS5oOyBwYXRoID0gTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NzEyQTU3NzE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gSURCRmFjdG9yeS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1NzgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOyBwYXRoID0gTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJOTcxMkE1NzkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5k
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5QmFja2Vu
ZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU3QTE1MDA0RURBMDA0OEFGMTAg
LyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU3QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3
MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBJREJJbmRleC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3ODAsOCArOTc4Miw2IEBACiAJ
CTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gSURCS2V5UmFuZ2UuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5MTE1MDA0
RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSURCT2JqZWN0U3RvcmUuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTkyMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
SURCT2JqZWN0U3RvcmUuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU5MzE1MDA0RURBMDA0
OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU5NDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3
MTJBNTk2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTk3
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Iu
aDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OTkxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCUmVx
dWVzdC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTc4OSwxMCArOTc4OSw2IEBACiAJCTk3MTJBNTlCMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IElEQlRyYWNpbmcuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYWNpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OUQxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRy
YW5zYWN0aW9uLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5RTE1MDA0RURBMDA0OEFGMTAgLyog
SURCVHJhbnNhY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQlRyYW5zYWN0aW9u
LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTcxMkE1QTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTVBMzE1MDA0RURB
MDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTVBNDE1MDA0RURBMDA0OEFGMTAgLyogSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MTJBNUE1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNUE2MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1
QTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNDg0MSw2ICsxNDgzNywyOSBAQAogCQkJbmFtZSA9IGFuaW1hdGlvbjsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUxMUVGMzJBMTdGMjM2RTkwMEU0RkEx
NiAvKiBsZXZlbGRiICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQk1MTFFRjMyQjE3RjIzQjY5MDBFNEZBMTYgLyogSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5j
cHAgKi8sCisJCQkJNTExRUYzMkMxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZUxl
dmVsREIuaCAqLywKKwkJCQk1MTFFRjMyRDE3RjIzQjY5MDBFNEZBMTYgLyogSURCQ3Vyc29yQmFj
a2VuZExldmVsREIuY3BwICovLAorCQkJCTUxMUVGMzJFMTdGMjNCNjkwMEU0RkExNiAvKiBJREJD
dXJzb3JCYWNrZW5kTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzJGMTdGMjNCNjkwMEU0RkExNiAv
KiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCAqLywKKwkJCQk1MTFFRjMzMDE3RjIzQjY5
MDBFNEZBMTYgLyogSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzMx
MTdGMjNCNjkwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwICovLAorCQkJ
CTUxMUVGMzMyMTdGMjNCNjkwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExldmVsREIuaCAq
LywKKwkJCQk1MTFFRjMzMzE3RjIzQjY5MDBFNEZBMTYgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAg
Ki8sCisJCQkJNTExRUYzMzQxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkxldmVsREJDb2RpbmcuaCAq
LywKKwkJCQk1MTFFRjMzNTE3RjIzQjY5MDBFNEZBMTYgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5k
TGV2ZWxEQi5jcHAgKi8sCisJCQkJNTExRUYzMzYxN0YyM0I2OTAwRTRGQTE2IC8qIElEQk9iamVj
dFN0b3JlQmFja2VuZExldmVsREIuaCAqLywKKwkJCQk1MTFFRjMzNzE3RjIzQjY5MDBFNEZBMTYg
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAgKi8sCisJCQkJNTExRUYzMzgxN0Yy
M0I2OTAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCAqLywKKwkJCQk1
MUNFRkIyOTE3RjI0OTIxMDBBQ0FBMTggLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVs
REIuY3BwICovLAorCQkJCTUxQ0VGQjJBMTdGMjQ5MjEwMEFDQUExOCAvKiBJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yTGV2ZWxEQi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBsZXZlbGRiOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNTEyNkU2QjYwQTJFM0FFRjAwNUMyOUZB
IC8qIGljb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MTY3MzUsMjAgKzE2NzU0LDE3IEBACiAJCTk3MTJBNTUzMTUwMDRFM0MwMDQ4QUYxMCAvKiBpbmRl
eGVkZGIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUx
MUVGMzJBMTdGMjM2RTkwMEU0RkExNiAvKiBsZXZlbGRiICovLAogCQkJCTk3MTJBNTU0MTUwMDRF
REEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwICovLAogCQkJCTk3MTJB
NTU1MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCAqLywKIAkJ
CQk5NzEyQTU1NjE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmlk
bCAqLywKIAkJCQk1MTFFRjI4ODE3RjBGQTZFMDBFNEZBMTYgLyogSURCQW55LmNwcCAqLywKIAkJ
CQk5NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggKi8sCiAJCQkJOTcxMkE1NTkx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5pZGwgKi8sCi0JCQkJNTExRUYzMjgxN0YwRkYwMzAw
RTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgKi8sCi0JCQkJOTcxMkE1NUExNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovLAogCQkJCTk3MTJBNTVCMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDYWxsYmFja3MuaCAqLywKIAkJCQk1MTFFRjI4OTE3RjBGQTZFMDBFNEZBMTYg
LyogSURCQ3Vyc29yLmNwcCAqLywKIAkJCQk5NzEyQTU1RDE1MDA0RURBMDA0OEFGMTAgLyogSURC
Q3Vyc29yLmggKi8sCiAJCQkJOTcxMkE1NUUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5p
ZGwgKi8sCi0JCQkJOTcxMkE1NUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcCAqLywKLQkJCQk5NzEyQTU2MDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCAqLywKIAkJCQk5NzEyQTU2MTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZS5oICovLAogCQkJCTUxMUVGMjhBMTdGMEZBNkUwMEU0RkExNiAvKiBJ
REJDdXJzb3JXaXRoVmFsdWUuY3BwICovLAogCQkJCTk3MTJBNTYzMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JXaXRoVmFsdWUuaCAqLywKQEAgLTE2NzU2LDggKzE2NzcyLDYgQEAKIAkJCQk1
MTFFRjI4QjE3RjBGQTZFMDBFNEZBMTYgLyogSURCRGF0YWJhc2UuY3BwICovLAogCQkJCTk3MTJB
NTY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oICovLAogCQkJCTk3MTJBNTY3MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5pZGwgKi8sCi0JCQkJOTcxMkE1NjgxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovLAotCQkJCTk3MTJBNTY5
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi8sCiAJCQkJOTcx
MkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oICov
LAogCQkJCTk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5o
ICovLAogCQkJCTk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwuY3BwICovLApAQCAtMTY3NzAsOCArMTY3ODQsNiBAQAogCQkJCTUxMUVGMjhEMTdGMEZB
NkUwMEU0RkExNiAvKiBJREJGYWN0b3J5LmNwcCAqLywKIAkJCQk5NzEyQTU3NjE1MDA0RURBMDA0
OEFGMTAgLyogSURCRmFjdG9yeS5oICovLAogCQkJCTk3MTJBNTc3MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJGYWN0b3J5LmlkbCAqLywKLQkJCQk5NzEyQTU3ODE1MDA0RURBMDA0OEFGMTAgLyogSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk5NzEyQTU3OTE1MDA0RURBMDA0OEFGMTAg
LyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi8sCiAJCQkJOTcxMkE1N0ExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAqLywKIAkJCQk5NzEyQTU3QjE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLywKIAkJCQk1
MTFFRjI4RTE3RjBGQTZGMDBFNEZBMTYgLyogSURCSGlzdG9ncmFtcy5oICovLApAQCAtMTY3ODks
OCArMTY4MDEsNiBAQAogCQkJCTUxMUVGMjkzMTdGMEZBNkYwMEU0RkExNiAvKiBJREJPYmplY3RT
dG9yZS5jcHAgKi8sCiAJCQkJOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0
b3JlLmggKi8sCiAJCQkJOTcxMkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3Jl
LmlkbCAqLywKLQkJCQk5NzEyQTU5MzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJOTcxMkE1OTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCAqLywKIAkJCQk1MTFFRjI5NDE3RjBGQTZGMDBFNEZBMTYg
LyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8sCiAJCQkJNTExRUYyOTUxN0YwRkE2RjAwRTRGQTE2
IC8qIElEQk9wZW5EQlJlcXVlc3QuaCAqLywKIAkJCQk1MTFFRjI5NjE3RjBGQTZGMDBFNEZBMTYg
LyogSURCT3BlbkRCUmVxdWVzdC5pZGwgKi8sCkBAIC0xNjgwMywxMCArMTY4MTMsNiBAQAogCQkJ
CTUxMUVGMjk4MTdGMEZBNkYwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbi5jcHAgKi8sCiAJCQkJ
OTcxMkE1OUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmggKi8sCiAJCQkJOTcx
MkE1OUUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmlkbCAqLywKLQkJCQk5NzEy
QTU5RjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgKi8s
Ci0JCQkJOTcxMkE1QTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuaCAqLywKLQkJCQk5NzEyQTVBMzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAgKi8sCi0JCQkJOTcxMkE1QTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk5NzEyQTVBNTE1MDA0RURBMDA0OEFGMTAg
LyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKIAkJCQk5NzEyQTVBNjE1MDA0RURBMDA0
OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCiAJCQkJOTcxMkE1QTcxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgKi8sCkBAIC0yMjc3OCwxNSAr
MjI3ODQsMTIgQEAKIAkJCQk1MUUxRUNDMTBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29yZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDVCQUMyQjAxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUIxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnku
aCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTJBNUIzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNr
aW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNjYzMTFENEZBQzUwMDRDM0U0QiAv
KiBJREJCaW5kaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVCNDE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVC
NjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEy
QTVCOTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3MTJBNUJBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVCQzE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yV2l0aFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVCRjE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTJBNUMyMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzEyQTVDMzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVDNDE1MDA0RURBMDA0OEFGMTAgLyogSURC
RGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUM2MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAt
MjI3OTUsNyArMjI3OTgsNiBAQAogCQkJCTk3MTJBNUNBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1Q0QxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1
Q0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3
MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVEQzE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTIyODAzLDEzICsyMjgwNSwxMCBAQAog
CQkJCTk3MTJBNURGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzEyQTVFMzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1RUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUYwMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzEyQTVGMjE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTcxMkE1RjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3MTJBNUY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1RjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTJBNUZEMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzEyQTVGRjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTcxRDU3QzBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJl
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTkxM0EyNDIxM0Q0OUVCQTAwRjVCMDVDIC8qIElkZW50
aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTQxMSw2ICsyNTQxMCw3IEBACiAJ
CQkJODJFM0Q4REUxMjJFQTBEMTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzVBMTJERjBEQzA0MTQ4MDBDOUFGQUQgLyogQ1NTUmVmbGVj
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2RDA2MEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUVGMzM5MTdGMjNCNzMwMEU0RkEx
NiAvKiBJREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2
RDA5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzNzFGNTFBMjBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTgwRTczNEYwQTE5OUM3NzAwN0ZCOEM1IC8qIENTU1NlbGVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU0NzAsNyArMjU0NzAsNiBAQAogCQkJCUZEMzE2MDJE
MTJCMDI2NzYwMEMxQTM1OSAvKiBEZWxheU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQz
MTYwMzAxMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5UHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFDRTgzQUM0MEFEQUZGRDgwMDkzNTRGNiAvKiBEZWxldGVCdXR0b24uY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNTExRUYzMjkxN0YwRkYwMzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0U4M0FDMzBBREFGRkQ3MDA5MzU0RjYgLyogRGVs
ZXRlQnV0dG9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURERTA5OUU2
NDkyMDA1NkU1ODEgLyogRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzMwOURFMDA5OUU2NDkyMDA1NkU1ODEgLyogRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1OTE4LDYgKzI1OTE3LDcgQEAKIAkJCQk5M0YxOUFG
RDA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThERjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3N0IzODY0MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTFFRjMzQzE3RjIzQjczMDBFNEZBMTYg
LyogSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3Qjc5
MUE5MTRDNkE2MzMwMEYyMDJEMSAvKiBIVE1MQ29udGVudEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUQ0RjUxREYxMzI3MjU0ODAwMTZGNTQxIC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQlGNUMwNDFEQTBGRkNBN0NFMDA4MzlENEEgLyogSFRNTERhdGFMaXN0
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MDM0LDE2ICsyNjAzNCwxMCBAQAogCQkJ
CTUxRTFFQ0MwMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVz
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUI4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVDMTE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5NzEyQTVDNTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUM5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVEMTE1MDA0RURBMDA0
OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
MTJBNUQzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVFQzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVFRjE1MDA0RURB
MDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk5NzEyQTVGODE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVGQzE1MDA0RURBMDA0OEFGMTAgLyog
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVG
RTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBNzFENTdCMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVudGlmaWVyUmVwLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTU5MTNBMjQxMTNENDlFQkEwMEY1QjA1QyAvKiBJZGVudGlmaWVy
c0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjM4Miw2ICsyNjM3Niw3IEBACiAJCQkJ
NEFEMDE3M0MxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFFMkFCQTYwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFBhcmFncmFw
aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCQTgwQTFDRTkwNTAwQjQyQjI1
IC8qIEpTSFRNTFBhcmFtRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTFFRjMzQTE3
RjIzQjczMDBFNEZBMTYgLyogSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUFFMkFCQUEwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFByZUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTQyMjZFNUExMTYzRDY2NzAwOEI4Mzk3IC8qIEpTSFRNTFBy
b2dyZXNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUVDNzBBMUQyOTdCMDBC
NDJCMjUgLyogSlNIVE1MUXVvdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjcxOTIs
NiArMjcxODcsNyBAQAogCQkJCTI5M0VBRTIxMTM1NkIzMkUwMDY3QUNGOSAvKiBSdW50aW1lQXBw
bGljYXRpb25DaGVja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOEM2RUE2MTkxMUVGN0UwNDAw
RkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDlFOTExQ0EwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUxMUVGMzNEMTdGMjNCNzMwMEU0RkExNiAvKiBJREJMZXZlbERC
Q29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVERkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAv
KiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MkM3RjQxMUY3N0VG
QjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCRDBC
Rjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjczMTgsNiArMjczMTQsNyBAQAogCQkJCUExRTExNTQ4MTMwMTVDNUQwMDU0QUM4QyAv
KiBTcG90TGlnaHRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBM0UxNTA1RjA4
MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJFNkU3
QTBDQzU1NkQ1MDA0QTIwNjIgLyogU1FMaXRlQXV0aG9yaXplci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MTFFRjMzRTE3RjIzQjczMDBFNEZBMTYgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2
ZWxEQi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTIyNDY0OTBDQzk4RERCMDBDMDUyNDAgLyog
U1FMaXRlRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjVBNjg0MjQwRkZBQkVBQTAw
RDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyMjQ2
NEIwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZVN0YXRlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI3NDIyLDYgKzI3NDE5LDcgQEAKIAkJCQkwOEI1RjI1NTEzQjVGRkYyMDAyOTU5RUMgLyog
U1ZHQW5pbWF0ZWRQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzQjkzMzZBMTNCMjYxQjEw
MDQ1ODRCRiAvKiBTVkdBbmltYXRlZFBvaW50TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MzFBMzAyMTEzQjg5RENDMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlv
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUVGMzNGMTdGMjNCNzMwMEU0RkExNiAvKiBJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNkZCQ0VD
MTc4QzExN0YwMEIyMUExNSAvKiBTVkdBbmltYXRlZFByb3BlcnR5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQzMTQyRTdBMTNCMUU5NzcwMEYxQzg3MSAvKiBTVkdBbmltYXRlZFJlY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDNBNjI2NjcxM0IzRDExMDAwQUM5NEI4IC8qIFNWR0FuaW1hdGVk
U3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc1NDQsNiArMjc1NDIsNyBAQAogCQkJCUIy
MjI3QThCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2ludExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjdBOEUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyMjI3QTkwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2x5Z29uRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUNFRkIyQjE3RjI0OTI5MDBBQ0FBMTggLyog
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjdBOTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlsaW5lRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNTQzQjg1NzE3RUI3NThGMDAzQkU5M0EgLyogU1ZHUHJvcGVydHlJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTk2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc2MDUsNiArMjc2MDQs
NyBAQAogCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0Q29kZWNVVEY4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MkI5N0M5MTMxMzg5NDMwMDhCRUY0QiAvKiBUZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzg0QjMxMjM3MTE4MDAw
MEM2MTYxIC8qIFRleHREb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTFFRjMzQjE3
RjIzQjczMDBFNEZBMTYgLyogSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5N0JDODQ4MzEyMzZGRDkzMDAwQzYxNjEgLyogVGV4dERvY3VtZW50UGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQ2MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0
RW5jb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzEwNURBNjIwRjNBQTY4RjAwMURENDRG
IC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="234759"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="234761"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212586</attachid>
            <date>2013-09-25 09:09:14 -0700</date>
            <delta_ts>2013-09-25 09:51:56 -0700</delta_ts>
            <desc>Patch v2 - Try to appease all the bots</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>356026</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNjkyYmJiOC4uY2E2MjllZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTUsNiArNSw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nYW1lcGFkIgogICAgICIke1dFQkNPUkVfRElSfS9N
b2R1bGVzL2dlb2xvY2F0aW9uIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRk
YiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYiIKICAgICAi
JHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRpZXVpIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1
bGVzL21lZGlhc291cmNlIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhc3RyZWFt
IgpAQCAtODA1LDMzICs4MDYsMzMgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJBbnkuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAotICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5j
cHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAKICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCiAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGgu
Y3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJS
ZXF1ZXN0LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWRE
YXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4
ZWREYXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUxldmVsREIuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JC
YWNrZW5kTGV2ZWxEQi5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJG
YWN0b3J5QmFja2VuZExldmVsREIuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJMZXZlbERCQ29kaW5nLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwCiAKICAgICBNb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2VS
ZWdpc3RyeS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNGQ1YTNiLi4zYmJkZjkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTMtMDktMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vcmUgcmVmYWN0b3JpbmcgdG8gbWFrZSB0aGUgTGV2ZWxEQiBkZXBl
bmRlbmNpZXMgb2YgSURCIG1vcmUgb2J2aW91cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTg4MAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhl
eSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRocmVlIHRoaW5nczoK
KyAgICAgICAgMSAtIE1vdmVzIHNvbWUgZmlsZXMgdG8gdGhlIGluZGV4ZWRkYi9sZXZlbGRiIHN1
YmRpcmVjdG9yeSwgcmVuYW1pbmcgdGhlbSBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgMiAtIFJl
bmFtZXMgc29tZSBjbGFzc2VzLgorICAgICAgICAzIC0gQWRkcyAiVVNFKExFVkVMREIpIiBndWFy
ZHMgaW4gYWRkaXRpb24gdG8gdGhlIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSBndWFyZCBmb3Ig
dGhvc2UgZmlsZXMuCisKKyAgICAgICAgUHJvamVjdCBmaWxlIHVwZGF0ZXM6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qOgorCisgICAgICAgIEZpbGUgcmVuYW1lcywgY2xhc3MgcmVuYW1l
cywgYW5kIFVTRShMRVZFTERCKSBndWFyZHM6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKTogQWRkIGEgbnVsbCByZXR1cm4gaWYgVVNF
KExFVkVMREIpIGlzIGRpc2FibGVkIGFzIGEgc3RvcCBnYXAgbWVhc3VyZSB1bnRpbAorICAgICAg
ICAgIHRoZXJlIGlzIGEgbm9uLUxldmVsREIgaW1wbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmguCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRMZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
LgorCisKIDIwMTMtMDktMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIGZyb20gdGhlIC54Y29kZXBy
b2osIGFzIGl0J3MgZ29uZSBmcm9tIHRoZSByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggYzU2M2EzNy4uOTEwODk3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC0xODg2LDE3ICsxODg2LDE3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBcCiAJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3Mu
aCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNr
ZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBcCi0JU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIFwKQEAgLTE5
MDgsOCArMTkwOCw4IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCi0JU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJGYWN0b3J5QmFja2VuZExldmVsREIuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCBcCkBAIC0xOTI2LDggKzE5
MjYsOCBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmggXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmggXAotCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggXAogCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwIFwKQEAgLTE5MzcsMTAg
KzE5MzcsMTAgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYWNpbmcuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVs
REIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2FlZThkMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdT
dG9yZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6b3Bl
bihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
TE9HX0VSUk9SKCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6
Om9wZW4gaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPigpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2lu
Z1N0b3JlOjpvcGVuSW5NZW1vcnkoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmKQotewot
ICAgIExPR19FUlJPUigiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0
b3JlOjpvcGVuSW5NZW1vcnkgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0gICAgcmV0dXJuIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0
T2JqZWN0U3RvcmVzKGludDY0X3QsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFw
KikKLXsKLSAgICBMT0dfRVJST1IoIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJh
Y2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzIGlzIGN1cnJlbnRseSBlbXB0eSIpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6YWR2YW5jZSh1
bnNpZ25lZCBsb25nKQotewotICAgIExPR19FUlJPUigiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24gb2YgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmFkdmFuY2UgaXMgY3VycmVudGx5IGVtcHR5
Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
Ojpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSosIEl0ZXJhdG9yU3RhdGUpCi17Ci0gICAg
TE9HX0VSUk9SKCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6
OkN1cnNvcjo6Y29udGludWVGdW5jdGlvbiBpcyBjdXJyZW50bHkgZW1wdHkiKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLUlEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9u
KElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFj
a2luZ1N0b3JlKQotewotfQotCi12b2lkIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJl
Z2luKCkKLXsKLSAgICBMT0dfRVJST1IoIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luIGlzIGN1cnJlbnRseSBlbXB0eSIpOwot
fQotCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCi17Ci0gICAg
TE9HX0VSUk9SKCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uOjpjb21taXQgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2so
KQotewotICAgIExPR19FUlJPUigiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2sgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY3MGZkYS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJCYWNr
aW5nU3RvcmVfaAotI2RlZmluZSBJREJCYWNraW5nU3RvcmVfaAotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0
YS5oIgotI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5o
IgotI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGV2ZWxEQkNvbXBhcmF0b3I7Ci1jbGFz
cyBMZXZlbERCRGF0YWJhc2U7Ci1jbGFzcyBMZXZlbERCVHJhbnNhY3Rpb247Ci1jbGFzcyBJREJL
ZXk7Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2hh
cmVkQnVmZmVyOwotCi1jbGFzcyBMZXZlbERCRmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+TGV2ZWxEQkZhY3RvcnkoKSB7IH0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBvcGVuTGV2ZWxEQihjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBMZXZlbERC
Q29tcGFyYXRvciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVzdHJveUxldmVsREIoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSkgPSAwOwotfTsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgVHJh
bnNhY3Rpb247Ci0KLSAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKTsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBT
dHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25z
dCBTdHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBMZXZlbERC
RmFjdG9yeSopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3Blbklu
TWVtb3J5KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5Jbk1lbW9yeShTZWN1cml0eU9y
aWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKLSAgICBX
ZWFrUHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha0Zh
Y3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9Ci0KLSAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdl
dERhdGFiYXNlTmFtZXMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqLCBib29sJiBzdWNjZXNz
KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNl
TWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0
X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJ
REJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJ
REJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURh
dGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICBib29sIGdldE9iamVjdFN0b3Jlcyhp
bnQ2NF90IGRhdGFiYXNlSWQsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKikg
V0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgYXV0b0luY3JlbWVudCk7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZU9iamVjdFN0b3JlKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgY2xhc3MgUmVjb3JkSWRl
bnRpZmllciB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZElkZW50aWZpZXIp
OwotICAgIHB1YmxpYzoKLSAgICAgICAgUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8Y2hh
cj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFyeUtl
eSksIG1fdmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOyB9
Ci0gICAgICAgIFJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3ZlcnNpb24o
LTEpIHsgfQotCi0gICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQotICAgICAgICB2b2lkIHJlc2V0KGNvbnN0IFZlY3Rvcjxj
aGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSB7IG1fcHJpbWFyeUtleSA9IHByaW1h
cnlLZXk7IG1fdmVyc2lvbiA9IHZlcnNpb247IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFZl
Y3RvcjxjaGFyPiBtX3ByaW1hcnlLZXk7IC8vIEZJWE1FOiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhh
dCB0aGlzIGlzIHRoZSAqZW5jb2RlZCogdmVyc2lvbiBvZiB0aGUga2V5LgotICAgICAgICBpbnQ2
NF90IG1fdmVyc2lvbjsKLSAgICB9OwotCi0gICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgcmVjb3JkKSBXQVJOX1VO
VVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUmVjb3JkSWRl
bnRpZmllciopIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgY2xlYXJPYmpl
Y3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmll
ciYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGN1cnJlbnROdW1iZXIpIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBj
aGVja0N1cnJlbnQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhp
c3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElk
ZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllciwgYm9vbCYgZm91bmQpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKLQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAg
ICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9y
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyJikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleSYsIFJlZlB0cjxJREJLZXk+JiBwcmltYXJ5S2V5KSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJL
ZXk+JiBmb3VuZFByaW1hcnlLZXksIGJvb2wmIGV4aXN0cykgV0FSTl9VTlVTRURfUkVUVVJOOwot
Ci0gICAgY2xhc3MgQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7Ci0gICAgcHVi
bGljOgotICAgICAgICBlbnVtIEl0ZXJhdG9yU3RhdGUgewotICAgICAgICAgICAgUmVhZHkgPSAw
LAotICAgICAgICAgICAgU2VlawotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBDdXJzb3JP
cHRpb25zIHsKLSAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZDsKLSAgICAgICAgICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZDsKLSAgICAgICAgICAgIGludDY0X3QgaW5kZXhJZDsKLSAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBsb3dLZXk7Ci0gICAgICAgICAgICBib29sIGxvd09wZW47Ci0g
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKLSAgICAgICAgICAgIGJvb2wgaGlnaE9w
ZW47Ci0gICAgICAgICAgICBib29sIGZvcndhcmQ7Ci0gICAgICAgICAgICBib29sIHVuaXF1ZTsK
LSAgICAgICAgfTsKLQotICAgICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50S2V5OyB9Ci0gICAgICAgIGJvb2wgY29udGludWVGdW5jdGlvbihjb25z
dCBJREJLZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWspOwotICAgICAgICBib29sIGFkdmFu
Y2UodW5zaWduZWQgbG9uZyk7Ci0gICAgICAgIGJvb2wgZmlyc3RTZWVrKCk7Ci0KLSAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRL
ZXk7IH0KLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBj
b25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYgcmVjb3Jk
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsgfQotICAgICAg
ICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50
Um93KCkgPSAwOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBDdXJzb3IoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykK
LSAgICAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgICAgICwg
bV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAg
ICAgICBleHBsaWNpdCBDdXJzb3IoY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IqIG90aGVy
KTsKLQotICAgICAgICB2aXJ0dWFsIFZlY3RvcjxjaGFyPiBlbmNvZGVLZXkoY29uc3QgSURCS2V5
JikgPSAwOwotCi0gICAgICAgIGJvb2wgaXNQYXN0Qm91bmRzKCkgY29uc3Q7Ci0gICAgICAgIGJv
b2wgaGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0OwotCi0gICAgICAgIExldmVsREJUcmFuc2FjdGlv
biogbV90cmFuc2FjdGlvbjsKLSAgICAgICAgY29uc3QgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9w
dGlvbnM7Ci0jaWYgVVNFKExFVkVMREIpCi0gICAgICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IG1faXRlcmF0b3I7Ci0jZW5kaWYKLSAgICAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5
OwotICAgICAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgbV9yZWNvcmRJZGVu
dGlmaWVyOwotICAgIH07Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2Jq
ZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5n
ZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbik7Ci0KLSAgICBjbGFzcyBUcmFuc2FjdGlvbiB7Ci0gICAgcHVibGljOgotICAg
ICAgICBleHBsaWNpdCBUcmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmUqKTsKLSAgICAgICAgdm9p
ZCBiZWdpbigpOwotICAgICAgICBib29sIGNvbW1pdCgpOwotICAgICAgICB2b2lkIHJvbGxiYWNr
KCk7Ci0gICAgICAgIHZvaWQgcmVzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2tp
bmdTdG9yZSA9IDA7Ci0jaWYgVVNFKExFVkVMREIpCi0gICAgICAgICAgICBtX3RyYW5zYWN0aW9u
ID0gMDsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIExldmVsREJUcmFuc2Fj
dGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uRnJvbShUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0g
ICAgICAgIHsKLSNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUcmFuc2FjdGlvbio+KHRyYW5zYWN0aW9uKS0+bV90cmFuc2FjdGlvbi5nZXQoKTsKLSNlbHNl
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBJREJCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOwotI2lmIFVTRShM
RVZFTERCKQotICAgICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9u
OwotI2VuZGlmCi0gICAgfTsKLQotcHJvdGVjdGVkOgotICAgIElEQkJhY2tpbmdTdG9yZShjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiwgUGFzc093
blB0cjxMZXZlbERCQ29tcGFyYXRvcj4pOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgdXNlZCBmb3Ig
bW9ja2luZy4KLSAgICBJREJCYWNraW5nU3RvcmUoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiwgUGFzc093blB0cjxMZXZlbERCQ29tcGFy
YXRvcj4pOwotCi0gICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5LCBib29sJiBmb3VuZCk7Ci0gICAgYm9vbCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRl
eE1hcCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0K
LSAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwotICAgIE93blB0cjxMZXZlbERCQ29t
cGFyYXRvcj4gbV9jb21wYXJhdG9yOwotICAgIFdlYWtQdHJGYWN0b3J5PElEQkJhY2tpbmdTdG9y
ZT4gbV93ZWFrRmFjdG9yeTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCQmFja2luZ1N0b3Jl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhM2Nm
Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3JCYWNrZW5kSW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmUuaCIKLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRl
ICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3Is
IGtleSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3Vyc29ySXRlcmF0aW9uT3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgOiBtX2N1cnNvcihjdXJzb3IpCi0gICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmRJbXBsPiBtX2N1cnNvcjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2tleTsKLSAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkN1cnNvckJh
Y2tlbmRJbXBsOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykp
OwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Ci1wcml2YXRlOgotICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikK
LSAgICAgICAgLCBtX2NvdW50KGNvdW50KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1
cnNvcjsKLSAgICB1bnNpZ25lZCBsb25nIG1fY291bnQ7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29y
UHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmRJbXBsPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
dXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIG51bWJlclRvRmV0Y2gsIGNh
bGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgaW50IG51bWJl
clRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDog
bV9jdXJzb3IoY3Vyc29yKQotICAgICAgICAsIG1fbnVtYmVyVG9GZXRjaChudW1iZXJUb0ZldGNo
KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNvcjsKLSAgICBpbnQgbV9udW1iZXJU
b0ZldGNoOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotSURC
Q3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5
cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
Ci0gICAgOiBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5
cGUpCi0gICAgLCBtX2RhdGFiYXNlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKQotICAgICwgbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9y
ZUlkKQotICAgICwgbV9jdXJzb3IoY3Vyc29yKQotICAgICwgbV9jbG9zZWQoZmFsc2UpCi17Ci0g
ICAgbV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwotfQotCi1JREJDdXJz
b3JCYWNrZW5kSW1wbDo6fklEQkN1cnNvckJhY2tlbmRJbXBsKCkKLXsKLSAgICBtX3RyYW5zYWN0
aW9uLT51bnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKLX0KLQotCi12b2lkIElEQkN1cnNvckJh
Y2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAg
IElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlIik7Ci0gICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBrZXksIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vy
c29yQmFja2VuZEltcGw6OmFkdmFuY2UiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEN1
cnNvckFkdmFuY2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBjb3VudCwgY2FsbGJhY2tzKSk7Ci19
Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopCi17Ci0gICAgSURCX1RSQUNFKCJDdXJz
b3JBZHZhbmNlT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1f
Y3Vyc29yLT5tX2N1cnNvci0+YWR2YW5jZShtX2NvdW50KSkgewotICAgICAgICBtX2N1cnNvci0+
bV9jdXJzb3IgPSAwOwotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0
PFNoYXJlZEJ1ZmZlcio+KDApKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFyeUtleSgp
LCBtX2N1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1
cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KikKLXsKLSAgICBJREJfVFJBQ0UoIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotICAgIGlm
ICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVu
Y3Rpb24obV9rZXkuZ2V0KCkpKSB7Ci0gICAgICAgIG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0g
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4o
MCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhtX2N1cnNvci0+a2V5KCksIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIG1fY3Vyc29yLT52YWx1
ZSgpKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCi17Ci0g
ICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlIik7Ci0gICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkp
OwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRl
KG1fY3Vyc29yLT5wcmltYXJ5S2V5KCkpOwotICAgIG1fZGF0YWJhc2UtPmRlbGV0ZVJhbmdlKG1f
dHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UucmVsZWFzZSgpLCBw
cnBDYWxsYmFja3MpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENv
bnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tl
bmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayht
X3Rhc2tUeXBlLCBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKikKLXsKLSAgICBJREJfVFJBQ0UoIkN1cnNvclByZWZldGNoSXRlcmF0
aW9uT3BlcmF0aW9uIik7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7
Ci0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsKLSAgICBWZWN0
b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gPiBmb3VuZFZhbHVlczsKLQotICAgIGlmIChtX2N1cnNv
ci0+bV9jdXJzb3IpCi0gICAgICAgIG1fY3Vyc29yLT5tX3NhdmVkQ3Vyc29yID0gbV9jdXJzb3It
Pm1fY3Vyc29yLT5jbG9uZSgpOwotCi0gICAgY29uc3Qgc2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9
IDEwICogMTAyNCAqIDEwMjQ7Ci0gICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1fbnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAgICAgIGlmICgh
bV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rp
b24oMCkpIHsKLSAgICAgICAgICAgIG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGZvdW5kS2V5cy5hcHBlbmQobV9jdXJzb3It
Pm1fY3Vyc29yLT5rZXkoKSk7Ci0gICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKG1fY3Vy
c29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpKTsKLQotICAgICAgICBzd2l0Y2ggKG1fY3Vyc29y
LT5tX2N1cnNvclR5cGUpIHsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvcktleU9ubHk6
Ci0gICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvcktleUFu
ZFZhbHVlOgotICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+
dmFsdWUoKS0+c2l6ZSgpOwotICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKG1fY3Vyc29y
LT5tX2N1cnNvci0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUo
KTsKLSAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtl
eSgpLT5zaXplRXN0aW1hdGUoKTsKLQotICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6
ZUVzdGltYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEtl
eXMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8
U2hhcmVkQnVmZmVyKj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jYWxs
YmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtleXMs
IGZvdW5kVmFsdWVzKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hS
ZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNv
ckJhY2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0Iik7Ci0gICAgbV9jdXJzb3IgPSBtX3NhdmVkQ3Vy
c29yOwotICAgIG1fc2F2ZWRDdXJzb3IgPSAwOwotCi0gICAgaWYgKG1fY2xvc2VkKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG1fY3Vyc29yKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdXNlZFByZWZldGNoZXM7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9IG1fY3Vyc29y
LT5jb250aW51ZUZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNsb3Nl
KCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSIpOwotICAg
IG1fY2xvc2VkID0gdHJ1ZTsKLSAgICBtX2N1cnNvci5jbGVhcigpOwotICAgIG1fc2F2ZWRDdXJz
b3IuY2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTVlMjZiYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLQotI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElE
QkN1cnNvckJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQktleVJh
bmdlOwotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1
cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vy
c29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmVJZCkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29y
VHlwZSwgdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAg
IHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbXBsKCk7Ci0KLSAgICAvLyBJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24o
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2
b2lkIHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0
KGludCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOwotICAgIHZpcnR1YWwg
dm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgfQotCi0gICAgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLT5rZXkoKTsgfQotICAgIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPnByaW1h
cnlLZXkoKTsgfQotICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSA/IDAgOiBt
X2N1cnNvci0+dmFsdWUoKTsgfQotICAgIHZvaWQgY2xvc2UoKTsKLQotcHJpdmF0ZToKLSAgICBJ
REJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwg
SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsK
LQotICAgIGNsYXNzIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjsKLSAgICBjbGFzcyBDdXJzb3JB
ZHZhbmNlT3BlcmF0aW9uOwotICAgIGNsYXNzIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0
aW9uOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tU
eXBlOwotICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgY29uc3Qg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgY29uc3QgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I+IG1fY3Vyc29yOyAvLyBNdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgbV90cmFuc2FjdGlv
bi4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fc2F2ZWRDdXJzb3I7IC8v
IE11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgotCi0gICAgYm9vbCBtX2Ns
b3NlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZEltcGxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3NDM3YS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzODQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgi
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdT
dG9yZS5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIK
LSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIK
LSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdl
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlv
bihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAg
ICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1l
dGFkYXRhKQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAg
LCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAg
fQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0g
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Ci19
OwotCi1jbGFzcyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3Rv
cmVNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgICAgIDogbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShv
YmplY3RTdG9yZU1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oZGF0YWJhc2Us
IHRyYW5zYWN0aW9uSWQsIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwotcHJpdmF0ZToKLSAgICBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgOiBt
X2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlv
bklkKQotICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAsIG1fY2FsbGJhY2tz
KGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJh
Y2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
bV9kYXRhYmFzZTsKLSAgICBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKLSAgICBpbnQ2NF90IG1f
dmVyc2lvbjsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci19OwotCi1jbGFz
cyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0
T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAg
Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgICAgIDogbV9k
YXRhYmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJ
ZCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IG1fZGF0YWJhc2U7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci19Owot
Ci1jbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3Jl
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fZGF0YWJh
c2UoZGF0YWJhc2UpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3Jl
TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBtX2RhdGFiYXNlOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9y
ZU1ldGFkYXRhOwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNo
YW5nZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3Qg
cHJldmlvdXNJbnRWZXJzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBW
ZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIHByZXZpb3VzVmVyc2lvbiwgcHJl
dmlvdXNJbnRWZXJzaW9uKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgVmVyc2lvbkNoYW5nZUFib3J0
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikK
LSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fcHJldmlvdXNWZXJz
aW9uKHByZXZpb3VzVmVyc2lvbikKLSAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihwcmV2
aW91c0ludFZlcnNpb24pCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFN0cmluZyBtX3ByZXZpb3VzVmVyc2lvbjsKLSAg
ICBpbnQ2NF90IG1fcHJldmlvdXNJbnRWZXJzaW9uOwotfTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhP
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4
T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShi
YWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0g
ICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEg
bV9pbmRleE1ldGFkYXRhOwotfTsKLQotY2xhc3MgRGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJs
aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKGJhY2tp
bmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgot
ICAgIERlbGV0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRl
eE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFJlZlB0
cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9v
YmplY3RTdG9yZUlkOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRh
OwotfTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQot
ICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5k
ZXhJZChpbmRleElkKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLX07Ci0KLWNsYXNzIERlbGV0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4
TWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAg
ICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmpl
Y3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAg
IHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9k
YXRhYmFzZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBJ
REJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIEdldE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRPcGVyYXRpb24o
YmFja2luZ1N0b3JlLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEdldE9wZXJhdGlv
bihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRh
YmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNv
clR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAg
ICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFz
ZUlkKG1ldGFkYXRhLmlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlk
KQotICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQotICAgICAgICAsIG1fa2V5UGF0aChtZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCi0gICAgICAgICwg
bV9hdXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCku
YXV0b0luY3JlbWVudCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAs
IG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOwotICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChvYmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci0KLSAgICBjb25z
dCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2
NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAg
ICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICBjb25zdCBJREJLZXlQYXRoIG1fa2V5UGF0
aDsKLSAgICBjb25zdCBib29sIG1fYXV0b0luY3JlbWVudDsKLSAgICBjb25zdCBSZWZQdHI8SURC
S2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1f
Y3Vyc29yVHlwZTsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsK
LX07Ci0KLWNsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQ
dXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgUHV0T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4
S2V5cykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIFB1dE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4m
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotICAgICAgICA6IG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJ
ZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCi0gICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1fcHV0TW9kZShwdXRN
b2RlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2luZGV4
SWRzKGluZGV4SWRzKQotICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKLSAgICB7Ci0g
ICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7
Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOwotICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+
IG1fdmFsdWU7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7Ci0gICAgY29uc3QgSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIG1fcHV0TW9kZTsKLSAgICBjb25zdCBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBjb25zdCBWZWN0b3I8aW50NjRf
dD4gbV9pbmRleElkczsKLSAgICBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlOjpJbmRleEtleXM+IG1faW5kZXhLZXlzOwotfTsKLQotY2xhc3MgU2V0SW5kZXhlc1JlYWR5
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoc2l6ZV90IGluZGV4Q291bnQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleENvdW50KSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKLXByaXZhdGU6Ci0gICAgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRl
eENvdW50KQotICAgICAgICA6IG1faW5kZXhDb3VudChpbmRleENvdW50KQotICAgIHsKLSAgICB9
Ci0KLSAgICBjb25zdCBzaXplX3QgbV9pbmRleENvdW50OwotfTsKLQotY2xhc3MgT3BlbkN1cnNv
ck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIE9wZW5DdXJzb3JPcGVyYXRp
b24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAg
ICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChv
YmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQotICAgICAgICAsIG1f
a2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAg
ICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fdGFza1R5cGUodGFz
a1R5cGUpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0K
LSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBj
b25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICBjb25zdCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1
cnNvclR5cGU7Ci0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlw
ZSBtX3Rhc2tUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OwotfTsKLQotY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ291bnRPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsK
LXByaXZhdGU6Ci0gICAgQ291bnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUo
YmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICAg
ICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJZChp
bmRleElkKQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJ
ZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2NF90
IG1faW5kZXhJZDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0g
ICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBE
ZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRl
UmFuZ2VPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgRGVsZXRlUmFuZ2VPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0
YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAg
ICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9i
YWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBt
X2tleVJhbmdlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwot
fTsKLQotY2xhc3MgQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xlYXJPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBD
bGVhck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3Rv
cmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmpl
Y3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tz
KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2Jh
Y2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdP
cGVuQ2FsbCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGVuZGluZ09wZW5DYWxs
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCB2ZXJzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBQZW5kaW5nT3BlbkNhbGwoY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rp
b25JZCwgdmVyc2lvbikpOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KLSAgICBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxs
YmFja3M7IH0KLSAgICBpbnQ2NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAg
ICBpbnQ2NF90IHRyYW5zYWN0aW9uSWQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSWQ7
IH0KLQotcHJpdmF0ZToKLSAgICBQZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VD
YWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQotICAgICAg
ICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tz
KGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICAg
ICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgIHsKLSAgICB9Ci0gICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotICAgIGludDY0X3QgbV92ZXJzaW9uOwotICAg
IGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0ZUNhbGwgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ0Rl
bGV0ZUNhbGwoY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQotCi1wcml2YXRlOgotICAgIFBl
bmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAg
ICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1QYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFj
dG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQotewotICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBiYWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFj
a2VuZEltcGwobmFtZSwgZGF0YWJhc2UsIGZhY3RvcnksIHVuaXF1ZUlkZW50aWZpZXIpKTsKLSAg
ICBpZiAoIWJhY2tlbmQtPm9wZW5JbnRlcm5hbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gYmFja2VuZC5yZWxlYXNlKCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCBjaGFyKiBO
b1N0cmluZ1ZlcnNpb24gPSAiIjsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0
YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogYmFj
a2luZ1N0b3JlLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYg
dW5pcXVlSWRlbnRpZmllcikKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAg
ICAsIG1fbWV0YWRhdGEobmFtZSwgSW52YWxpZElkLCBOb1N0cmluZ1ZlcnNpb24sIElEQkRhdGFi
YXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbiwgSW52YWxpZElkKQotICAgICwgbV9pZGVudGlmaWVy
KHVuaXF1ZUlkZW50aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fdHJh
bnNhY3Rpb25Db29yZGluYXRvcihJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKSkK
LSAgICAsIG1fY2xvc2luZ0Nvbm5lY3Rpb24oZmFsc2UpCi17Ci0gICAgQVNTRVJUKCFtX21ldGFk
YXRhLm5hbWUuaXNOdWxsKCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFk
ZE9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBp
bnQ2NF90IG5ld01heE9iamVjdFN0b3JlSWQpCi17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS5pZCkpOwotICAgIGlmIChuZXdNYXhPYmpl
Y3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAg
ICBBU1NFUlQobV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgICAgIG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0
b3JlSWQ7Ci0gICAgfQotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9y
ZS5pZCwgb2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJl
bW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCi17Ci0gICAg
QVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsK
LSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS5p
bmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQo
aW5kZXguaWQsIGluZGV4KTsKLSAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQg
PCBuZXdNYXhJbmRleElkKTsKLSAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01h
eEluZGV4SWQ7Ci0gICAgfQotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RT
dG9yZUlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
cmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0g
ICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0b3Jl
LmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwotICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVt
b3ZlKGluZGV4SWQpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9y
ZUlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3Bl
bkludGVybmFsKCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBib29sIG9rID0g
bV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAm
bV9tZXRhZGF0YSwgc3VjY2Vzcyk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09
IChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxk
Iiwgc3VjY2VzcyA/ICJ0cnVlIiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9t
ZXRhZGF0YS5pZCkpOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9y
ZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsKLQotICAgIHJldHVy
biBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5h
bWUsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFkYXRh
LmlkKTsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZElt
cGwoKQotewotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6YmFja2luZ1N0b3JlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3Rv
cmU7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUo
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQot
ewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4
SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQp
KTsKLQotICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3Jl
SWQpOwotfQotCi12b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3Jl
YXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVh
dGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJh
bnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhLm5hbWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBt
X29iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCkpIHsKLSAgICAgICAgUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJv
ciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFt
ZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxl
YXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAo
IXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNT
RVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFj
a2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7Ci0gICAgcmVtb3Zl
T2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQotewotICAgIElEQl9U
UkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgiKTsKLSAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAg
QVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNp
b25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5z
KG9iamVjdFN0b3JlSWQpKTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVj
dFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0g
ICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKLSAgICBj
b25zdCBJREJJbmRleE1ldGFkYXRhIGluZGV4TWV0YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0
aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Q3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhNZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7Ci0KLSAgICBhZGRJbmRleChvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhLCBpbmRleElkKTsKLX0KLQotdm9pZCBDcmVhdGVJbmRleE9wZXJhdGlv
bjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2JhY2tpbmdT
dG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhN
ZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRo
LCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsK
LSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwg
ZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRh
Lm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9p
ZCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbiIpOwotICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7
Ci0gICAgbV9kYXRhYmFzZS0+cmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCIpOwot
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3Rv
cmVJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElk
KSk7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0
b3JlLmluZGV4ZXMuZ2V0KGluZGV4SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLQotICAgIHJlbW92ZUluZGV4KG9i
amVjdFN0b3JlSWQsIGluZGV4SWQpOwotfQotCi12b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElE
Ql9UUkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBib29sIG9rID0gbV9iYWNraW5n
U3RvcmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4
TWV0YWRhdGEuaWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGlu
ZyBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGVsZXRl
SW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24i
KTsKLSAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOwotICAgIG1f
ZGF0YWJhc2UtPmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJREJJ
bmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gVGhlIGZyb250ZW5k
IHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0
aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4g
b25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBp
dCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKG1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICAvLyBJZiB0aGUg
dHJhbnNhY3Rpb24gaXMgdW5rbm93biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQg
YnkgdGhlIGJhY2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRvIGlnbm9yZSBp
dC4KLSAgICBpZiAobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCi0gICAg
ICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5z
YWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRo
ZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0g
ICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCIpOwot
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUsIG1fbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5IDogSW5kZXhlZERCOjpD
dXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgR2V0T3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElE
Ql9UUkFDRSgiR2V0T3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0KLSAg
ICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCi0gICAgICAgIGtleSA9IG1fa2V5UmFuZ2Ut
Pmxvd2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwotICAgICAgICBpZiAobV9pbmRleElkID09IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlw
ZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAgICAgICAgLy8gT2JqZWN0U3Rv
cmUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0g
bV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5
UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkK
LSAgICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAg
ICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRl
eEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRh
YmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5k
ZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAv
LyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29y
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1
cnNvck5leHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3Ip
IHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5
KCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKLSAgICBib29sIG9r
OwotICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0g
ICAgICAgIC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIFZlY3Rv
cjxjaGFyPiB2YWx1ZTsKLSAgICAgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAg
ICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4i
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9hdXRvSW5jcmVtZW50
ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOwotICAgICAgICByZXR1
cm47Ci0KLSAgICB9Ci0KLSAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRo
IGluZGV4ZXMuCi0gICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4g
Z2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIXByaW1hcnlLZXkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpD
dXJzb3JLZXlPbmx5KSB7Ci0gICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRp
b24KLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0
cmlldmFsIE9wZXJhdGlvbgotICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKLSAgICBvayA9IG1fYmFj
a2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgdmFsdWUpOwot
ICAgIGlmICghb2spIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5h
bCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9r
ZXlQYXRoLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVk
QnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHByaW1hcnlLZXksIG1fa2V5UGF0aCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1v
ZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5
cykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uUmVhZE9ubHkpOwotCi0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RT
dG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQp
OwotCi0gICAgQVNTRVJUKG9iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXku
Z2V0KCkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNy
ZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtl
eSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Ci19Ci0KLXZvaWQg
UHV0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uKQotewotICAgIElEQl9UUkFDRSgiUHV0T3BlcmF0aW9uIik7Ci0gICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLSAgICBB
U1NFUlQobV9pbmRleElkcy5zaXplKCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKLSAgICBib29s
IGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOwotCi0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAg
IGlmIChtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRh
dGUgJiYgbV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmICFtX2tleSkgewotICAgICAgICBS
ZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2Vu
ZXJhdGVLZXkobV9iYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmUuaWQpOwotICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICBp
ZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25z
dHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAga2V5ID0gYXV0b0luY0tleTsK
LSAgICB9IGVsc2UKLSAgICAgICAga2V5ID0gbV9rZXk7Ci0KLSAgICBBU1NFUlQoa2V5ICYmIGtl
eS0+aXNWYWxpZCgpKTsKLQotICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciBy
ZWNvcmRJZGVudGlmaWVyOwotICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpBZGRPbmx5KSB7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAg
ICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmUuaWQsICprZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7Ci0gICAgICAgIGlmICgh
b2spIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0
cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZlY3RvcjxPd25Q
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJz
OwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0g
ZmFsc2U7Ci0gICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgbV9iYWNraW5nU3RvcmUuZ2V0
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1f
aW5kZXhJZHMsIG1faW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5
c0NvbnN0cmFpbnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBl
cnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50
RXJyb3IsIGVycm9yTWVzc2FnZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
QmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2lu
dCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgYmFja2lu
Z1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwg
KmtleSwgbV92YWx1ZSwgJnJlY29yZElkZW50aWZpZXIpOwotICAgIGlmICghYmFja2luZ1N0b3Jl
U3VjY2VzcykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVy
cy5zaXplKCk7ICsraSkgewotICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRl
eFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlu
ZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9iYWNraW5nU3Rv
cmUsIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmUuaWQpOwotICAgIH0KLQotICAgIGlmIChtX29iamVjdFN0b3JlLmF1dG9J
bmNyZW1lbnQgJiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vy
c29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgewotICAgICAg
ICBib29sIG9rID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9y
KG1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
LmlkLCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0
aW5nIGtleSBnZW5lcmF0b3IuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKLX0KLQot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzKQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6c2V0SW5kZXhLZXlzIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0
cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIFJlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OwotICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IHN0b3JlID0gYmFja2luZ1N0b3JlKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0
aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQn
cyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KLSAgICBJREJCYWNraW5nU3RvcmU6OlJlY29y
ZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0g
ICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAq
cHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5k
ZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkgewot
ICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3Jt
YXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIp
KTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKLSAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlOwotICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1
Y2Nlc3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJzKHRyYW5z
YWN0aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgcHJpbWFyeUtl
eSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3Nh
Z2UsIG9iZXlzQ29uc3RyYWludHMpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vzcykgewot
ICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBz
dG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFi
b3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3Ry
YWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9
IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhL
ZXlzKHJlY29yZElkZW50aWZpZXIsICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOwotICAgIH0KLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKQotewotICAg
IElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7
Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6
Y3JlYXRlKGluZGV4SWRzLnNpemUoKSkpOwotfQotCi12b2lkIFNldEluZGV4ZXNSZWFkeU9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsK
LSAgICBJREJfVFJBQ0UoIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyArK2kpCi0gICAgICAgIHRyYW5zYWN0aW9uLT5k
aWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNr
VHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAg
ICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNy
ZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFu
Z2UsIGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4
ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9p
ZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOwot
Ci0gICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMg
dGhlIHRyYW5zYWN0aW9uCi0gICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBU
aGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2Fu
dCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhl
cyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0g
ICAgaWYgKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0
aXZlVGFzaykKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotCi0g
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0g
ICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAg
ICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6Tm9ybWFsVGFzayk7Ci0gICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5k
ZXhlZERCOjpDdXJzb3JLZXlPbmx5KQotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0g
bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJ
ZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29y
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7
Ci0gICAgfQotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tU
eXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGU+KG1fdGFza1R5cGUpKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1
cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdl
dCgpLCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZUlk
KTsKLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vy
c29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQp
OwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCht
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0
b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7
Ci19Ci0KLXZvaWQgQ291bnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJDb3VudE9wZXJhdGlvbiIpOwot
ICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLQotICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkKQotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tp
bmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4
dCk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2Vzcyhjb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0g
ICAgICAgICsrY291bnQ7Ci0gICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51
ZUZ1bmN0aW9uKDApKTsKLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotfQot
Ci12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlIik7Ci0gICAgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFk
T25seSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZVJhbmdlT3BlcmF0
aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGtleVJhbmdl
LCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0Uo
IkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JO
ZXh0KTsKLSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIGJh
Y2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKSkgewotICAgICAgICAgICAgICAg
IG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIp
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hp
bGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0gICAgfQotCi0g
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgi
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xlYXIiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
LSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLQotICAg
IHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ2xlYXJPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tp
bmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgQ2xl
YXJPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rp
b24pCi17Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Ci0gICAg
aWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQpKSB7Ci0g
ICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2JqZWN0IHN0
b3JlIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoKTsKLX0KLQotdm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRl
bGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3Jl
LT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5p
ZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBz
dG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIlZl
cnNpb25DaGFuZ2VPcGVyYXRpb24iKTsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtX2RhdGFi
YXNlLT5pZCgpOwotICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IG1fZGF0YWJhc2UtPm1fbWV0YWRh
dGEuaW50VmVyc2lvbjsKLSAgICBBU1NFUlQobV92ZXJzaW9uID4gb2xkVmVyc2lvbik7Ci0gICAg
bV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV92ZXJzaW9uOwotICAgIGlmICgh
bV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgbV9kYXRh
YmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZSB3aGVuIHVwZGF0aW5nIHZlcnNpb24uIik7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KGVycm9yKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuKTsKLSAgICBtX2RhdGFiYXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IFBlbmRpbmdP
cGVuQ2FsbDo6Y3JlYXRlKG1fY2FsbGJhY2tzLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBtX3RyYW5z
YWN0aW9uSWQsIG1fdmVyc2lvbik7Ci0gICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChv
bGRWZXJzaW9uLCBtX2RhdGFiYXNlLCBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsK
LSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVy
c2lvbkNoYW5nZSkgewotICAgICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbik7Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRy
YW5zYWN0aW9uOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFu
c2FjdGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJw
VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uLT5pZCgpKSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbi0+aWQoKSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fdHJhbnNh
Y3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbi0+aWQoKSk7Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi5nZXQoKSk7Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5j
bGVhcigpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2Fj
dGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHBycFRyYW5zYWN0aW9uKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Ci0gICAg
ICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwg
YmUgYSAic2Vjb25kCi0gICAgICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBp
biBwcm9jZXNzUGVuZGluZ0NhbGxzLgotICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBsb25n
ZXIgc3VwcG9ydCBzZXRWZXJzaW9uLCBhc3NlcnQgc3VjaCBhIHRoaW5nLgotICAgICAgICBpZiAo
bV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlv
biB3YXMgYWJvcnRlZCBpbiB1cGdyYWRlbmVlZGVkIGV2ZW50IGhhbmRsZXIuIikpOwotICAgICAg
ICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAg
ICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlv
bjsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
VmVyc2lvbkNoYW5nZSkKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi1zaXpl
X3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y29ubmVjdGlvbkNvdW50KCkKLXsKLSAgICAvLyBU
aGlzIGRvZXMgbm90IGluY2x1ZGUgcGVuZGluZyBvcGVuIGNhbGxzLCBhcyB0aG9zZSBzaG91bGQg
bm90IGJsb2NrIHZlcnNpb24gY2hhbmdlcyBhbmQgZGVsZXRlcy4KLSAgICByZXR1cm4gbV9kYXRh
YmFzZUNhbGxiYWNrc1NldC5zaXplKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCi17Ci0gICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuKSB7Ci0gICAgICAgIEFTU0VSVChtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigp
ID09IG1fbWV0YWRhdGEuaW50VmVyc2lvbik7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlk
ICE9IEludmFsaWRJZCk7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFj
a3MoKS0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICBtX3BlbmRp
bmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVu
IGNvbXBsZXRlLCBhcyBwZW5kaW5nIGRlbGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tl
ZC4KLSAgICB9Ci0KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGlt
aXphdGlvbiB0byByZWR1Y2UgcXVldWUtY2h1cm4gYW5kCi0gICAgLy8gbm90IG5lY2Vzc2FyeSBm
b3IgY29ycmVjdG5lc3M7IGRlbGV0ZURhdGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCi0g
ICAgLy8gcmVxdWV1ZSB0aGVpciBjYWxscyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgotICAg
IGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0
YWJhc2VCbG9ja2VkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ0Rl
bGV0ZUNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+
IHBlbmRpbmdEZWxldGVDYWxsID0gbV9wZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7Ci0g
ICAgICAgIGRlbGV0ZURhdGFiYXNlRmluYWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygp
KTsKLSAgICB9Ci0gICAgLy8gZGVsZXRlRGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVl
dWUgY2FsbHMuCi0gICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0K
LSAgICAvLyBUaGlzIGNoZWNrIGlzIGFsc28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0
aW9uIHdvdWxkIGp1c3QgcmVxdWV1ZSBpdHMgY2FsbHMuCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3BlbiBjYWxs
cyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5n
ZSB0cmFuc2FjdGlvbi4KLSAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRp
bmdPcGVuQ2FsbHM7Ci0gICAgbV9wZW5kaW5nT3BlbkNhbGxzLnN3YXAocGVuZGluZ09wZW5DYWxs
cyk7Ci0gICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBP
d25QdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxz
LnRha2VGaXJzdCgpOwotICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNh
bGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIHBlbmRpbmdP
cGVuQ2FsbC0+dHJhbnNhY3Rpb25JZCgpLCBwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSk7Ci0g
ICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZVRyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZSh0cmFuc2FjdGlv
bklkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZT4obW9kZSksIHRoaXMpOwotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb25JZCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2Fj
dGlvbklkLCB0cmFuc2FjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3Ms
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQotewotICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
ID0gcHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJh
c2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKLQotICAgIGlmICghbV9wZW5kaW5n
RGVsZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bikgewotICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuQ2FsbDo6
Y3JlYXRlKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX21ldGFkYXRhLmlkID09
IEludmFsaWRJZCkgewotICAgICAgICAvLyBUaGUgZGF0YWJhc2Ugd2FzIGRlbGV0ZWQgdGhlbiBp
bW1lZGlhdGVseSByZS1vcGVuZWQ7IG9wZW5JbnRlcm5hbCgpIHJlY3JlYXRlcyBpdCBpbiB0aGUg
YmFja2luZyBzdG9yZS4KLSAgICAgICAgaWYgKG9wZW5JbnRlcm5hbCgpKQotICAgICAgICAgICAg
QVNTRVJUKG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0lu
dFZlcnNpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwot
ICAgICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yOwotICAgICAgICAgICAg
aWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQotICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRo
IG5vIHZlcnNpb24gc3BlY2lmaWVkLiI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFi
YXNlIHdpdGggdmVyc2lvbiAlbGxkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2ZXJzaW9uKSk7
Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFdlIGluZmVyIHRoYXQgdGhl
IGRhdGFiYXNlIGRpZG4ndCBleGlzdCBmcm9tIGl0cyBsYWNrIG9mIGVpdGhlciB0eXBlIG9mIHZl
cnNpb24uCi0gICAgYm9vbCBpc05ld0RhdGFiYXNlID0gbV9tZXRhZGF0YS52ZXJzaW9uID09IE5v
U3RyaW5nVmVyc2lvbiAmJiBtX21ldGFkYXRhLmludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6Tm9JbnRWZXJzaW9uOwotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6RGVmYXVsdEludFZlcnNpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgY29tbWVu
dHMgd2FzIHJlbGF0ZWQgdG8gQ2hyb21pdW0gY29kZS4gSXQgbWF5IGJlIGluY29ycmVjdAotICAg
ICAgICAvLyBGb3IgdW5pdCB0ZXN0cyBvbmx5IC0gc2tpcCB1cGdyYWRlIHN0ZXBzLiBDYWxsaW5n
IGZyb20gc2NyaXB0IHdpdGggRGVmYXVsdEludFZlcnNpb24gdGhyb3dzIGV4Y2VwdGlvbi4KLSAg
ICAgICAgQVNTRVJUKGlzTmV3RGF0YWJhc2UpOwotICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKSB7Ci0gICAg
ICAgIGlmICghaXNOZXdEYXRhYmFzZSkgewotICAgICAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNr
c1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihkYXRhYmFzZUNhbGxiYWNrcykp
OwotICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU3BlYyBzYXlz
OiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQg
ZGF0YWJhc2UgdmVyc2lvbiB0byAxLgotICAgICAgICB2ZXJzaW9uID0gMTsKLSAgICB9Ci0KLSAg
ICBpZiAodmVyc2lvbiA+IG1fbWV0YWRhdGEuaW50VmVyc2lvbikgewotICAgICAgICBydW5JbnRW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJh
bnNhY3Rpb25JZCwgdmVyc2lvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHZl
cnNpb24gPCBtX21ldGFkYXRhLmludFZlcnNpb24pIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lv
bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICglbGxkKSBpcyBs
ZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCVsbGQpLiIsIHN0YXRpY19jYXN0PGxvbmcg
bG9uZz4odmVyc2lvbiksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pbnRWZXJz
aW9uKSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQodmVyc2lvbiA9PSBt
X21ldGFkYXRhLmludFZlcnNpb24pOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRh
dGFiYXNlQ2FsbGJhY2tzKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5t
ZXRhZGF0YSgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3Ms
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQotewotICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VD
YWxsYmFja3M7Ci0gICAgQVNTRVJUKGNhbGxiYWNrcyk7Ci0gICAgZm9yIChEYXRhYmFzZUNhbGxi
YWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2lu
KCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
Ly8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9u
cyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFz
ZUNhbGxiYWNrcykKLSAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0
YS5pbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICB9Ci0gICAgLy8gVGhlIHNwZWMg
ZGljdGF0ZXMgd2Ugd2FpdCB1bnRpbCBhbGwgdGhlIHZlcnNpb24gY2hhbmdlIGV2ZW50cyBhcmUK
LSAgICAvLyBkZWxpdmVyZWQgYW5kIHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNhbGxiYWNrcy5lbXB0
eSgpIGJlZm9yZSBwcm9jZWVkaW5nCi0gICAgLy8gb3IgZmlyaW5nIGEgYmxvY2tlZCBldmVudCwg
YnV0IGluc3RlYWQgd2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cKLSAgICAvLyB0aGUg
b2xkIHNldFZlcnNpb24gKGluY29ycmVjdGx5KSBkaWQgaXQuCi0gICAgLy8gRklYTUU6IFJlbW92
ZSB0aGUgY2FsbCB0byBvbkJsb2NrZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRpbCB0aGUgZnJvbnRl
bmQKLSAgICAvLyB0ZWxscyB1cyB0aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVudHMgaGF2ZSBiZWVu
IGRlbGl2ZXJlZC4gU2VlCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcxMTMwCi0gICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpKQotICAgICAgICBjYWxsYmFj
a3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLmludFZlcnNpb24pOwotICAgIC8vIEZJWE1FOiBBZGQg
dGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLgotICAgIGlmIChtX3J1
bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShj
YWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJz
aW9uKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2Jq
ZWN0U3RvcmVJZHM7Ci0gICAgY3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgZGF0YWJh
c2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lv
bkNoYW5nZSk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotCi0gICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdHJh
bnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNr
cyksIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRhdGEu
dmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uKSk7Ci0KLSAgICBBU1NFUlQoIW1fcGVuZGlu
Z1NlY29uZEhhbGZPcGVuKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFz
ZUNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0
YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKGlzRGVs
ZXRlRGF0YWJhc2VCbG9ja2VkKCkpIHsKLSAgICAgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1Nl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0
ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIC8v
IEZyb250IGVuZCBlbnN1cmVzIHRoZSBldmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMg
dGhhdCBoYXZlIGNsb3NlUGVuZGluZyBzZXQuCi0gICAgICAgICAgICAoKml0KS0+b25WZXJzaW9u
Q2hhbmdlKG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRW
ZXJzaW9uKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tl
ZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAgICAgLy8gVmVy
c2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAK
LSAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS5pbnRWZXJzaW9uKTsKLSAg
ICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVh
dGUoY2FsbGJhY2tzLnJlbGVhc2UoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRl
bGV0ZURhdGFiYXNlRmluYWwoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci19Ci0KLWJvb2wgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQotewotICAgIHJldHVy
biBjb25uZWN0aW9uQ291bnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpk
ZWxldGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17
Ci0gICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKLSAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmUpOwotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1f
bWV0YWRhdGEubmFtZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3IgZGVsZXRpbmcgZGF0YWJhc2UuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fbWV0YWRhdGEudmVyc2lvbiA9IE5vU3RyaW5nVmVyc2lvbjsKLSAgICBtX21ldGFkYXRh
LmlkID0gSW52YWxpZElkOwotICAgIG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jbGVh
cigpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwotICAgIEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5z
KGNhbGxiYWNrcykpOwotCi0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJh
Y2tzKTsKLSAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW4tPmRhdGFiYXNlQ2FsbGJhY2tzKCkgPT0gY2FsbGJhY2tzKSB7Ci0gICAgICAgIG1f
cGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVj
dGlvbiB3YXMgY2xvc2VkLiIpKTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVs
ZWFzZSgpOwotICAgIH0KLQotICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDEpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0
b3IgdG8gcHJvY2VzcyBhIHBlbmRpbmcgb3BlbiBjYWxsCi0gICAgLy8gYW5kIGNhbGwgY2xvc2Us
IHJlZW50ZXJpbmcgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UuIFRoZW4gdGhlCi0gICAg
Ly8gYmFja2VuZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5n
IGl0cyBjb25uZWN0aW9uLCBhbmQKLSAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0
IGNhbGxlZCBjbG9zZS4KLSAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJv
Y2VlZCBpbiBjYXNlIG9mIHJlZW50cmFuY3kuCi0gICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5l
Y3Rpb24obV9jbG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7Ci0gICAgcHJvY2Vzc1BlbmRpbmdDYWxs
cygpOwotCi0gICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2Fs
bHMgY2FzZXMgYmVsb3cuCi0gICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5n
T3BlbkNhbGxzLnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7Ci0gICAg
ICAgIFRyYW5zYWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Ci0gICAgICAg
IFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9z
aW5nLiIpOwotICAgICAgICBmb3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFs
dWVzIGl0ID0gdHJhbnNhY3Rpb25zLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9u
cy52YWx1ZXMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPmFi
b3J0KGVycm9yKTsKLQotICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsK
LQotICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotCi0gICAgICAgIC8vIFRoaXMgY2hl
Y2sgc2hvdWxkIG9ubHkgYmUgZmFsc2UgaW4gdW5pdCB0ZXN0cy4KLSAgICAgICAgQVNTRVJUKG1f
ZmFjdG9yeSk7Ci0gICAgICAgIGlmIChtX2ZhY3RvcnkpCi0gICAgICAgICAgICBtX2ZhY3Rvcnkt
PnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChtX2lkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9p
ZCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0
cmFuc2FjdGlvbik7Ci0gICAgbV9kYXRhYmFzZS0+cmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RT
dG9yZUlkKTsKLX0KLQotdm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9U
UkFDRSgiRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVF9VTlVT
RUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0gICAgbV9kYXRhYmFzZS0+YWRkT2JqZWN0
U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZh
bGlkSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOwot
ICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0gICAgbV9kYXRh
YmFzZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gbV9wcmV2aW91c1ZlcnNpb247Ci0gICAgbV9kYXRh
YmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV9wcmV2aW91c0ludFZlcnNpb247Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTNi
ZmEwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbF9oCi0KLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJN
ZXRhZGF0YS5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBJREJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7Ci1jbGFzcyBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
IDogcHVibGljIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCRmFjdG9yeUJhY2tlbmRJbXBs
KiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFsIH5JREJEYXRh
YmFzZUJhY2tlbmRJbXBsKCk7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQg
PSAwOwotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0g
ICAgdm9pZCBhZGRPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50
NjRfdCBuZXdNYXhPYmplY3RTdG9yZUlkKTsKLSAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOwot
ICAgIHZvaWQgcmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpOwotCi0gICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3QgdmVyc2lvbik7Ci0gICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pOwotICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQotCi0gICAgLy8gSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwotICAgIHZpcnR1
YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2
b2lkIGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAgSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvci5nZXQoKTsgfQotICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHZvaWQgdHJhbnNhY3Rpb25G
aW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICB2b2lk
IHRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0
RmlyZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHks
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHB1
dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5k
ZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2VuZElt
cGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJGYWN0
b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwotCi0gICAg
Ym9vbCBvcGVuSW50ZXJuYWwoKTsKLSAgICB2b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7
Ci0gICAgc2l6ZV90IGNvbm5lY3Rpb25Db3VudCgpOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdD
YWxscygpOwotCi0gICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpOwotICAgIHZvaWQg
ZGVsZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgY2xh
c3MgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjsKLQotICAgIC8vIFdoZW4gYSAidmVyc2lvbmNoYW5n
ZSIgdHJhbnNhY3Rpb24gYWJvcnRzLCB0aGVzZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBvYmplY3Qg
aGllcmFyY2h5LgotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsKLQotICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEgbV9tZXRhZGF0YTsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgLy8g
VGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxp
ZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBj
b25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBs
PiBtX2ZhY3Rvcnk7Ci0KLSAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247Ci0KLSAgICB0eXBlZGVmIEhh
c2hNYXA8aW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+IFRyYW5zYWN0aW9uTWFw
OwotICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNhY3Rpb25zOwotCi0gICAgY2xhc3MgUGVuZGlu
Z09wZW5DYWxsOwotICAgIERlcXVlPE93blB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5n
T3BlbkNhbGxzOwotICAgIE93blB0cjxQZW5kaW5nT3BlbkNhbGw+IG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuOwotCi0gICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7Ci0gICAgRGVxdWU8T3duUHRy
PFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwotCi0gICAgdHlwZWRl
ZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxs
YmFja3NTZXQ7Ci0gICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1Nl
dDsKLQotICAgIGJvb2wgbV9jbG9zaW5nQ29ubmVjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGUxOTdj
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLQotI2lu
Y2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VF
eGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBNPgotc3RhdGljIHZvaWQgY2xlYW5XZWFrTWFwKEhhc2hN
YXA8SywgV2Vha1B0cjxNPiA+JiBtYXApCi17Ci0gICAgSGFzaE1hcDxLLCBXZWFrUHRyPE0+ID4g
b3RoZXI7Ci0gICAgb3RoZXIuc3dhcChtYXApOwotCi0gICAgdHlwZW5hbWUgSGFzaE1hcDxLLCBX
ZWFrUHRyPE0+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOwotICAgIHdo
aWxlIChpdGVyICE9IG90aGVyLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdGVyLT52YWx1ZS5nZXQo
KSkKLSAgICAgICAgICAgIG1hcC5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7Ci0gICAgICAg
ICsraXRlcjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29tcHV0ZUZpbGVJZGVudGlmaWVy
KFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciBsZXZlbERCRmlsZVN1ZmZpeFtdID0gIkAxIjsKLSAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4t
PmRhdGFiYXNlSWRlbnRpZmllcigpICsgbGV2ZWxEQkZpbGVTdWZmaXg7Ci19Ci0KLXN0YXRpYyBT
dHJpbmcgY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRp
ZmllcihzZWN1cml0eU9yaWdpbikgKyBuYW1lOwotfQotCi1JREJGYWN0b3J5QmFja2VuZEltcGw6
OklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLUlEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
fklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOjpyZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlm
aWVyKQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQmFja2VuZE1hcC5jb250YWlucyh1bmlxdWVJ
ZGVudGlmaWVyKSk7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAucmVtb3ZlKHVuaXF1ZUlkZW50
aWZpZXIpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1l
cyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyIpOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rv
cnkpOwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERC
LndlYmtpdEdldERhdGFiYXNlTmFtZXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXMgPSBiYWNraW5nU3RvcmUt
PmdldERhdGFiYXNlTmFtZXMoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGZvdW5kTmFtZXMuYmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5lbmQoKTsgKytp
dCkKLSAgICAgICAgZGF0YWJhc2VOYW1lcy0+YXBwZW5kKCppdCk7Ci0KLSAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyZWN0b3J5KQotewotICAgIElEQl9UUkFDRSgiSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxl
dGVEYXRhYmFzZSIpOwotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0
ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURC
RGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZp
bmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFw
LmVuZCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMgdG8gdGhl
IGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCi0gICAgICAgIC8vIGRhdGFiYXNlLgotICAg
ICAgICBpdC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQg
YmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0
b3J5KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9yIGluZGV4ZWRE
Qi5kZWxldGVEYXRhYmFzZS4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVl
SWRlbnRpZmllcik7Ci0gICAgaWYgKGRhdGFiYXNlQmFja2VuZCkgewotICAgICAgICBtX2RhdGFi
YXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgp
KTsKLSAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwot
ICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGNyZWF0aW5nIGRhdGFiYXNlIGJhY2tlbmQgZm9yIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZS4i
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBjb25zdCBTdHJpbmcg
ZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0
KCkpOwotICAgIGNvbnN0IGJvb2wgb3BlbkluTWVtb3J5ID0gZGF0YURpcmVjdG9yeS5pc0VtcHR5
KCk7Ci0KLSAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0
b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwotICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3Rv
cmVNYXAuZW5kKCkgJiYgaXQyLT52YWx1ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGl0Mi0+dmFs
dWUuZ2V0KCk7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7Ci0g
ICAgaWYgKG9wZW5Jbk1lbW9yeSkKLSAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0
b3JlOjpvcGVuSW5NZW1vcnkoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGZpbGVJZGVudGlmaWVyKTsK
LSAgICBlbHNlCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3Blbihz
ZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIpOwotCi0g
ICAgaWYgKGJhY2tpbmdTdG9yZSkgewotICAgICAgICBjbGVhbldlYWtNYXAobV9iYWNraW5nU3Rv
cmVNYXApOwotICAgICAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIsIGJh
Y2tpbmdTdG9yZS0+Y3JlYXRlV2Vha1B0cigpKTsKLSAgICAgICAgLy8gSWYgYW4gaW4tbWVtb3J5
IGRhdGFiYXNlLCBiaW5kIGxpZmV0aW1lIHRvIHRoaXMgZmFjdG9yeSBpbnN0YW5jZS4KLSAgICAg
ICAgaWYgKG9wZW5Jbk1lbW9yeSkKLSAgICAgICAgICAgIG1fc2Vzc2lvbk9ubHlCYWNraW5nU3Rv
cmVzLmFkZChiYWNraW5nU3RvcmUpOwotCi0gICAgICAgIC8vIEFsbCBiYWNraW5nIHN0b3JlcyBh
c3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0b3J5IHNob3VsZCBiZSBvZiB0aGUgc2FtZSB0eXBlLgot
ICAgICAgICBBU1NFUlQobV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXMuaXNFbXB0eSgpIHx8IG9w
ZW5Jbk1lbW9yeSk7Ci0KLSAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90IHRyYW5zYWN0
aW9uSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3BlbiIpOwotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKLSAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmll
ciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsK
LQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQ7Ci0g
ICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5k
TWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ID09IG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwot
ICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBiYWNraW5nIHN0b3JlIGZvciBpbmRleGVk
REIub3Blbi4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBk
YXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFj
a2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGRh
dGFiYXNlQmFja2VuZCkKLSAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlx
dWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNyZWF0aW5n
IGRhdGFiYXNlIGJhY2tlbmQgZm9yIGluZGV4ZWRkYi5vcGVuLiIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBp
dC0+dmFsdWU7Ci0KLSAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNr
cywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTY4MjAuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgSURCRmFj
dG9yeUJhY2tlbmRJbXBsX2gKLSNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbXBsX2gKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5n
TGlzdDsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDsKLQotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsIDogcHVibGljIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0
b3J5QmFja2VuZEltcGw+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCRmFj
dG9yeUJhY2tlbmRJbXBsKCk7Ci0KLSAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gd2VhayBwb2lu
dGVycy4KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0
cmluZyYgdW5pcXVlSWRlbnRpZmllcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VO
YW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2
aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLQotcHJvdGVjdGVkOgotICAgIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbCgpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwotICAg
IElEQkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFdlYWtQdHI8SURCQmFja2luZ1N0b3JlPiA+IElEQkJhY2tpbmdT
dG9yZU1hcDsKLSAgICBJREJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7Ci0KLSAg
ICBIYXNoU2V0PFJlZlB0cjxJREJCYWNraW5nU3RvcmU+ID4gbV9zZXNzaW9uT25seUJhY2tpbmdT
dG9yZXM7Ci0KLSAgICAvLyBPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSBzaG91bGQg
ZXhpc3QgYXQgYW55IGdpdmVuIHRpbWUuCi0gICAgc3RhdGljIElEQkZhY3RvcnlCYWNrZW5kSW1w
bCogaWRiRmFjdG9yeUJhY2tlbmRJbXBsOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZS5jcHAKaW5kZXggOTk1ZTgzZC4uOTYzNDRlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmNwcApAQCAtMjgsMTUgKzI4LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKIAotI2luY2x1ZGUgIklE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oIgotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
KyNpZiBVU0UoTEVWRUxEQikKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZExldmVsREIuaCIK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQogewot
ICAgIHJldHVybiBJREJGYWN0b3J5QmFja2VuZEltcGw6OmNyZWF0ZSgpOworICAgIC8vIEZJWE1F
OiBOZWVkIGEgYmV0dGVyIHBsYXRmb3JtIGFic3RyYWN0aW9uIGhlcmUsIGJ1dCB0aGlzIHN0b3Ag
Z2FwIHdpbGwgd29yayBmb3Igbm93LgorI2lmIFVTRShMRVZFTERCKQorICAgIHJldHVybiBJREJG
YWN0b3J5QmFja2VuZExldmVsREI6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNl
bmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzVlZDBjLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tz
LmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURC
S2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdy
aXRlcjo6dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5
cywgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBTdHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QK
LXsKLSAgICBjYW5BZGRLZXlzID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIG9rID0gYWRkaW5nS2V5QWxs
b3dlZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5LCBjYW5BZGRLZXlz
KTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFjYW5BZGRLZXlzKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQotICAgICAg
ICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBr
ZXkgdG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1
bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
bkFkZEtleXMgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0Ci17
Ci0gICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBv
ayA9IGJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCBy
ZWNvcmRJZGVudGlmaWVyKTsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJl
ZW4gdmVyaWZpZWQgYXMgYSB2YWxpZCB3cml0ZSBkdXJpbmcgdmVyaWZ5SW5kZXhLZXlzLgotICAg
ICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgfQotfQotCi1ib29sIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5
LCBib29sJiBhbGxvd2VkKSBjb25zdAotewotICAgIGFsbG93ZWQgPSBmYWxzZTsKLSAgICBpZiAo
IW1faW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKLSAgICAgICAgYWxsb3dlZCA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFy
eUtleTsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IGJhY2tpbmdTdG9y
ZS5rZXlFeGlzdHNJbkluZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAqaW5kZXhLZXksIGZvdW5kUHJpbWFyeUtleSwgZm91bmQpOwotICAgIGlmICgh
b2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWZvdW5kIHx8IChwcmltYXJ5S2V5
ICYmIGZvdW5kUHJpbWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkpCi0gICAgICAgIGFsbG93
ZWQgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4
V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21w
bGV0ZWQpCi17Ci0gICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgp
KTsKLSAgICBjb21wbGV0ZWQgPSBmYWxzZTsKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGluZGV4S2V5
TWFwLmFkZChpbmRleElkc1tpXSwgaW5kZXhLZXlzW2ldKTsKLQotICAgIGZvciAoSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUu
aW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2l0KSB7
Ci0KLSAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+dmFsdWU7Ci0K
LSAgICAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGlu
ZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKLSAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlz
IHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwg
a2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBh
IGtleS4KLSAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCAmJiAoaW5kZXgua2V5UGF0aCA9PSBv
YmplY3RTdG9yZS5rZXlQYXRoKSkKLSAgICAgICAgICAgIGtleXMuYXBwZW5kKHByaW1hcnlLZXkp
OwotCi0gICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3
IEluZGV4V3JpdGVyKGluZGV4LCBrZXlzKSkpOwotICAgICAgICBib29sIGNhbkFkZEtleXMgPSBm
YWxzZTsKLSAgICAgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gaW5kZXhXcml0ZXItPnZl
cmlmeUluZGV4S2V5cygqYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUuaWQsIGluZGV4LmlkLCBjYW5BZGRL
ZXlzLCBwcmltYXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICBpZiAoIWJhY2tp
bmdTdG9yZVN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
Y2FuQWRkS2V5cykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGluZGV4V3Jp
dGVycy0+YXBwZW5kKGluZGV4V3JpdGVyLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgY29tcGxl
dGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KQotewotICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQw
OTkyTEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4K
LSAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXI7Ci0gICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS0+
Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3VycmVudE51bWJlcik7Ci0g
ICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXRLZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyIik7Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQo
KTsKLSAgICB9Ci0gICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8IGN1cnJlbnROdW1iZXIgPiBt
YXhHZW5lcmF0b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgp
OwotCi0gICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOwotfQot
Ci1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQot
ewotICAgIEFTU0VSVChrZXkgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsK
LSAgICByZXR1cm4gYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkp
KSArIDEsIGNoZWNrQ3VycmVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU0Y2IxNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGxfaAotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgi
Ci0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQktleVBh
dGguaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7Ci1zdHJ1Y3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YTsKLQotLy8gRklYTUU6IHRoaXMgbmFtZXNwYWNlIGlzIHRlbXBvcmFy
eSB1bnRpbCB3ZSBtb3ZlIGl0cyBjb250ZW50cyBvdXQgdG8gdGhlaXIgb3duIGhvbWUuCi1uYW1l
c3BhY2UgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCB7Ci0KLSAgICBjbGFzcyBJbmRleFdyaXRl
ciB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICAgICAgOiBtX2luZGV4TWV0YWRh
dGEoaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgSW5kZXhXcml0ZXIoY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwgY29uc3QgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpJbmRleEtleXMmIGluZGV4S2V5cykKLSAgICAgICAgICAgIDogbV9pbmRl
eE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4
S2V5cykKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFj
a2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFk
ZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAsIFN0cmluZyogZXJyb3JNZXNzYWdl
ID0gMCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgICAgIHZvaWQgd3JpdGVJbmRl
eEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiwgSURCQmFja2lu
Z1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3RvcmUmLCBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBw
cmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAg
ICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci0gICAgICAgIElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwotICAgIH07
Ci0KLSAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJv
b2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiwgVmVjdG9y
PE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2Fn
ZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICBQYXNzUmVmUHRy
PElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
KiwgYm9vbCBjaGVja0N1cnJlbnQpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKLQotI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjZjI2ZS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFj
a2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFj
a3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQlRy
YWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlLCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKLXsKLSAgICBIYXNoU2V0PGludDY0X3Q+IG9iamVjdFN0
b3JlSGFzaFNldDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRzLnNp
emUoKTsgKytpKQotICAgICAgICBvYmplY3RTdG9yZUhhc2hTZXQuYWRkKG9iamVjdFN0b3JlSWRz
W2ldKTsKLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bChpZCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUsIGRhdGFiYXNlKSk7Ci19
Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwo
aW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBj
b25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGUgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAgOiBt
X2lkKGlkKQotICAgICwgbV9vYmplY3RTdG9yZUlkcyhvYmplY3RTdG9yZUlkcykKLSAgICAsIG1f
bW9kZShtb2RlKQotICAgICwgbV9zdGF0ZShVbnVzZWQpCi0gICAgLCBtX2NvbW1pdFBlbmRpbmco
ZmFsc2UpCi0gICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgLCBtX2RhdGFiYXNlKGRh
dGFiYXNlKQotICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+YmFja2luZ1N0b3JlKCkuZ2V0
KCkpCi0gICAgLCBtX3Rhc2tUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
dGFza1RpbWVyRmlyZWQpCi0gICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCi17Ci0g
ICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJl
IGFkb3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0KLSAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMp
OwotfQotCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCgpCi17Ci0gICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVj
dCB0byBnZXQgZGVsZXRlZCB1bnRpbCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgot
ICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpU
YXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxPcGVy
YXRpb24+IGFib3J0VGFzaykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHR5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpOb3JtYWxUYXNrKQotICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgZWxz
ZQotICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBwZW5kKHRhc2spOwotCi0gICAgaWYg
KGFib3J0VGFzaykKLSAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7
Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBVbnVzZWQpCi0gICAgICAgIHN0YXJ0KCk7Ci0gICAgZWxz
ZSBpZiAobV9zdGF0ZSA9PSBSdW5uaW5nICYmICFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6YWJvcnQoKQotewotICAgIGFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
KHVua25vd24gY2F1c2UpIikpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCIpOwotICAgIGlmIChtX3N0YXRl
ID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHdhc1J1bm5pbmcgPSBt
X3N0YXRlID09IFJ1bm5pbmc7Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBv
YmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gYWJvcnQg
c3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBv
dXJzZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAg
UmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgbV9z
dGF0ZSA9IEZpbmlzaGVkOwotICAgIG1fdGFza1RpbWVyLnN0b3AoKTsKLQotICAgIGlmICh3YXNS
dW5uaW5nKQotICAgICAgICBtX3RyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0KLSAgICAvLyBSdW4g
dGhlIGFib3J0IHRhc2tzLCBpZiBhbnkuCi0gICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlz
RW1wdHkoKSkgewotICAgICAgICBPd25QdHI8T3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVl
dWUudGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5wZXJmb3JtKDApOwotICAgIH0KLQotICAg
IC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJl
bGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUg
c2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFj
a2luZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNy
aXRpY2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX3RyYW5zYWN0aW9uLnJlc2V0
KCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0
ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCi0gICAgLy8gdGhlIHRyYW5z
YWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVj
dGlvbnMuCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5p
c2hUcmFuc2FjdGlvbih0aGlzKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uRmluaXNoZWQodGhpcyk7Ci0KLSAgICBpZiAobV9jYWxsYmFja3MpCi0gICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkFib3J0KG1faWQsIGVycm9yKTsKLQotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOwotCi0gICAgbV9kYXRhYmFzZSA9IDA7Ci19
Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6aXNUYXNrUXVldWVFbXB0eSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5pc0VtcHR5KCkgJiYgbV90
YXNrUXVldWUuaXNFbXB0eSgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Omhhc1BlbmRpbmdUYXNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRp
dmVFdmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHkoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpyZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqIGN1
cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tl
bmRJbXBsKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpydW4oKQotewotICAgIC8vIFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IgaGFzIHN0YXJ0ZWQgdGhpcyB0cmFuc2FjdGlvbi4gU2NoZWR1bGUg
YSB0aW1lcgotICAgIC8vIHRvIHByb2Nlc3MgdGhlIGZpcnN0IHRhc2suCi0gICAgQVNTRVJUKG1f
c3RhdGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJU
KCFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKLQotICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCgpCi17Ci0g
ICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKLQotICAgIG1fc3RhdGUgPSBTdGFydFBlbmRp
bmc7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRy
YW5zYWN0aW9uKHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlz
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQotewotICAg
IElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0Iik7Ci0KLSAgICAv
LyBJbiBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1ZXN0ZWQgYSBj
b21taXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5Ci0gICAgLy8gYmVlbiBpbml0aWF0ZWQgYXN5
bmNocm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVzZWQgfHwgbV9z
dGF0ZSA9PSBSdW5uaW5nKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8g
RnJvbnQtZW5kIGhhcyByZXF1ZXN0ZWQgYSBjb21taXQsIGJ1dCB0aGVyZSBtYXkgYmUgdGFza3Mg
bGlrZSBjcmVhdGVJbmRleCB3aGljaAotICAgIC8vIGFyZSBjb25zaWRlcmVkIHN5bmNocm9ub3Vz
IGJ5IHRoZSBmcm9udC1lbmQgYnV0IGFyZSBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuCi0gICAg
aWYgKGhhc1BlbmRpbmdUYXNrcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgbGFz
dCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1p
bmcgdGhlCi0gICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNl
bGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0
aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcm90
ZWN0KCp0aGlzKTsKLQotICAgIGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7Ci0gICAg
bV9zdGF0ZSA9IEZpbmlzaGVkOwotCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90
cmFuc2FjdGlvbi5jb21taXQoKTsKLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzICho
ZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tz
Ci0gICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSBy
ZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBi
ZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMo
KTsKLSAgICBtX3RyYW5zYWN0aW9uLnJlc2V0KCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbnMgbXVz
dCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90
aWZpZWQsIGFzCi0gICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3Bl
cmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCi0gICAgaWYgKCF1bnVzZWQpCi0gICAg
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNh
Y3Rpb24odGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsK
LQotICAgIGlmIChjb21taXR0ZWQpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUo
bV9pZCk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0
ZUZpcmVkKHRoaXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0
KG1faWQsIElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7Ci0g
ICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMp
OwotICAgIH0KLQotICAgIG1fZGF0YWJhc2UgPSAwOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+KikKLXsKLSAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tU
aW1lckZpcmVkIik7Ci0gICAgQVNTRVJUKCFpc1Rhc2tRdWV1ZUVtcHR5KCkpOwotCi0gICAgaWYg
KG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24uYmVnaW4o
KTsKLSAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxhc3Qg
cmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5n
IHRoZQotICAgIC8vIHRhc2tzLiBUYWtlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIHRo
aXMgb2JqZWN0IGFsaXZlIHNvIHRoYXQKLSAgICAvLyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25k
aXRpb25zIGNhbiBiZSBjaGVja2VkLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFRhc2tRdWV1ZSogdGFza1F1ZXVlID0gbV9wZW5kaW5n
UHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7
Ci0gICAgd2hpbGUgKCF0YXNrUXVldWUtPmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVk
KSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgICAgICBPd25QdHI8
T3BlcmF0aW9uPiB0YXNrKHRhc2tRdWV1ZS0+dGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5w
ZXJmb3JtKHRoaXMpOwotCi0gICAgICAgIC8vIEV2ZW50IGl0c2VsZiBtYXkgY2hhbmdlIHdoaWNo
IHF1ZXVlIHNob3VsZCBiZSBwcm9jZXNzZWQgbmV4dC4KLSAgICAgICAgdGFza1F1ZXVlID0gbV9w
ZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNr
UXVldWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdl
IGhhdmVuJ3QgYWxyZWFkeSBjb21taXR0ZWQvYWJvcnRlZCwKLSAgICAvLyBhbmQgdGhlIGZyb250
LWVuZCByZXF1ZXN0ZWQgYSBjb21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgotICAgIGlm
ICghaGFzUGVuZGluZ1Rhc2tzKCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBl
bmRpbmcpCi0gICAgICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmNsb3NlT3BlbkN1cnNvcnMoKQotewotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JC
YWNrZW5kSW1wbCo+OjppdGVyYXRvciBpID0gbV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1f
b3BlbkN1cnNvcnMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+Y2xvc2UoKTsKLSAgICBtX29w
ZW5DdXJzb3JzLmNsZWFyKCk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTYxOGZhMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCi0jZGVm
aW5lIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwotY2xhc3MgSURCQ3Vyc29yQmFja2Vu
ZEltcGw7Ci1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLQotY2xhc3MgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKLSAgICB2
b2lkIGNvbW1pdCgpOwotCi0gICAgY2xhc3MgT3BlcmF0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHZpcnR1YWwgfk9wZXJhdGlvbigpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKikgPSAwOwotICAgIH07Ci0KLSAgICB2b2lkIGFi
b3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotICAgIHZvaWQgcnVuKCk7Ci0gICAg
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3RTdG9yZUlkczsgfQotICAgIHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8T3BlcmF0
aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyBz
Y2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0YXNr
LCBhYm9ydFRhc2spOyB9Ci0gICAgdm9pZCBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+LCBQYXNzT3duUHRyPE9w
ZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7Ci0gICAgdm9pZCByZWdpc3Rlck9wZW5DdXJz
b3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29y
KElEQkN1cnNvckJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSB7
IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQotICAgIHZvaWQgZGlkQ29tcGxldGVQcmVl
bXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVu
ZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuICZtX3RyYW5zYWN0aW9u
OyB9Ci0gICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5n
ZXQoKTsgfQotCi1wcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaW50NjRf
dCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50
NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCopOwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVudXNlZCwg
Ly8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KLSAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBF
bnF1ZXVlZCB0YXNrcywgYnV0IGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFy
dGVkLgotICAgICAgICBSdW5uaW5nLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0
ZWQgYnV0IG5vdCB5ZXQgZmluaXNoZWQuCi0gICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJv
cnRlZCBvciBjb21taXR0ZWQuCi0gICAgfTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLQotICAgIGJv
b2wgaXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0OwotICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+Kik7Ci0gICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBjb25zdCBp
bnQ2NF90IG1faWQ7Ci0gICAgY29uc3QgSGFzaFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRz
OwotICAgIGNvbnN0IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1fbW9kZTsKLQotICAgIFN0
YXRlIG1fc3RhdGU7Ci0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gbV9kYXRhYmFzZTsKLQotICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPE9wZXJhdGlv
bj4gPiBUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOwotICAgIFRhc2tRdWV1
ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7
Ci0KLSAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247Ci0KLSAg
ICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFk
LgotICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVyOwotICAg
IGludCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JC
YWNrZW5kSW1wbCo+IG1fb3BlbkN1cnNvcnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZmY2Q4ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLQotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1QYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCkpOwotfQotCi1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKLXsKLX0KLQotSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6fklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKQotewotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OmRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24s
IHRyYW5zYWN0aW9uKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRT
dGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQot
ewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotCi0g
ICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAgICBwcm9jZXNzU3Rh
cnRlZFRyYW5zYWN0aW9ucygpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6
OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
OwotCi0gICAgaWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkg
ewotICAgICAgICBBU1NFUlQoIW1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbikpOwotICAgICAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24p
OwotICAgIH0gZWxzZSBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uKSkKLSAgICAgICAgbV9zdGFydGVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7
Ci0KLSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotCi0gICAgcHJvY2Vz
c1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLS8vIFZlcmlmaWVz
IGludGVybmFsIGNvbnNpc3RpZW5jeSB3aGlsZSByZXR1cm5pbmcgd2hldGhlciBhbnl0aGluZyBp
cyBmb3VuZC4KLWJvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6aXNBY3RpdmUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwotICAgIGlmIChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uKSkgewotICAgICAgICBBU1NFUlQoIWZvdW5kKTsKLSAgICAgICAg
Zm91bmQgPSB0cnVlOwotICAgIH0KLSAgICBBU1NFUlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICByZXR1cm4gZm91bmQ7Ci19Ci0jZW5kaWYKLQot
dm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9u
cygpCi17Ci0gICAgaWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwg
KCptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKSktPm1vZGUoKSAhPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMu
YmVnaW4oKTsKLSAgICB3aGlsZSAoaXQgIT0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuZW5kKCkpIHsK
LSAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSAqaXQ7Ci0g
ICAgICAgICsraXQ7Ci0gICAgICAgIGlmIChjYW5SdW5UcmFuc2FjdGlvbih0cmFuc2FjdGlvbikp
IHsKLSAgICAgICAgICAgIG1fcXVldWVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7
Ci0gICAgICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAg
ICAgICAgICAgIHRyYW5zYWN0aW9uLT5ydW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3Rh
dGljIGJvb2wgZG9TY29wZXNPdmVybGFwKGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlMSwg
Y29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUyKQotewotICAgIGZvciAoSGFzaFNldDxpbnQ2
NF90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY29wZTEuYmVnaW4oKTsgaXQgIT0gc2NvcGUxLmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChzY29wZTIuY29udGFpbnMoKml0KSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgc3dpdGNoICh0cmFuc2FjdGlvbi0+bW9k
ZSgpKSB7Ci0gICAgY2FzZSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZToKLSAg
ICAgICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rpb25zLnNpemUoKSA9PSAxKTsKLSAgICAgICAg
QVNTRVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5OgotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRXcml0
ZToKLSAgICAgICAgZm9yIChIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9z
dGFydGVkVHJhbnNhY3Rpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCppdCkt
Pm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYmIGRvU2NvcGVzT3Zl
cmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKExpc3RIYXNoU2V0PElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRy
YW5zYWN0aW9ucy5iZWdpbigpOyAqaXQgIT0gdHJhbnNhY3Rpb247ICsraXQpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSk7Ci0gICAgICAgICAg
ICBpZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYm
IGRvU2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi19OwotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGNmZmIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3JfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLQotLy8gVHJh
bnNhY3Rpb25zIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KLWNs
YXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwg
fklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKLQotICAgIC8vIENhbGxlZCBieSB0cmFuc2Fj
dGlvbnMgYXMgdGhleSBzdGFydCBhbmQgZmluaXNoLgotICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotICAgIHZvaWQgZGlkU3RhcnRUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBkaWRGaW5pc2hU
cmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgYm9vbCBpc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0jZW5kaWYK
LQotcHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0KLSAgICB2b2lk
IHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Ci0gICAgYm9vbCBjYW5SdW5UcmFuc2FjdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0KLSAgICAvLyBUaGlzIGlzIGp1c3QgYW4g
ZWZmaWNpZW50IHdheSB0byBrZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4KLSAg
ICBIYXNoTWFwPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gPiBtX3RyYW5zYWN0aW9uczsKLSAgICAvLyBUcmFuc2FjdGlvbnMgaW4g
ZGlmZmVyZW50IHN0YXRlcyBhcmUgZ3JvdXBlZCBiZWxvdy4KLSAgICBMaXN0SGFzaFNldDxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaFNl
dDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0
b3JlTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCmluZGV4IDQ4ZTBkMzEuLjUyNTA1NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcApAQCAtMjQsOSArMjQsOSBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCiAKLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAK
ICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpA
QCAtMTk5Myw0ICsxOTkzLDQgQEAgdm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpy
b2xsYmFjaygpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBV
U0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiNzc3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qi5oCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAor
I2RlZmluZSBJREJCYWNraW5nU3RvcmVfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIFVTRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCTWV0
YWRhdGEuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExldmVsREJDb21wYXJhdG9yOwor
Y2xhc3MgTGV2ZWxEQkRhdGFiYXNlOworY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOworY2xhc3Mg
SURCS2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNz
IFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgTGV2ZWxEQkZhY3RvcnkgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkxldmVsREJGYWN0b3J5KCkgeyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPExldmVs
REJEYXRhYmFzZT4gb3BlbkxldmVsREIoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgTGV2
ZWxEQkNvbXBhcmF0b3IqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlc3Ryb3lMZXZlbERCKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUpID0gMDsKK307CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZSA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZT4geworcHVibGljOgorICAgIGNsYXNz
IFRyYW5zYWN0aW9uOworCisgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2
ZWxEQkZhY3RvcnkqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9w
ZW5Jbk1lbW9yeShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuSW5NZW1vcnkoU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7Cisg
ICAgV2Vha1B0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dl
YWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5n
PiBnZXREYXRhYmFzZU5hbWVzKCk7CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiwgYm9vbCYgc3Vj
Y2VzcykgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBp
bnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOworICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgYm9vbCBnZXRPYmplY3RTdG9y
ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1h
cCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3Rv
cmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIGNsYXNzIFJlY29y
ZElkZW50aWZpZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRJZGVudGlm
aWVyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9y
PGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1h
cnlLZXkpLCBtX3ZlcnNpb24odmVyc2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgp
KTsgfQorICAgICAgICBSZWNvcmRJZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJz
aW9uKC0xKSB7IH0KKworICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBj
b25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICAgICAgdm9pZCByZXNldChjb25zdCBWZWN0
b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgeyBtX3ByaW1hcnlLZXkgPSBw
cmltYXJ5S2V5OyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFy
IHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2YgdGhlIGtleS4KKyAgICAgICAg
aW50NjRfdCBtX3ZlcnNpb247CisgICAgfTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIHJlY29yZCkgV0FS
Tl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFJlY29y
ZElkZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGNsZWFy
T2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmly
dHVhbCBib29sIGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50
aWZpZXImKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGdldEtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJyZW50TnVtYmVy
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJv
b2wgY2hlY2tDdXJyZW50KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNv
cmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VO
VVNFRF9SRVRVUk47CisKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBXQVJOX1VOVVNFRF9SRVRVUk47
CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0
YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkgV0FSTl9V
TlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8
SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5LCBib29sJiBleGlzdHMpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKKworICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4geworICAg
IHB1YmxpYzoKKyAgICAgICAgZW51bSBJdGVyYXRvclN0YXRlIHsKKyAgICAgICAgICAgIFJlYWR5
ID0gMCwKKyAgICAgICAgICAgIFNlZWsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQ3Vy
c29yT3B0aW9ucyB7CisgICAgICAgICAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAgICAgICAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlSWQ7CisgICAgICAgICAgICBpbnQ2NF90IGluZGV4SWQ7Cisg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gbG93S2V5OworICAgICAgICAgICAgYm9vbCBsb3dPcGVu
OworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7CisgICAgICAgICAgICBib29sIGhp
Z2hPcGVuOworICAgICAgICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICAgICAgYm9vbCB1bmlx
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0
IHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgICAgICBib29sIGNvbnRpbnVlRnVuY3Rpb24o
Y29uc3QgSURCS2V5KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVrKTsKKyAgICAgICAgYm9vbCBh
ZHZhbmNlKHVuc2lnbmVkIGxvbmcpOworICAgICAgICBib29sIGZpcnN0U2VlaygpOworCisgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IGNsb25lKCkgPSAwOworICAgICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50S2V5OyB9CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVl
KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZpZXImIHJl
Y29yZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KKyAg
ICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3Vy
cmVudFJvdygpID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ3Vyc29yKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlv
bnMpCisgICAgICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICAg
ICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgZXhwbGljaXQgQ3Vyc29yKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKiBv
dGhlcik7CisKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElE
QktleSYpID0gMDsKKworICAgICAgICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OworICAgICAg
ICBib29sIGhhdmVFbnRlcmVkUmFuZ2UoKSBjb25zdDsKKworICAgICAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIG1fdHJhbnNhY3Rpb247CisgICAgICAgIGNvbnN0IEN1cnNvck9wdGlvbnMgbV9jdXJz
b3JPcHRpb25zOworI2lmIFVTRShMRVZFTERCKQorICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJh
dG9yPiBtX2l0ZXJhdG9yOworI2VuZGlmCisgICAgICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVu
dEtleTsKKyAgICAgICAgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIG1fcmVjb3Jk
SWRlbnRpZmllcjsKKyAgICB9OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Bl
bk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24pOworCisgICAgY2xhc3MgVHJhbnNhY3Rpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgZXhwbGljaXQgVHJhbnNhY3Rpb24oSURCQmFja2luZ1N0b3JlKik7CisgICAgICAg
IHZvaWQgYmVnaW4oKTsKKyAgICAgICAgYm9vbCBjb21taXQoKTsKKyAgICAgICAgdm9pZCByb2xs
YmFjaygpOworICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9i
YWNraW5nU3RvcmUgPSAwOworI2lmIFVTRShMRVZFTERCKQorICAgICAgICAgICAgbV90cmFuc2Fj
dGlvbiA9IDA7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQorICAgICAgICB7CisjaWYgVVNFKExFVkVMREIpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7Cisj
ZWxzZQorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24p
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgSURCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyNpZiBV
U0UoTEVWRUxEQikKKyAgICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2Fj
dGlvbjsKKyNlbmRpZgorICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBJREJCYWNraW5nU3RvcmUo
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBh
c3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+KTsKKworICAgIC8vIFNob3VsZCBvbmx5IHVzZWQg
Zm9yIG1vY2tpbmcuCisgICAgSURCQmFja2luZ1N0b3JlKCk7CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNv
bXBhcmF0b3I+KTsKKworICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVk
UHJpbWFyeUtleSwgYm9vbCYgZm91bmQpOworICAgIGJvb2wgZ2V0SW5kZXhlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW5kZXhNYXAqKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OworCisgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsKKyAgICBPd25QdHI8TGV2ZWxE
QkNvbXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKKyAgICBXZWFrUHRyRmFjdG9yeTxJREJCYWNraW5n
U3RvcmU+IG1fd2Vha0ZhY3Rvcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRp
ZiAvLyBJREJCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERC
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM2N2Q3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJD
dXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCIKKworI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklE
QkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VF
cnJvci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURC
S2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpDdXJzb3JJ
dGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6
T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRMZXZlbERCPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIGtleSwgY2FsbGJhY2tzKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqKTsKK3ByaXZhdGU6CisgICAgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZExldmVsREI+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2N1cnNvcihj
dXJzb3IpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxi
YWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERC
PiBtX2N1cnNvcjsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2tleTsKKyAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERC
OjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kTGV2ZWxEQj4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKik7Citwcml2YXRlOgorICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQj4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1
cnNvcikKKyAgICAgICAgLCBtX2NvdW50KGNvdW50KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZl
bERCPiBtX2N1cnNvcjsKKyAgICB1bnNpZ25lZCBsb25nIG1fY291bnQ7CisgICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kTGV2
ZWxEQjo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjdXJzb3IsIGludCBudW1iZXJUb0Zl
dGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbihjdXJz
b3IsIG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIEN1
cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZExldmVsREI+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1f
bnVtYmVyVG9GZXRjaChudW1iZXJUb0ZldGNoKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxi
YWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERC
PiBtX2N1cnNvcjsKKyAgICBpbnQgbV9udW1iZXJUb0ZldGNoOworICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworSURCQ3Vyc29yQmFja2VuZExldmVsREI6OklEQkN1
cnNvckJhY2tlbmRMZXZlbERCKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1
cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgOiBtX3Rhc2tUeXBl
KHRhc2tUeXBlKQorICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgLCBtX2RhdGFi
YXNlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICwgbV9jdXJz
b3IoY3Vyc29yKQorICAgICwgbV9jbG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2FjdGlvbi0+
cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6
fklEQkN1cnNvckJhY2tlbmRMZXZlbERCKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lz
dGVyT3BlbkN1cnNvcih0aGlzKTsKK30KKworCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERC
Ojpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIElEQl9UUkFD
RSgiSURCQ3Vyc29yQmFja2VuZExldmVsREI6OmNvbnRpbnVlIik7CisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBrZXksIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERC
OjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29y
QmFja2VuZExldmVsREI6OmFkdmFuY2UiKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEN1
cnNvckFkdmFuY2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBjb3VudCwgY2FsbGJhY2tzKSk7Cit9
CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZExldmVsREI6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246
OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopCit7CisgICAgSURCX1RSQUNF
KCJDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7CisgICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3Ig
fHwgIW1fY3Vyc29yLT5tX2N1cnNvci0+YWR2YW5jZShtX2NvdW50KSkgeworICAgICAgICBtX2N1
cnNvci0+bV9jdXJzb3IgPSAwOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRp
Y19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFy
eUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZExl
dmVsREI6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCKikKK3sKKyAgICBJREJfVFJBQ0UoIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlv
biIpOworICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3It
PmNvbnRpbnVlRnVuY3Rpb24obV9rZXkuZ2V0KCkpKSB7CisgICAgICAgIG1fY3Vyc29yLT5tX2N1
cnNvciA9IDA7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hh
cmVkQnVmZmVyKj4oMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhtX2N1cnNvci0+a2V5KCksIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIG1f
Y3Vyc29yLT52YWx1ZSgpKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6ZGVs
ZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0
aW9uQ29kZSYpCit7CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6ZGVs
ZXRlIik7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uUmVhZE9ubHkpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJ
REJLZXlSYW5nZTo6Y3JlYXRlKG1fY3Vyc29yLT5wcmltYXJ5S2V5KCkpOworICAgIG1fZGF0YWJh
c2UtPmRlbGV0ZVJhbmdlKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwga2V5
UmFuZ2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tl
bmRMZXZlbERCOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpwcmVmZXRjaENvbnRpbnVlIik7CisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlv
bk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOworfQor
Cit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKikKK3sKKyAgICBJ
REJfVFJBQ0UoIkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uIik7CisKKyAgICBWZWN0
b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+
ID4gZm91bmRQcmltYXJ5S2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gPiBm
b3VuZFZhbHVlczsKKworICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3IpCisgICAgICAgIG1fY3Vy
c29yLT5tX3NhdmVkQ3Vyc29yID0gbV9jdXJzb3ItPm1fY3Vyc29yLT5jbG9uZSgpOworCisgICAg
Y29uc3Qgc2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7CisgICAgc2l6
ZV90IHNpemVFc3RpbWF0ZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtYmVy
VG9GZXRjaDsgKytpKSB7CisgICAgICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1
cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpIHsKKyAgICAgICAgICAgIG1fY3Vy
c29yLT5tX2N1cnNvciA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvdW5kS2V5cy5hcHBlbmQobV9jdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAg
IGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgp
KTsKKworICAgICAgICBzd2l0Y2ggKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUpIHsKKyAgICAgICAg
Y2FzZSBJbmRleGVkREI6OkN1cnNvcktleU9ubHk6CisgICAgICAgICAgICBmb3VuZFZhbHVlcy5h
cHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbmRleGVkREI6OkN1cnNvcktleUFuZFZhbHVlOgorICAgICAgICAgICAgc2l6ZUVz
dGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS0+c2l6ZSgpOworICAgICAgICAg
ICAgZm91bmRWYWx1ZXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+
bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAgc2l6ZUVzdGltYXRlICs9
IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsKKworICAg
ICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKCFmb3VuZEtleXMuc2l6ZSgpKSB7CisgICAgICAgIG1fY2Fs
bGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRj
aChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtleXMsIGZvdW5kVmFsdWVzKTsKK30KKwordm9pZCBJ
REJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6cHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMs
IGludCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpwcmVmZXRj
aFJlc2V0Iik7CisgICAgbV9jdXJzb3IgPSBtX3NhdmVkQ3Vyc29yOworICAgIG1fc2F2ZWRDdXJz
b3IgPSAwOworCisgICAgaWYgKG1fY2xvc2VkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
Y3Vyc29yKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZFByZWZldGNoZXM7ICsr
aSkgeworICAgICAgICAgICAgYm9vbCBvayA9IG1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKCk7
CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZExldmVsREI6OmNsb3NlKCkKK3sKKyAgICBJREJfVFJB
Q0UoIklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpjbG9zZSIpOworICAgIG1fY2xvc2VkID0gdHJ1
ZTsKKyAgICBtX2N1cnNvci5jbGVhcigpOworICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzc3MTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNv
ckJhY2tlbmRMZXZlbERCLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBJREJD
dXJzb3JCYWNrZW5kTGV2ZWxEQl9oCisjZGVmaW5lIElEQkN1cnNvckJhY2tlbmRMZXZlbERCX2gK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1
ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOworY2xhc3Mg
SURCS2V5UmFuZ2U7CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERCIDogcHVibGljIElE
QkN1cnNvckJhY2tlbmRJbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2Vu
ZExldmVsREIoY3Vyc29yLCBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7CisgICAgfQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjcmVhdGUoUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUg
Y3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlw
ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29y
QmFja2VuZExldmVsREIoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24s
IG9iamVjdFN0b3JlSWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+SURCQ3Vyc29yQmFja2VuZExl
dmVsREIoKTsKKworICAgIC8vIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UKKyAgICB2aXJ0dWFs
IHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hDb250aW51ZShpbnQg
bnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQg
dW51c2VkUHJlZmV0Y2hlcyk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNh
bGxiYWNrKCkgeyB9CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1
cm4gbV9jdXJzb3ItPmtleSgpOyB9CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXko
KSBjb25zdCB7IHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOyB9CisgICAgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJ
bmRleGVkREI6OkN1cnNvcktleU9ubHkpID8gMCA6IG1fY3Vyc29yLT52YWx1ZSgpOyB9CisgICAg
dm9pZCBjbG9zZSgpOworCitwcml2YXRlOgorICAgIElEQkN1cnNvckJhY2tlbmRMZXZlbERCKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBJbmRleGVkREI6OkN1cnNvclR5cGUs
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIqLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworCisgICAgY2xhc3MgQ3Vyc29y
SXRlcmF0aW9uT3BlcmF0aW9uOworICAgIGNsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb247Cisg
ICAgY2xhc3MgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb247CisKKyAgICBJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7CisgICAgSW5kZXhlZERC
OjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQj4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQj4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJZDsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJz
b3I7IC8vIE11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgorICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsgLy8gTXVzdCBiZSBkZXN0
cm95ZWQgYmVmb3JlIG1fdHJhbnNhY3Rpb24uCisKKyAgICBib29sIG1fY2xvc2VkOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZExldmVsREJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5OWRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQi5jcHAKQEAgLTAsMCArMSwxMzg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RT
dG9yZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yTGV2ZWxEQi5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVN
ZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9i
amVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShv
YmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKK307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJh
dGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVN
ZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAg
fQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
KTsKK3ByaXZhdGU6CisgICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5n
U3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRh
dGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1f
YmFja2luZ1N0b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RT
dG9yZU1ldGFkYXRhOworfTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVy
c2lvbkNoYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
OjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihkYXRhYmFzZSwgdHJh
bnNhY3Rpb25JZCwgdmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOworICAg
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
Kik7Citwcml2YXRlOgorICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBp
bnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICA6
IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0
aW9uSWQpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxs
YmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCPiBtX2RhdGFiYXNlOworICAgIGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGludDY0
X3QgbV92ZXJzaW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAg
IFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisK
K2NsYXNzIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQpKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiop
OworcHJpdmF0ZToKKyAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKK307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVs
REI+IGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9y
dE9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAg
ICBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9i
amVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAg
ICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IG1fZGF0YWJhc2U7
CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Cit9Owor
CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVs
REI+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2
aW91c0ludFZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNp
b25DaGFuZ2VBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgcHJldmlvdXNWZXJzaW9uLCBwcmV2aW91
c0ludFZlcnNpb24pKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBWZXJzaW9uQ2hhbmdlQWJvcnRP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwg
Y29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9u
KQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9wcmV2aW91c1Zl
cnNpb24ocHJldmlvdXNWZXJzaW9uKQorICAgICAgICAsIG1fcHJldmlvdXNJbnRWZXJzaW9uKHBy
ZXZpb3VzSW50VmVyc2lvbikKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZExldmVsREI+IG1fZGF0YWJhc2U7CisgICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9u
OworICAgIGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247Cit9OworCitjbGFzcyBDcmVhdGVJ
bmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVy
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q3JlYXRlSW5kZXhPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1l
dGFkYXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1f
YmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2Jq
ZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAg
ICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5n
U3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCitjbGFzcyBEZWxldGVJbmRleE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRl
SW5kZXhPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRh
KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgRGVsZXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2lu
Z1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3Rv
cmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7Cisg
ICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7
CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCitjbGFzcyBDcmVhdGVJbmRleEFib3J0T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRp
b24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKyAgICB9CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToK
KyAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RT
dG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBt
X2RhdGFiYXNlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0
IGludDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6
Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4g
ZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRl
SW5kZXhBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0
YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAg
ICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBt
X2RhdGFiYXNlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsKKworY2xhc3MgR2V0T3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE9w
ZXJhdGlvbihiYWNraW5nU3RvcmUsIG1ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBr
ZXlSYW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAg
R2V0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4
ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAg
LCBtX2RhdGFiYXNlSWQobWV0YWRhdGEuaWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9i
amVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9r
ZXlQYXRoKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkua2V5UGF0aCkK
KyAgICAgICAgLCBtX2F1dG9JbmNyZW1lbnQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmpl
Y3RTdG9yZUlkKS5hdXRvSW5jcmVtZW50KQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2Up
CisgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jl
cy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOworICAgIH0K
KworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAg
IGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RT
dG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IElEQktleVBh
dGggbV9rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAgIGNvbnN0
IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJbmRleGVkREI6OkN1
cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOworfTsKKworY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9y
PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQdXRPcGVyYXRpb24oYmFja2luZ1N0b3Jl
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tz
LCBpbmRleElkcywgaW5kZXhLZXlzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgUHV0T3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0
YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtl
eXMpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1f
ZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmUpCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2tleShrZXkpCisgICAg
ICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tz
KQorICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMpCisgICAgICAgICwgbV9pbmRleEtleXMo
aW5kZXhLZXlzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAg
ICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3Qg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV92YWx1ZTsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5PiBt
X2tleTsKKyAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgbV9w
dXRNb2RlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAg
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiBtX2luZGV4SWRzOworICAgIGNvbnN0IFZlY3RvcjxJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gbV9pbmRleEtleXM7Cit9OworCitj
bGFzcyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShzaXplX3QgaW5k
ZXhDb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2V0SW5kZXhlc1Jl
YWR5T3BlcmF0aW9uKGluZGV4Q291bnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBTZXRJbmRl
eGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQpCisgICAgICAgIDogbV9pbmRleENv
dW50KGluZGV4Q291bnQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBtX2luZGV4
Q291bnQ7Cit9OworCitjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5DdXJzb3JPcGVy
YXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBr
ZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqKTsKK3ByaXZhdGU6CisgICAgT3BlbkN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1
cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlw
ZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAg
OiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRh
dGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAg
ICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkK
KyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JUeXBl
KGN1cnNvclR5cGUpCisgICAgICAgICwgbV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAgICAgLCBt
X2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRh
YmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGlu
dDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5
UmFuZ2U7CisgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9kaXJlY3Rpb247
CisgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25z
dCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7CisgICAg
Y29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBDb3Vu
dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRp
b24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDb3VudE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToK
KyAgICBDb3VudE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3Rv
cmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmpl
Y3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisg
ICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElk
OworICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIERlbGV0ZVJhbmdl
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVSYW5n
ZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJh
bmdlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBEZWxldGVSYW5nZU9wZXJh
dGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRh
YmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAg
ICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tz
KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2Jh
Y2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1f
a2V5UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9
OworCitjbGFzcyBDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDbGVhck9wZXJhdGlvbihiYWNraW5nU3RvcmUs
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRl
OgorICAgIENsZWFyT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJh
Y2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAg
LCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qjo6UGVuZGluZ09wZW5DYWxsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQZW5k
aW5nT3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFBlbmRpbmdPcGVuQ2FsbChjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tz
LCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorICAgIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9k
YXRhYmFzZUNhbGxiYWNrczsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIHsgcmV0dXJuIG1fdmVy
c2lvbjsgfQorICAgIGludDY0X3QgdHJhbnNhY3Rpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNhY3Rpb25JZDsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdPcGVuQ2FsbChQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBkYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNp
b24pCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJh
c2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNp
b24pCisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgeworICAg
IH0KKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CisgICAgaW50NjRfdCBtX3Zl
cnNpb247CisgICAgY29uc3QgaW50NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Cit9OworCitjbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpQZW5kaW5nRGVsZXRlQ2FsbCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBQZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3By
aXZhdGU6CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0K
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK1Bhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCRmFj
dG9yeUJhY2tlbmRMZXZlbERCKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZp
ZXIpCit7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGJhY2tlbmQgPSBh
ZG9wdFJlZihuZXcgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQihuYW1lLCBkYXRhYmFzZSwgZmFj
dG9yeSwgdW5pcXVlSWRlbnRpZmllcikpOworICAgIGlmICghYmFja2VuZC0+b3BlbkludGVybmFs
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBiYWNrZW5kLnJlbGVhc2UoKTsKK30K
KworbmFtZXNwYWNlIHsKK2NvbnN0IGNoYXIqIE5vU3RyaW5nVmVyc2lvbiA9ICIiOworfQorCitJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIElEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQiogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQor
ICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV9tZXRhZGF0YShuYW1l
LCBJbnZhbGlkSWQsIE5vU3RyaW5nVmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRW
ZXJzaW9uLCBJbnZhbGlkSWQpCisgICAgLCBtX2lkZW50aWZpZXIodW5pcXVlSWRlbnRpZmllcikK
KyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpjcmVhdGUoKSkKKyAgICAsIG1fY2xv
c2luZ0Nvbm5lY3Rpb24oZmFsc2UpCit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNO
dWxsKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFkZE9iamVjdFN0
b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5l
d01heE9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jl
cy5jb250YWlucyhvYmplY3RTdG9yZS5pZCkpOworICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlk
ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQo
bV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAg
ICAgIG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7Cisg
ICAgfQorICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2Jq
ZWN0U3RvcmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnJlbW92ZU9i
amVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCit7CisgICAgQVNT
RVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAg
ICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRl
eGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7CisgICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5k
ZXguaWQsIGluZGV4KTsKKyAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRh
OjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBu
ZXdNYXhJbmRleElkKTsKKyAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heElu
ZGV4SWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9y
ZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
cmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7Cisg
ICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKKyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3Jl
LmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVt
b3ZlKGluZGV4SWQpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9y
ZUlkLCBvYmplY3RTdG9yZSk7Cit9CisKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
b3BlbkludGVybmFsKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBib29sIG9r
ID0gbV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1l
LCAmbV9tZXRhZGF0YSwgc3VjY2Vzcyk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNz
ID09IChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAl
bGxkIiwgc3VjY2VzcyA/ICJ0cnVlIiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
bV9tZXRhZGF0YS5pZCkpOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RT
dG9yZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsKKworICAgIHJl
dHVybiBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRh
Lm5hbWUsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFk
YXRhLmlkKTsKK30KKworSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6fklEQkRhdGFiYXNlQmFj
a2VuZExldmVsREIoKQoreworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6YmFja2luZ1N0b3JlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9iYWNraW5nU3RvcmU7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3Jl
YXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBh
dXRvSW5jcmVtZW50KQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qjo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9u
LT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAg
QVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7
CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9i
amVjdFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6TWluaW11bUluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmpl
Y3RTdG9yZU1ldGFkYXRhKSwgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIG9iamVjdFN0b3JlSWQpKTsKKworICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3Jl
TWV0YWRhdGEsIG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9u
KQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKKyAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2Jq
ZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUsIG1fb2JqZWN0
U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVu
dCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBt
X29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHRyYW5z
YWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIElEQl9U
UkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFu
c2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0
KG9iamVjdFN0b3JlSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVP
YmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1l
dGFkYXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBv
YmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgcmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJ
ZCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlSW5kZXgoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVu
aXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjo6Y3JlYXRlSW5kZXgiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisg
ICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQp
KTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKCFvYmpl
Y3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBjb25zdCBJREJJbmRleE1l
dGFkYXRhIGluZGV4TWV0YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0
aUVudHJ5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVy
YXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0
YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkKSk7CisKKyAgICBhZGRJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRh
LCBpbmRleElkKTsKK30KKwordm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0Uo
IkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRl
SW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwg
bV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0
YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKKyAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hlbiB0
cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgp
LmRhdGEoKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRy
YW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIp
OworICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9k
YXRhYmFzZS0+cmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAg
SURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVJbmRleCIpOworICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3Rv
cmVJZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElk
KSk7CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0
b3JlLmluZGV4ZXMuZ2V0KGluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9y
ZUlkLCBpbmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKworICAgIHJlbW92ZUluZGV4KG9i
amVjdFN0b3JlSWQsIGluZGV4SWQpOworfQorCit2b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAg
IElEQl9UUkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKKyAgICBib29sIG9rID0gbV9iYWNr
aW5nU3RvcmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2lu
ZGV4TWV0YWRhdGEuaWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxl
dGluZyBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKKyAgICB9Cit9CisKK3ZvaWQgRGVs
ZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVy
YXRpb24iKTsKKyAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOwor
ICAgIG1fZGF0YWJhc2UtPmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRh
LCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhl
IGZyb250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlv
dXNseSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFu
c2FjdGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250
ZW5kLCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAg
aWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OmFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkKK3sKKyAg
ICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBi
ZWVuIGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZl
IHRvIGlnbm9yZSBpdC4KKyAgICBpZiAobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZCkpCisgICAgICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+YWJvcnQo
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjphYm9ydChpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCit7CisgICAg
Ly8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVl
biBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0
byBpZ25vcmUgaXQuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
SWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KGVy
cm9yKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpnZXQoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OmdldCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRy
YW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICgh
dHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1fbWV0YWRhdGEsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJz
b3JLZXlPbmx5IDogSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7Cit9
CisKK3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiR2V0T3BlcmF0aW9uIik7CisKKyAg
ICBSZWZQdHI8SURCS2V5PiBrZXk7CisKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkp
CisgICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAg
ICAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAg
ICAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkp
OworICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAg
ICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9y
ZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29y
TmV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1
ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJp
ZXZhbCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tl
eVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGtl
eSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleTsKKyAgICBib29sIG9rOworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5k
ZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgIC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2
YWwgT3BlcmF0aW9uCisgICAgICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAgICAgICAgb2sgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOworICAg
ICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rv
cih2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZl
Y3Rvcih2YWx1ZSkpOworICAgICAgICByZXR1cm47CisKKyAgICB9CisKKyAgICAvLyBGcm9tIGhl
cmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGluZGV4ZXMuCisgICAgb2sgPSBtX2JhY2tpbmdT
dG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5
LCBwcmltYXJ5S2V5KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXByaW1hcnlLZXkpIHsKKyAgICAgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICht
X2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSB7CisgICAgICAgIC8vIElu
ZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3Vj
Y2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgIFZlY3Rvcjxj
aGFyPiB2YWx1ZTsKKyAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCAqcHJpbWFyeUtleSwgdmFsdWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgbV9jYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHBy
aW1hcnlLZXksIG1fa2V5UGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Cit9CisK
K3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OnB1dCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwor
ICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNh
Y3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOworCisgICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVj
dFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOworCisgICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwg
aWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tz
LCBpbmRleElkcywgaW5kZXhLZXlzKSk7Cit9CisKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9U
UkFDRSgiUHV0T3BlcmF0aW9uIik7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKyAgICBBU1NFUlQobV9pbmRleElkcy5z
aXplKCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKKyAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9
IGZhbHNlOworCisgICAgUmVmUHRyPElEQktleT4ga2V5OworICAgIGlmIChtX3B1dE1vZGUgIT0g
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUgJiYgbV9vYmplY3RTdG9y
ZS5hdXRvSW5jcmVtZW50ICYmICFtX2tleSkgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRv
SW5jS2V5ID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6Z2VuZXJhdGVLZXkobV9iYWNr
aW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOwor
ICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOworICAgICAgICBpZiAoIWF1dG9JbmNLZXkt
PmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJN
YXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gYXV0b0luY0tleTsKKyAgICB9IGVsc2UKKyAg
ICAgICAga2V5ID0gbV9rZXk7CisKKyAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsK
KworICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVy
OworICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpBZGRP
bmx5KSB7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBvayA9IG1f
YmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXks
ICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5
IGV4aXN0ZW5jZS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZvdW5kKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktl
eSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3RvcjxPd25QdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kTGV2ZWxEQjo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOworICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CisgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7CisgICAg
Ym9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6
bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1faW5kZXhJZHMs
IG1faW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFp
bnRzKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRh
dGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9i
ZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVy
cm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQmVmb3JlIHRo
aXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJh
Y2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCisgICAgYmFja2luZ1N0b3JlU3Vj
Y2VzcyA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92
YWx1ZSwgJnJlY29yZElkZW50aWZpZXIpOworICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vzcykg
eworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNr
aW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRl
ciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAgIGluZGV4V3Jp
dGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9iYWNraW5nU3RvcmUsIHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmUuaWQpOworICAgIH0KKworICAgIGlmIChtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1l
bnQgJiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBk
YXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29s
IG9rID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6dXBkYXRlS2V5R2VuZXJhdG9yKG1f
YmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlk
LCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAg
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5n
IGtleSBnZW5lcmF0b3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmlt
YXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQjo6c2V0SW5kZXhLZXlzIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAg
aWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAg
IFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IHN0b3JlID0gYmFja2luZ1N0b3JlKCk7CisgICAgLy8gRklYTUU6IFRo
aXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUg
aWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KKyAgICBJREJCYWNraW5nU3RvcmU6
OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKKyAgICBib29sIGZvdW5kID0gZmFs
c2U7CisgICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9y
ZUlkLCAqcHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRp
bmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFmb3Vu
ZCkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5n
Ojpmb3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0
b3JlLiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1f
bWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIGJhY2tp
bmdTdG9yZVN1Y2Nlc3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjptYWtlSW5kZXhX
cml0ZXJzKHRyYW5zYWN0aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0
YSwgcHJpbWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMs
ICZlcnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOworICAgIGlmICghYmFja2luZ1N0b3Jl
U3VjY2VzcykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
cjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVy
KiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaW5kZXhXcml0
ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIsICpzdG9yZS5nZXQoKSwgdHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOwor
ICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleGVzUmVh
ZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxE
Qjo6c2V0SW5kZXhlc1JlYWR5Iik7CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIFNl
dEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKGluZGV4SWRzLnNpemUoKSkpOworfQorCit2
b2lkIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIlNldEluZGV4ZXNSZWFk
eU9wZXJhdGlvbiIpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyAr
K2kpCisgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6Om9wZW5DdXJzb3IoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
IGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6Om9wZW5DdXJzb3IiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAg
ICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwg
aWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25s
eSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFs
dWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQorewor
ICAgIElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOworCisgICAgLy8gVGhlIGZyb250
ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCisg
ICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBh
bnkgZWFybGllcgorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFy
bHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCisgICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRl
ZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCisgICAgaWYgKG1fdGFza1R5cGUg
PT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKKyAgICAgICAg
dHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOworCisgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7CisgICAgaWYgKG1faW5kZXhJZCA9
PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vyc29y
VHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFs
VGFzayk7CisgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlP
bmx5KQorICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9w
ZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQo
KSwgbV9kaXJlY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CisgICAgfQorCisgICAgaWYg
KCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhz
dGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRp
Y19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGU+KG1fdGFza1R5cGUp
KTsKKyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZExldmVsREI+IGN1cnNvciA9IElEQkN1cnNv
ckJhY2tlbmRMZXZlbERCOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2N1cnNv
clR5cGUsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZUlkKTsKKyAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5
S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQjo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCOjpjb3VudCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwor
ICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3Jl
LCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Cit9
CisKK3ZvaWQgQ291bnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJDb3VudE9wZXJhdGlvbiIpOwor
ICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkKQorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tp
bmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBlbHNlCisgICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4
dCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkbyB7Cisg
ICAgICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51
ZUZ1bmN0aW9uKDApKTsKKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJ
REJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZVJhbmdlIik7CisgICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25SZWFkT25seSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZVJh
bmdlT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQs
IGtleVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAg
ICBJREJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7CisgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhl
ZERCOjpDdXJzb3JOZXh0KTsKKyAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVj
dFN0b3JlSWQsIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKSkgeworICAg
ICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0
YSBpbiByYW5nZSIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7
CisgICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorewor
ICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y2xlYXIiKTsKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblJlYWRPbmx5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ2xlYXJPcGVy
YXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgY2FsbGJh
Y2tzKSk7Cit9CisKK3ZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJPYmplY3RTdG9y
ZUNsZWFyT3BlcmF0aW9uIik7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RT
dG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlSWQpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
RXJyb3IgY2xlYXJpbmcgb2JqZWN0IHN0b3JlIikpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKK30KKwordm9pZCBEZWxldGVPYmplY3RTdG9y
ZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Cisg
ICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlk
KCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVy
bmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVy
cm9yKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVyc2lv
bkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0
cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24iKTsK
KyAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtX2RhdGFiYXNlLT5pZCgpOworICAgIGludDY0X3Qg
b2xkVmVyc2lvbiA9IG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50VmVyc2lvbjsKKyAgICBBU1NF
UlQobV92ZXJzaW9uID4gb2xkVmVyc2lvbik7CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5p
bnRWZXJzaW9uID0gbV92ZXJzaW9uOworICAgIGlmICghbV9kYXRhYmFzZS0+bV9iYWNraW5nU3Rv
cmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJz
aW9uKSkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVy
cm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZSB3aGVuIHVwZGF0aW5nIHZlcnNpb24u
Iik7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgdHJhbnNh
Y3Rpb24tPmFib3J0KGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2UtPm1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKKyAgICBtX2RhdGFiYXNlLT5t
X3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKG1fY2FsbGJh
Y2tzLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uSWQsIG1fdmVyc2lvbik7Cisg
ICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCBtX2RhdGFiYXNlLCBt
X2RhdGFiYXNlLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNh
Y3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgewor
ICAgICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAg
ICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAg
IH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkZpbmlz
aGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJwVHJhbnNhY3Rp
b24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0
aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5z
KHRyYW5zYWN0aW9uLT5pZCgpKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbi0+aWQoKSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rpb25z
LnJlbW92ZSh0cmFuc2FjdGlvbi0+aWQoKSk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5n
ZXQoKSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigp
OworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlv
bkZpbmlzaGVkQW5kQWJvcnRGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI+IHBycFRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Cisg
ICAgICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdp
bGwgYmUgYSAic2Vjb25kCisgICAgICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1
cyBpbiBwcm9jZXNzUGVuZGluZ0NhbGxzLgorICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBs
b25nZXIgc3VwcG9ydCBzZXRWZXJzaW9uLCBhc3NlcnQgc3VjaCBhIHRoaW5nLgorICAgICAgICBp
ZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2Fj
dGlvbiB3YXMgYWJvcnRlZCBpbiB1cGdyYWRlbmVlZGVkIGV2ZW50IGhhbmRsZXIuIikpOworICAg
ICAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAgICAgICB9Cisg
ICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBwcnBUcmFuc2FjdGlvbikKK3sK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBw
cnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygp
OworfQorCitzaXplX3QgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y29ubmVjdGlvbkNvdW50
KCkKK3sKKyAgICAvLyBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcGVuZGluZyBvcGVuIGNhbGxzLCBh
cyB0aG9zZSBzaG91bGQgbm90IGJsb2NrIHZlcnNpb24gY2hhbmdlcyBhbmQgZGVsZXRlcy4KKyAg
ICByZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCk7Cit9CisKK3ZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCit7CisgICAgaWYgKG1f
cGVuZGluZ1NlY29uZEhhbGZPcGVuKSB7CisgICAgICAgIEFTU0VSVChtX3BlbmRpbmdTZWNvbmRI
YWxmT3Blbi0+dmVyc2lvbigpID09IG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CisgICAgICAgIEFT
U0VSVChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7CisgICAgICAgIG1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkp
OworICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7CisgICAgICAgIC8v
IEZhbGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBwZW5kaW5nIGRlbGV0ZXMgbWF5IGJlIChw
YXJ0aWFsbHkpIHVuYmxvY2tlZC4KKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjaGVj
ayBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1Y2UgcXVldWUtY2h1cm4gYW5kCisgICAg
Ly8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7IGRlbGV0ZURhdGFiYXNlIGFuZCBvcGVu
Q29ubmVjdGlvbiB3aWxsCisgICAgLy8gcmVxdWV1ZSB0aGVpciBjYWxscyBpZiB0aGlzIGNvbmRp
dGlvbiBpcyB0cnVlLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0
eSgpICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpCisgICAgICAgIHJldHVybjsKKyAgICB3
aGlsZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBPd25QdHI8
UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0gbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMudGFrZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZURhdGFiYXNlRmluYWwocGVuZGluZ0RlbGV0
ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICB9CisgICAgLy8gZGVsZXRlRGF0YWJhc2VGaW5hbCBz
aG91bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCisgICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNh
bGxzLmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIGFsc28gbm90IHJlYWxseSBu
ZWVkZWQsIG9wZW5Db25uZWN0aW9uIHdvdWxkIGp1c3QgcmVxdWV1ZSBpdHMgY2FsbHMuCisgICAg
aWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0
ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4KKyAgICBEZXF1ZTxPd25QdHI8UGVuZGlu
Z09wZW5DYWxsPiA+IHBlbmRpbmdPcGVuQ2FsbHM7CisgICAgbV9wZW5kaW5nT3BlbkNhbGxzLnN3
YXAocGVuZGluZ09wZW5DYWxscyk7CisgICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1w
dHkoKSkgeworICAgICAgICBPd25QdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwg
PSBwZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBvcGVuQ29ubmVjdGlvbihw
ZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPmRhdGFiYXNlQ2Fs
bGJhY2tzKCksIHBlbmRpbmdPcGVuQ2FsbC0+dHJhbnNhY3Rpb25JZCgpLCBwZW5kaW5nT3BlbkNh
bGwtPnZlcnNpb24oKSk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVs
REI6OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREI6OmNyZWF0ZSh0cmFuc2FjdGlvbklkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSWRz
LCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT4obW9kZSksIHRoaXMpOwor
ICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAg
IG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbklkLCB0cmFuc2FjdGlvbi5nZXQoKSk7Cit9
CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6b3BlbkNvbm5lY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCB2ZXJzaW9uKQoreworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNh
bGxiYWNrczsKKworICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1f
cnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgeworICAgICAgICBtX3BlbmRpbmdPcGVu
Q2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgZGF0YWJhc2VD
YWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX21ldGFkYXRhLmlkID09IEludmFsaWRJZCkgeworICAgICAgICAvLyBU
aGUgZGF0YWJhc2Ugd2FzIGRlbGV0ZWQgdGhlbiBpbW1lZGlhdGVseSByZS1vcGVuZWQ7IG9wZW5J
bnRlcm5hbCgpIHJlY3JlYXRlcyBpdCBpbiB0aGUgYmFja2luZyBzdG9yZS4KKyAgICAgICAgaWYg
KG9wZW5JbnRlcm5hbCgpKQorICAgICAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaW50VmVyc2lv
biA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOworICAgICAgICAgICAgUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+IGVycm9yOworICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJu
YWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIG5vIHZlcnNpb24gc3BlY2lmaWVkLiI7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0
KCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggdmVyc2lvbiAlbGxkIiwgc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPih2ZXJzaW9uKSk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsIG1lc3NhZ2UpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlzdCBmcm9t
IGl0cyBsYWNrIG9mIGVpdGhlciB0eXBlIG9mIHZlcnNpb24uCisgICAgYm9vbCBpc05ld0RhdGFi
YXNlID0gbV9tZXRhZGF0YS52ZXJzaW9uID09IE5vU3RyaW5nVmVyc2lvbiAmJiBtX21ldGFkYXRh
LmludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOworCisgICAg
aWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pIHsK
KyAgICAgICAgLy8gRklYTUU6IHRoaXMgY29tbWVudHMgd2FzIHJlbGF0ZWQgdG8gQ2hyb21pdW0g
Y29kZS4gSXQgbWF5IGJlIGluY29ycmVjdAorICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0cyBvbmx5
IC0gc2tpcCB1cGdyYWRlIHN0ZXBzLiBDYWxsaW5nIGZyb20gc2NyaXB0IHdpdGggRGVmYXVsdElu
dFZlcnNpb24gdGhyb3dzIGV4Y2VwdGlvbi4KKyAgICAgICAgQVNTRVJUKGlzTmV3RGF0YWJhc2Up
OworICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7
CisgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKSB7CisgICAgICAgIGlmICghaXNOZXdEYXRhYmFzZSkgewor
ICAgICAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPihkYXRhYmFzZUNhbGxiYWNrcykpOworICAgICAgICAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gU3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmll
ZCBhbmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0byAxLgorICAg
ICAgICB2ZXJzaW9uID0gMTsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA+IG1fbWV0YWRhdGEu
aW50VmVyc2lvbikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2Fs
bGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHZlcnNpb24gPCBtX21ldGFkYXRhLmludFZlcnNp
b24pIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhl
IHJlcXVlc3RlZCB2ZXJzaW9uICglbGxkKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNp
b24gKCVsbGQpLiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmVyc2lvbiksIHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX21ldGFkYXRhLmludFZlcnNpb24pOworICAg
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICBjYWxs
YmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisgICAgQVNTRVJUKGNh
bGxiYWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhl
IGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5n
IHNldC4KKyAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICAgICAgICAg
ICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS5pbnRWZXJzaW9uLCByZXF1ZXN0ZWRW
ZXJzaW9uKTsKKyAgICB9CisgICAgLy8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRpbCBh
bGwgdGhlIHZlcnNpb24gY2hhbmdlIGV2ZW50cyBhcmUKKyAgICAvLyBkZWxpdmVyZWQgYW5kIHRo
ZW4gY2hlY2sgbV9kYXRhYmFzZUNhbGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5nCisg
ICAgLy8gb3IgZmlyaW5nIGEgYmxvY2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxkIGJl
IGNvbnNpc3RlbnQgd2l0aCBob3cKKyAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29ycmVj
dGx5KSBkaWQgaXQuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2NrZWQg
YW5kIGluc3RlYWQgd2FpdCB1bnRpbCB0aGUgZnJvbnRlbmQKKyAgICAvLyB0ZWxscyB1cyB0aGF0
IGFsbCB0aGUgYmxvY2tlZCBldmVudHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgaWYgKGNv
bm5lY3Rpb25Db3VudCgpKQorICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRh
LmludFZlcnNpb24pOworICAgIC8vIEZJWE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxz
LmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgY3JlYXRl
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0b3Jl
SWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVk
VmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIFZlcnNpb25DaGFuZ2VBYm9y
dE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5p
bnRWZXJzaW9uKSk7CisKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKKyAg
ICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKGlzRGVsZXRlRGF0YWJhc2VCbG9ja2Vk
KCkpIHsKKyAgICAgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVz
IHRoZSBldmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVu
ZGluZyBzZXQuCisgICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEu
aW50VmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAg
fQorICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3Bl
biBjb25uZWN0aW9ucyBhZnRlciB0aGUKKyAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBh
cmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICAgICAgY2FsbGJhY2tz
LT5vbkJsb2NrZWQobV9tZXRhZGF0YS5pbnRWZXJzaW9uKTsKKyAgICAgICAgbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzLnJlbGVh
c2UoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGV0ZURhdGFiYXNlRmluYWwo
Y2FsbGJhY2tzLnJlbGVhc2UoKSk7Cit9CisKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qjo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQoreworICAgIHJldHVybiBjb25uZWN0aW9uQ291
bnQoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRhYmFz
ZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgQVNTRVJU
KCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUp
OworICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbWV0YWRhdGEubmFt
ZSkpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgZGVs
ZXRpbmcgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbWV0YWRh
dGEudmVyc2lvbiA9IE5vU3RyaW5nVmVyc2lvbjsKKyAgICBtX21ldGFkYXRhLmlkID0gSW52YWxp
ZElkOworICAgIG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5v
SW50VmVyc2lvbjsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qjo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQor
eworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJh
Y2tzOworICAgIEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNr
cykpOworCisgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tzKTsKKyAg
ICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4t
PmRhdGFiYXNlQ2FsbGJhY2tzKCkgPT0gY2FsbGJhY2tzKSB7CisgICAgICAgIG1fcGVuZGluZ1Nl
Y29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMg
Y2xvc2VkLiIpKTsKKyAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOwor
ICAgIH0KKworICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDEpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3IgdG8gcHJv
Y2VzcyBhIHBlbmRpbmcgb3BlbiBjYWxsCisgICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJlZW50ZXJp
bmcgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y2xvc2UuIFRoZW4gdGhlCisgICAgLy8gYmFj
a2VuZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBj
b25uZWN0aW9uLCBhbmQKKyAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxl
ZCBjbG9zZS4KKyAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBp
biBjYXNlIG9mIHJlZW50cmFuY3kuCisgICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCisgICAg
ICAgIHJldHVybjsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24o
bV9jbG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7CisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwor
CisgICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2Fz
ZXMgYmVsb3cuCisgICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNh
bGxzLnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7CisgICAgICAgIFRy
YW5zYWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7CisgICAgICAgIFJlZlB0
cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIp
OworICAgICAgICBmb3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0
ID0gdHJhbnNhY3Rpb25zLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9ucy52YWx1
ZXMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgKCppdCktPmFib3J0KGVy
cm9yKTsKKworICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKKworICAg
ICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOworCisgICAgICAgIC8vIFRoaXMgY2hlY2sgc2hv
dWxkIG9ubHkgYmUgZmFsc2UgaW4gdW5pdCB0ZXN0cy4KKyAgICAgICAgQVNTRVJUKG1fZmFjdG9y
eSk7CisgICAgICAgIGlmIChtX2ZhY3RvcnkpCisgICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92
ZUlEQkRhdGFiYXNlQmFja2VuZChtX2lkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBDcmVh
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFu
c2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+cmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RTdG9y
ZUlkKTsKK30KKwordm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9U
UkFDRSgiRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9VTlVT
RUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+YWRkT2JqZWN0
U3RvcmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZh
bGlkSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFu
Z2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0
cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlv
biIpOworICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAg
bV9kYXRhYmFzZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gbV9wcmV2aW91c1ZlcnNpb247CisgICAg
bV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV9wcmV2aW91c0ludFZlcnNpb247
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4ZjY2NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQl9oCisKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJN
ZXRhZGF0YS5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSURCQmFja2luZ1N0b3JlOworY2xhc3MgSURCRGF0YWJhc2U7
CitjbGFzcyBJREJGYWN0b3J5QmFja2VuZExldmVsREI7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOworY2xhc3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI7CisK
K2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
cmUqIGRhdGFiYXNlLCBJREJGYWN0b3J5QmFja2VuZExldmVsREIqLCBjb25zdCBTdHJpbmcmIHVu
aXF1ZUlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZExldmVsREIo
KTsKKworICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25z
dDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRf
dCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICB2b2lkIGFkZE9iamVj
dFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVj
dFN0b3JlSWQpOworICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9y
ZUlkKTsKKyAgICB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdm9pZCByZW1vdmVJ
bmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisKKyAgICB2b2lk
IG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9u
KTsKKyAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Cisg
ICAgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBt
X21ldGFkYXRhOyB9CisKKyAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYs
IGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RT
dG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21t
aXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRf
dCB0cmFuc2FjdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKworICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
SW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCk7CisKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQiogdHJh
bnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvci5nZXQoKTsgfQorICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hl
ZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+KTsKKyAgICB2b2lkIHRy
YW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQj4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0
RmlyZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9u
bHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHB1dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBp
bmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvdW50KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4pIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJ
REJGYWN0b3J5QmFja2VuZExldmVsREIqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIp
OworCisgICAgYm9vbCBvcGVuSW50ZXJuYWwoKTsKKyAgICB2b2lkIHJ1bkludFZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVk
VmVyc2lvbik7CisgICAgc2l6ZV90IGNvbm5lY3Rpb25Db3VudCgpOworICAgIHZvaWQgcHJvY2Vz
c1BlbmRpbmdDYWxscygpOworCisgICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpOwor
ICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwor
CisgICAgY2xhc3MgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjsKKworICAgIC8vIFdoZW4gYSAidmVy
c2lvbmNoYW5nZSIgdHJhbnNhY3Rpb24gYWJvcnRzLCB0aGVzZSByZXN0b3JlIHRoZSBiYWNrLWVu
ZCBvYmplY3QgaGllcmFyY2h5LgorICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlv
bjsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIElE
QkRhdGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
CisgICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFj
dG9yeSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRl
ciB0byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KKyAgICBSZWZQdHI8SURCRmFjdG9yeUJh
Y2tlbmRMZXZlbERCPiBtX2ZhY3Rvcnk7CisKKyAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvckxldmVsREI+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uOworCisgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqPiBUcmFuc2FjdGlvbk1hcDsKKyAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0
aW9uczsKKworICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKKyAgICBEZXF1ZTxPd25QdHI8UGVu
ZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKKyAgICBPd25QdHI8UGVuZGluZ09w
ZW5DYWxsPiBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbjsKKworICAgIGNsYXNzIFBlbmRpbmdEZWxl
dGVDYWxsOworICAgIERlcXVlPE93blB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdE
ZWxldGVDYWxsczsKKworICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiA+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OworICAgIERhdGFiYXNlQ2FsbGJhY2tz
U2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7CisKKyAgICBib29sIG1fY2xvc2luZ0Nvbm5lY3Rp
b247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTM4MTA2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5
QmFja2VuZExldmVsREIuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
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
IgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIgorCisjaW5jbHVkZSAiRE9N
U3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvckxldmVsREIuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIE0+CitzdGF0aWMg
dm9pZCBjbGVhbldlYWtNYXAoSGFzaE1hcDxLLCBXZWFrUHRyPE0+ID4mIG1hcCkKK3sKKyAgICBI
YXNoTWFwPEssIFdlYWtQdHI8TT4gPiBvdGhlcjsKKyAgICBvdGhlci5zd2FwKG1hcCk7CisKKyAg
ICB0eXBlbmFtZSBIYXNoTWFwPEssIFdlYWtQdHI8TT4gPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IG90aGVyLmJlZ2luKCk7CisgICAgd2hpbGUgKGl0ZXIgIT0gb3RoZXIuZW5kKCkpIHsKKyAgICAg
ICAgaWYgKGl0ZXItPnZhbHVlLmdldCgpKQorICAgICAgICAgICAgbWFwLnNldChpdGVyLT5rZXks
IGl0ZXItPnZhbHVlKTsKKyAgICAgICAgKytpdGVyOworICAgIH0KK30KKworc3RhdGljIFN0cmlu
ZyBjb21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyIGxldmVsREJGaWxlU3VmZml4W10gPSAiQDEiOworICAg
IHJldHVybiBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyBsZXZlbERCRmls
ZVN1ZmZpeDsKK30KKworc3RhdGljIFN0cmluZyBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihjb25z
dCBTdHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICBy
ZXR1cm4gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luKSArIG5hbWU7Cit9CisK
K0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCkKK3sK
K30KKworSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjp+SURCRmFjdG9yeUJhY2tlbmRMZXZlbERC
KCkKK3sKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVsREI6OnJlbW92ZUlEQkRhdGFi
YXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2VCYWNrZW5kTWFwLmNvbnRhaW5zKHVuaXF1ZUlkZW50aWZpZXIpKTsKKyAgICBt
X2RhdGFiYXNlQmFja2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQg
SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5
T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0
b3J5KQoreworICAgIElEQl9UUkFDRSgiSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpnZXREYXRh
YmFzZU5hbWVzIik7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0g
b3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgaWYg
KCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3Igb3BlbmluZyBiYWNraW5nIHN0b3JlIGZvciBpbmRleGVkREIud2Via2l0R2V0RGF0
YWJhc2VOYW1lcy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gZGF0YWJhc2VOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworCisg
ICAgVmVjdG9yPFN0cmluZz4gZm91bmROYW1lcyA9IGJhY2tpbmdTdG9yZS0+Z2V0RGF0YWJhc2VO
YW1lcygpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm91
bmROYW1lcy5iZWdpbigpOyBpdCAhPSBmb3VuZE5hbWVzLmVuZCgpOyArK2l0KQorICAgICAgICBk
YXRhYmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRh
dGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVs
REI6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rvcnkp
Cit7CisgICAgSURCX1RSQUNFKCJJREJGYWN0b3J5QmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFi
YXNlIik7CisgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVl
SWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CisKKyAgICBJREJEYXRhYmFz
ZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlx
dWVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkp
IHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJh
c2UsIGRpcmVjdGx5IGRlbGV0ZSB0aGUKKyAgICAgICAgLy8gZGF0YWJhc2UuCisgICAgICAgIGl0
LT52YWx1ZS0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25l
IG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwor
ICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IkludGVybmFsIGVycm9yIG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKSB7CisgICAgICAgIG1fZGF0YWJh
c2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkp
OworICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Cisg
ICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
Y3JlYXRpbmcgZGF0YWJhc2UgYmFja2VuZCBmb3IgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlLiIp
KTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQjo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0
eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIGNvbnN0IFN0cmlu
ZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5n
ZXQoKSk7CisgICAgY29uc3QgYm9vbCBvcGVuSW5NZW1vcnkgPSBkYXRhRGlyZWN0b3J5LmlzRW1w
dHkoKTsKKworICAgIElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5n
U3RvcmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdT
dG9yZU1hcC5lbmQoKSAmJiBpdDItPnZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gaXQyLT52
YWx1ZS5nZXQoKTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsK
KyAgICBpZiAob3BlbkluTWVtb3J5KQorICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJCYWNraW5n
U3RvcmU6Om9wZW5Jbk1lbW9yeShzZWN1cml0eU9yaWdpbi5nZXQoKSwgZmlsZUlkZW50aWZpZXIp
OworICAgIGVsc2UKKyAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVu
KHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllcik7CisK
KyAgICBpZiAoYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNsZWFuV2Vha01hcChtX2JhY2tpbmdT
dG9yZU1hcCk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlTWFwLnNldChmaWxlSWRlbnRpZmllciwg
YmFja2luZ1N0b3JlLT5jcmVhdGVXZWFrUHRyKCkpOworICAgICAgICAvLyBJZiBhbiBpbi1tZW1v
cnkgZGF0YWJhc2UsIGJpbmQgbGlmZXRpbWUgdG8gdGhpcyBmYWN0b3J5IGluc3RhbmNlLgorICAg
ICAgICBpZiAob3BlbkluTWVtb3J5KQorICAgICAgICAgICAgbV9zZXNzaW9uT25seUJhY2tpbmdT
dG9yZXMuYWRkKGJhY2tpbmdTdG9yZSk7CisKKyAgICAgICAgLy8gQWxsIGJhY2tpbmcgc3RvcmVz
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZhY3Rvcnkgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUu
CisgICAgICAgIEFTU0VSVChtX3Nlc3Npb25Pbmx5QmFja2luZ1N0b3Jlcy5pc0VtcHR5KCkgfHwg
b3BlbkluTWVtb3J5KTsKKworICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVs
REI6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIElEQl9UUkFDRSgiSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCOjpvcGVuIik7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbiA9IHBycFNlY3VyaXR5T3JpZ2luOworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJ
ZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4u
Z2V0KCkpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNl
QmFja2VuZDsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRh
YmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgPT0gbV9k
YXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURp
cmVjdG9yeSk7CisgICAgICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUg
Zm9yIGluZGV4ZWREQi5vcGVuLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNy
ZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwor
ICAgICAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKQorICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tl
bmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY3JlYXRpbmcgZGF0YWJhc2UgYmFja2VuZCBmb3IgaW5kZXhlZGRiLm9wZW4uIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFi
YXNlQmFja2VuZCA9IGl0LT52YWx1ZTsKKworICAgIGRhdGFiYXNlQmFja2VuZC0+b3BlbkNvbm5l
Y3Rpb24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lv
bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5k
TGV2ZWxEQi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDkxMGYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJG
YWN0b3J5QmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZExldmVsREJf
aAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjaW5j
bHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIK
KyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKKworY2xhc3MgSURCQmFja2luZ1N0b3JlOwor
Y2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjsKKworY2xhc3MgSURCRmFjdG9yeUJhY2tl
bmRMZXZlbERCIDogcHVibGljIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZExldmVsREI+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQigpKTsKKyAgICB9CisgICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCk7
CisKKyAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gd2VhayBwb2ludGVycy4KKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRp
Zmllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKKworcHJvdGVjdGVkOgorICAgIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQigp
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3Rv
cmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZExldmVsREI+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOworICAgIElEQkRhdGFiYXNl
QmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFdlYWtQdHI8SURCQmFja2luZ1N0b3JlPiA+IElEQkJhY2tpbmdTdG9yZU1hcDsKKyAg
ICBJREJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7CisKKyAgICBIYXNoU2V0PFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU+ID4gbV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXM7CisKKyAg
ICAvLyBPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSBzaG91bGQgZXhpc3QgYXQgYW55
IGdpdmVuIHRpbWUuCisgICAgc3RhdGljIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQiogaWRiRmFj
dG9yeUJhY2tlbmRJbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8g
SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCmluZGV4
IDg4ZTBlMGIuLjA0ZTQyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcApAQCAtMjYsOCAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQkxldmVsREJDb2Rpbmcu
aCIKIAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQorI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKIAogI2luY2x1ZGUgIklE
QktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKQEAgLTE1MjIsNyArMTUyMSw3IEBAIGlu
dDY0X3QgSW5kZXhGcmVlTGlzdEtleTo6aW5kZXhJZCgpIGNvbnN0CiB9CiAKIC8vIEZJWE1FOiBX
ZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBt
YXBwaW5nCi0vLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4gdGhl
IG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CisvLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CiAvLyBD
YW4gd2UgcmVtb3ZlIHRoaXM/CiBjb25zdCBjaGFyKiBPYmplY3RTdG9yZU5hbWVzS2V5OjpkZWNv
ZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVz
S2V5KiByZXN1bHQpCiB7CkBAIC0xODA1LDUgKzE4MDQsNCBAQCBQYXNzUmVmUHRyPElEQktleT4g
SW5kZXhEYXRhS2V5OjpwcmltYXJ5S2V5KCkgY29uc3QKIH0gLy8gbmFtZXNwYWNlIElEQkxldmVs
REJDb2RpbmcKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFVTRShMRVZFTERC
KQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5k
ZXggNTYxOTdmNi4uYWQyMmYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKQEAgLTI2LDggKzI2
LDcgQEAKICNpZm5kZWYgSURCTGV2ZWxEQkNvZGluZ19oCiAjZGVmaW5lIElEQkxldmVsREJDb2Rp
bmdfaAogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQogCiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTI4Miw3ICsyODEsNyBA
QCBwcml2YXRlOgogY2xhc3MgT2JqZWN0U3RvcmVOYW1lc0tleSB7CiBwdWJsaWM6CiAgICAgLy8g
RklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgb2JqZWN0IHN0b3JlIGlkcywgYmVj
YXVzZSBhIG1hcHBpbmcKLSAgICAvLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CisgICAgLy8gaXMga2VwdCBp
biB0aGUgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1
bnJlbGlhYmxlPwogICAgIC8vIENhbiB3ZSByZW1vdmUgdGhpcz8KICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0
U3RvcmVOYW1lc0tleSogcmVzdWx0KTsKICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShp
bnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsKQEAgLTM2
Myw3ICszNjIsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBVU0UoTEVWRUxEQikKLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAKICNlbmRp
ZiAvLyBJREJMZXZlbERCQ29kaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZExldmVsREIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTBl
N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwCkBAIC0wLDAgKzEsMTQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFj
a2VuZExldmVsREIuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVW
RUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVk
ZSAiSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRl
ICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdy
aXRlcjo6dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5
cywgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBTdHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QK
K3sKKyAgICBjYW5BZGRLZXlzID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2luZGV4S2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIG9rID0gYWRkaW5nS2V5QWxs
b3dlZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5LCBjYW5BZGRLZXlz
KTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFjYW5BZGRLZXlzKSB7CisgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAg
ICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBr
ZXkgdG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1
bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGNh
bkFkZEtleXMgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJC
YWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tp
bmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0
Cit7CisgICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9v
bCBvayA9IGJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgp
LCByZWNvcmRJZGVudGlmaWVyKTsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBhbHJlYWR5
IGJlZW4gdmVyaWZpZWQgYXMgYSB2YWxpZCB3cml0ZSBkdXJpbmcgdmVyaWZ5SW5kZXhLZXlzLgor
ICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CisgICAgfQorfQorCitib29sIElEQk9iamVj
dFN0b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmlt
YXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdAoreworICAgIGFsbG93ZWQgPSBmYWxzZTsKKyAg
ICBpZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKKyAgICAgICAgYWxsb3dlZCA9IHRydWU7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlZlB0cjxJREJLZXk+IGZvdW5k
UHJpbWFyeUtleTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGJhY2tp
bmdTdG9yZS5rZXlFeGlzdHNJbkluZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAqaW5kZXhLZXksIGZvdW5kUHJpbWFyeUtleSwgZm91bmQpOworICAg
IGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kIHx8IChwcmlt
YXJ5S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkpCisgICAgICAg
IGFsbG93ZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREI6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCPiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dl
bmVyYXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8
T3duUHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdl
LCBib29sJiBjb21wbGV0ZWQpCit7CisgICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRl
eEtleXMuc2l6ZSgpKTsKKyAgICBjb21wbGV0ZWQgPSBmYWxzZTsKKworICAgIEhhc2hNYXA8aW50
NjRfdCwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFw
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJZHMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGluZGV4S2V5TWFwLmFkZChpbmRleElkc1tpXSwgaW5kZXhLZXlzW2ldKTsKKworICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
b2JqZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVu
ZCgpOyArK2l0KSB7CisKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBp
dC0+dmFsdWU7CisKKyAgICAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKKyAgICAgICAgLy8gSWYgdGhlIG9i
amVjdFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBh
biBpZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0
ZWQpIGtleSBhcyBhIGtleS4KKyAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCAmJiAoaW5kZXgu
a2V5UGF0aCA9PSBvYmplY3RTdG9yZS5rZXlQYXRoKSkKKyAgICAgICAgICAgIGtleXMuYXBwZW5k
KHByaW1hcnlLZXkpOworCisgICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIo
YWRvcHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LCBrZXlzKSkpOworICAgICAgICBib29sIGNh
bkFkZEtleXMgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gaW5k
ZXhXcml0ZXItPnZlcmlmeUluZGV4S2V5cygqYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUuaWQsIGluZGV4
LmlkLCBjYW5BZGRLZXlzLCBwcmltYXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgICAg
ICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghY2FuQWRkS2V5cykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIGluZGV4V3JpdGVycy0+YXBwZW5kKGluZGV4V3JpdGVyLnJlbGVhc2UoKSk7CisgICAgfQor
CisgICAgY29tcGxldGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0
cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OmdlbmVyYXRlS2V5KFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFs
dWUgPSA5MDA3MTk5MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBF
Q01BU2NyaXB0IG51bWJlci4KKyAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXI7CisgICAgYm9vbCBv
ayA9IGJhY2tpbmdTdG9yZS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
Y3VycmVudE51bWJlcik7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyIik7CisgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZUludmFsaWQoKTsKKyAgICB9CisgICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8
IGN1cnJlbnROdW1iZXIgPiBtYXhHZW5lcmF0b3JWYWx1ZSkKKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlSW52YWxpZCgpOworCisgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1
cnJlbnROdW1iZXIpOworfQorCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OnVw
ZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiBr
ZXksIGJvb2wgY2hlY2tDdXJyZW50KQoreworICAgIEFTU0VSVChrZXkgJiYga2V5LT50eXBlKCkg
PT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlLT5tYXliZVVw
ZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0
X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAm
JiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERC
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5YjZlNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJPYmplY3RTdG9yZUJh
Y2tlbmRMZXZlbERCX2gKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0
aC5oIgorI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI7CitzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKKworLy8gRklYTUU6IHRoaXMg
bmFtZXNwYWNlIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtb3ZlIGl0cyBjb250ZW50cyBvdXQgdG8g
dGhlaXIgb3duIGhvbWUuCituYW1lc3BhY2UgSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQiB7
CisKKyAgICBjbGFzcyBJbmRleFdyaXRlciB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNp
dCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAg
ICAgICAgICAgOiBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgeyB9CisK
KyAgICAgICAgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMmIGluZGV4S2V5
cykKKyAgICAgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgICAg
ICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKKyAgICAgICAgeyB9CisKKyAgICAgICAgYm9v
bCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9
IDAsIFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOwor
CisgICAgICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNv
cmRJZGVudGlmaWVyJiwgSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5n
U3RvcmUmLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBp
bmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBX
QVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2lu
ZGV4TWV0YWRhdGE7CisgICAgICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzIG1faW5kZXhLZXlzOworICAgIH07CisKKyAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiwgSURCQmFja2luZ1N0b3JlKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpJbmRleEtleXM+JiwgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhX
cml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNF
RF9SRVRVUk47CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgYm9v
bCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURCT2JqZWN0U3RvcmVCYWNr
ZW5kTGV2ZWxEQl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjlkMDA2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNp
bmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yTGV2ZWxEQi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6Y3JlYXRlKGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJh
c2UpCit7CisgICAgSGFzaFNldDxpbnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKKyAgICAgICAg
b2JqZWN0U3RvcmVIYXNoU2V0LmFkZChvYmplY3RTdG9yZUlkc1tpXSk7CisKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIoaWQsIGNhbGxiYWNrcywg
b2JqZWN0U3RvcmVIYXNoU2V0LCBtb2RlLCBkYXRhYmFzZSkpOworfQorCitJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKGludDY0X3QgaWQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNl
dDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1v
ZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQorICAgIDogbV9pZChpZCkKKyAg
ICAsIG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCisgICAgLCBtX21vZGUobW9kZSkK
KyAgICAsIG1fc3RhdGUoVW51c2VkKQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAg
ICAsIG1fdHJhbnNhY3Rpb24oZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLmdldCgpKQorICAgICwg
bV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnRhc2tUaW1l
ckZpcmVkKQorICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQoreworICAgIC8vIFdl
IHBhc3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVk
LgorICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCisgICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKK30KKwor
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6fklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIoKQoreworICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3Qg
dG8gZ2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KKyAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUgdHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8T3Bl
cmF0aW9uPiBhYm9ydFRhc2spCit7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICh0eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6Tm9ybWFsVGFzaykKKyAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOworICAgIGVs
c2UKKyAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKworICAgIGlm
IChhYm9ydFRhc2spCisgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2sp
OworCisgICAgaWYgKG1fc3RhdGUgPT0gVW51c2VkKQorICAgICAgICBzdGFydCgpOworICAgIGVs
c2UgaWYgKG1fc3RhdGUgPT0gUnVubmluZyAmJiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6OmFib3J0KCkKK3sKKyAgICBhYm9ydChJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yICh1bmtub3duIGNhdXNlKSIpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjphYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQoreworICAg
IElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6YWJvcnQiKTsKKyAgICBp
ZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB3YXNS
dW5uaW5nID0gbV9zdGF0ZSA9PSBSdW5uaW5nOworCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNl
IHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAg
IC8vIGFib3J0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNl
IHRvIGtlZXAgb3Vyc2VsdmVzCisgICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0
aG9kLgorICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBwcm90ZWN0KCp0aGlz
KTsKKworICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisK
KyAgICBpZiAod2FzUnVubmluZykKKyAgICAgICAgbV90cmFuc2FjdGlvbi5yb2xsYmFjaygpOwor
CisgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgorICAgIHdoaWxlICghbV9hYm9y
dFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRyPE9wZXJhdGlvbj4gdGFzayht
X2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSgwKTsK
KyAgICB9CisKKyAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29y
cykgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBm
aXJlZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQg
YWxsb3cgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFu
ZCBvcmRlciBpcyBjcml0aWNhbC4KKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFu
c2FjdGlvbi5yZXNldCgpOworCisgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJr
ZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAg
IC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBj
bG9zaW5nIGNvbm5lY3Rpb25zLgorICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKKyAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworCisgICAgaWYgKG1fY2FsbGJhY2tzKQor
ICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChtX2lkLCBlcnJvcik7CisKKyAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKworICAgIG1fZGF0
YWJhc2UgPSAwOworfQorCitib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmlzVGFz
a1F1ZXVlRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWVtcHRpdmVUYXNrUXVldWUu
aXNFbXB0eSgpICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsKK30KKworYm9vbCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjpoYXNQZW5kaW5nVGFza3MoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzIHx8ICFpc1Rhc2tRdWV1ZUVtcHR5KCk7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElE
QkN1cnNvckJhY2tlbmRJbXBsKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vy
c29yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp1bnJlZ2lzdGVy
T3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1
cnNvcnMucmVtb3ZlKGN1cnNvcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6cnVuKCkKK3sKKyAgICAvLyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVk
IHRoaXMgdHJhbnNhY3Rpb24uIFNjaGVkdWxlIGEgdGltZXIKKyAgICAvLyB0byBwcm9jZXNzIHRo
ZSBmaXJzdCB0YXNrLgorICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0
YXRlID09IFJ1bm5pbmcpOworICAgIEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7CisK
KyAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6c3RhcnQoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNl
ZCk7CisKKyAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOworICAgIG1fZGF0YWJhc2UtPnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6Y29tbWl0KCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6OmNvbW1pdCIpOworCisgICAgLy8gSW4gbXVsdGlwcm9jZXNzIHBv
cnRzLCBmcm9udC1lbmQgbWF5IGhhdmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBhbiBhYm9ydCBo
YXMgYWxyZWFkeQorICAgIC8vIGJlZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBi
YWNrLWVuZC4KKyAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Cisg
ICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKworICAgIC8vIEZyb250LWVuZCBoYXMgcmVxdWVz
dGVkIGEgY29tbWl0LCBidXQgdGhlcmUgbWF5IGJlIHRhc2tzIGxpa2UgY3JlYXRlSW5kZXggd2hp
Y2gKKyAgICAvLyBhcmUgY29uc2lkZXJlZCBzeW5jaHJvbm91cyBieSB0aGUgZnJvbnQtZW5kIGJ1
dCBhcmUgcHJvY2Vzc2VkIGFzeW5jaHJvbm91c2x5LgorICAgIGlmIChoYXNQZW5kaW5nVGFza3Mo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMg
b2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1p
dCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVw
IG91cnNlbHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAg
ICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICBib29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOworICAgIG1fc3RhdGUgPSBGaW5pc2hl
ZDsKKworICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fdHJhbnNhY3Rpb24uY29tbWl0
KCk7CisKKyAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykg
bXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJl
ZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxs
b3cgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBv
cmRlciBpcyBjcml0aWNhbC4KKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2Fj
dGlvbi5yZXNldCgpOworCisgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQg
YXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAgIC8v
IHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9z
aW5nIGNvbm5lY3Rpb25zLgorICAgIGlmICghdW51c2VkKQorICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAg
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisKKyAgICBpZiAoY29tbWl0
dGVkKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKG1faWQpOworICAgICAgICBt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChtX2lkLCBJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOworICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKyAgICB9CisKKyAgICBt
X2RhdGFiYXNlID0gMDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0
YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiopCit7Cisg
ICAgSURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0YXNrVGltZXJGaXJl
ZCIpOworICAgIEFTU0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKKworICAgIGlmIChtX3N0YXRl
ID09IFN0YXJ0UGVuZGluZykgeworICAgICAgICBtX3RyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAg
ICAgIG1fc3RhdGUgPSBSdW5uaW5nOworICAgIH0KKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5j
ZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAg
ICAvLyB0YXNrcy4gVGFrZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9iamVj
dCBhbGl2ZSBzbyB0aGF0CisgICAgLy8gdGhlIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9ucyBj
YW4gYmUgY2hlY2tlZC4KKyAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJv
dGVjdCgqdGhpcyk7CisKKyAgICBUYXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVt
cHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOworICAg
IHdoaWxlICghdGFza1F1ZXVlLT5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewor
ICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKKyAgICAgICAgT3duUHRyPE9wZXJh
dGlvbj4gdGFzayh0YXNrUXVldWUtPnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9y
bSh0aGlzKTsKKworICAgICAgICAvLyBFdmVudCBpdHNlbGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1
ZSBzaG91bGQgYmUgcHJvY2Vzc2VkIG5leHQuCisgICAgICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGlu
Z1ByZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVl
OworICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRhc2tzLCB3ZSBoYXZl
bid0IGFscmVhZHkgY29tbWl0dGVkL2Fib3J0ZWQsCisgICAgLy8gYW5kIHRoZSBmcm9udC1lbmQg
cmVxdWVzdGVkIGEgY29tbWl0LCBpdCBpcyBub3cgc2FmZSB0byBkbyBzby4KKyAgICBpZiAoIWhh
c1BlbmRpbmdUYXNrcygpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQgJiYgbV9jb21taXRQZW5kaW5n
KQorICAgICAgICBjb21taXQoKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCOjpjbG9zZU9wZW5DdXJzb3JzKCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFj
a2VuZEltcGwqPjo6aXRlcmF0b3IgaSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAhPSBtX29w
ZW5DdXJzb3JzLmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPmNsb3NlKCk7CisgICAgbV9vcGVu
Q3Vyc29ycy5jbGVhcigpOworfQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M4NjkxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAm
JiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJEYXRh
YmFzZUVycm9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xhc3Mg
SURCQ3Vyc29yQmFja2VuZEltcGw7CitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKKworY2xh
c3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwq
KTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2b2lkIGNvbW1pdCgpOworCisgICAgY2xhc3MgT3Bl
cmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbigpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
KikgPSAwOworICAgIH07CisKKyAgICB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pOworICAgIHZvaWQgcnVuKCk7CisgICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRf
dD4mIHNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQorICAgIHZvaWQg
c2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8T3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9wZXJh
dGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9CisgICAgdm9pZCBz
Y2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc093
blB0cjxPcGVyYXRpb24+LCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0
cik7CisgICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsK
KyAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7Cisg
ICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMr
KzsgfQorICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7
IH0KKyAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpIHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9CisgICAgaW50NjRfdCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIoaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworCisg
ICAgZW51bSBTdGF0ZSB7CisgICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tz
IHlldC4KKyAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IGJhY2tp
bmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVkLgorICAgICAgICBSdW5uaW5nLCAv
LyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0ZWQgYnV0IG5vdCB5ZXQgZmluaXNoZWQu
CisgICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJvcnRlZCBvciBjb21taXR0ZWQuCisgICAg
fTsKKworICAgIHZvaWQgc3RhcnQoKTsKKworICAgIGJvb2wgaXNUYXNrUXVldWVFbXB0eSgpIGNv
bnN0OworICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkgY29uc3Q7CisKKyAgICB2b2lkIHRhc2tU
aW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+Kik7CisgICAgdm9p
ZCBjbG9zZU9wZW5DdXJzb3JzKCk7CisKKyAgICBjb25zdCBpbnQ2NF90IG1faWQ7CisgICAgY29u
c3QgSGFzaFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOworICAgIGNvbnN0IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgYm9v
bCBtX2NvbW1pdFBlbmRpbmc7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsK
KworICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPE9wZXJhdGlvbj4gPiBUYXNrUXVldWU7CisgICAg
VGFza1F1ZXVlIG1fdGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVl
dWU7CisgICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7CisKKyAgICBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247CisKKyAgICAvLyBGSVhNRTogZGVsZXRlIHRo
ZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgorICAgIFRpbWVyPElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI+IG1fdGFza1RpbWVyOworICAgIGludCBtX3BlbmRpbmdQcmVl
bXB0aXZlRXZlbnRzOworCisgICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+IG1fb3Bl
bkN1cnNvcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAvLyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uY2M5YTE2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwCkBAIC0w
LDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxl
dmVsREI+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIoKSk7
Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yTGV2ZWxEQigpCit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZl
bERCOjp+SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIoKQoreworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1f
dHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgbV90cmFuc2FjdGlvbnMu
YWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvckxldmVsREI6OmRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNv
bnRhaW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5hZGQodHJh
bnNhY3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworCisgICAgaWYgKG1fcXVldWVk
VHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAgICAgICBBU1NFUlQoIW1f
c3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgICAgICBtX3F1
ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworICAgIH0gZWxzZSBpZiAobV9z
dGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAgICAgICAgbV9zdGFy
dGVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7CisKKyAgICBtX3RyYW5zYWN0aW9u
cy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMo
KTsKK30KKworI2lmbmRlZiBOREVCVUcKKy8vIFZlcmlmaWVzIGludGVybmFsIGNvbnNpc3RpZW5j
eSB3aGlsZSByZXR1cm5pbmcgd2hldGhlciBhbnl0aGluZyBpcyBmb3VuZC4KK2Jvb2wgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBp
ZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKQorICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgaWYgKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFu
c2FjdGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFmb3VuZCk7CisgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICB9CisgICAgQVNTRVJUKGZvdW5kID09IG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uKSk7CisgICAgcmV0dXJuIGZvdW5kOworfQorI2VuZGlmCisKK3ZvaWQgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkK
K3sKKyAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQobV9zdGFydGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSB8fCAoKm1f
c3RhcnRlZFRyYW5zYWN0aW9ucy5iZWdpbigpKS0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5i
ZWdpbigpOworICAgIHdoaWxlIChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSkgewor
ICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9ICppdDsK
KyAgICAgICAgKytpdDsKKyAgICAgICAgaWYgKGNhblJ1blRyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KSkgeworICAgICAgICAgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9u
KTsKKyAgICAgICAgICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOwor
ICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnJ1bigpOworICAgICAgICB9CisgICAgfQorfQorCitz
dGF0aWMgYm9vbCBkb1Njb3Blc092ZXJsYXAoY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUx
LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBzY29wZTIpCit7CisgICAgZm9yIChIYXNoU2V0PGlu
dDY0X3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNjb3BlMS5iZWdpbigpOyBpdCAhPSBzY29wZTEu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKHNjb3BlMi5jb250YWlucygqaXQpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQjo6Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fcXVl
dWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgc3dpdGNoICh0cmFu
c2FjdGlvbi0+bW9kZSgpKSB7CisgICAgY2FzZSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lv
bkNoYW5nZToKKyAgICAgICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rpb25zLnNpemUoKSA9PSAx
KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRP
bmx5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblJlYWRXcml0ZToKKyAgICAgICAgZm9yIChIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVn
aW4oKTsgaXQgIT0gbV9zdGFydGVkVHJhbnNhY3Rpb25zLmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICAgICBpZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRl
ICYmIGRvU2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdpbigpOyAqaXQgIT0gdHJhbnNhY3Rpb247
ICsraXQpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5l
bmQoKSk7CisgICAgICAgICAgICBpZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uUmVhZFdyaXRlICYmIGRvU2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwg
KCppdCktPnNjb3BlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yTGV2ZWxEQi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmU2MWE2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmgKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREJf
aAorI2RlZmluZSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQl9oCisKKyNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI7CisKKy8v
IFRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQu
CitjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI+IGNyZWF0
ZSgpOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCKCk7CisK
KyAgICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlzaC4K
KyAgICB2b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQiopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQiopOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNBY3RpdmUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIoKTsKKworICAgIHZvaWQgcHJvY2Vzc1N0YXJ0
ZWRUcmFuc2FjdGlvbnMoKTsKKyAgICBib29sIGNhblJ1blRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREIqKTsKKworICAgIC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQg
d2F5IHRvIGtlZXAgcmVmZXJlbmNlcyB0byBhbGwgdHJhbnNhY3Rpb25zLgorICAgIEhhc2hNYXA8
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiosIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCPiA+IG1fdHJhbnNhY3Rpb25zOworICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZm
ZXJlbnQgc3RhdGVzIGFyZSBncm91cGVkIGJlbG93LgorICAgIExpc3RIYXNoU2V0PElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREIqPiBtX3F1ZXVlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNoU2V0
PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IDZkOWU0YjAuLjUwNGU3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzA2Mywy
MyArMzA2MywyMyBAQCBlbmFibGU/KElOREVYRURfREFUQUJBU0UpIHsKICAgICAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55LmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxs
YmFja3MuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKLSAgICAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCBcCisgICAgICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCBcCiAgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBcCiAgICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmggXAotICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCBcCiAgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIFwKICAgICAgICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkV2ZW50RGlzcGF0Y2hlci5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5oIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5k
TGV2ZWxEQi5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkhpc3RvZ3JhbXMuaCBc
CiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggXAogICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXkuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJh
bmdlLmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIFwKLSAg
ICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKyAg
ICAgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZl
bERCLmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggXAogICAgICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIFwKICAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSW5kZXhlZERCLmgKQEAgLTMwOTIsMTkgKzMwOTIsMTkgQEAgZW5hYmxlPyhJTkRF
WEVEX0RBVEFCQVNFKSB7CiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwK
ICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBcCi0gICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwIFwKICAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwKLSAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwIFwKICAgICAgICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKICAgICAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4LmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAg
XAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAgXAogICAgICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgXAotICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgXAogICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBcCiAgICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRi
L1BhZ2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggNWQ5NDQxNy4uZDdiNGZlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC02NzU1
LDE3ICs2NzU1LDE3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCQW55LmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvci5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJDdXJzb3JCYWNrZW5kSW1w
bC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxs
ZXZlbGRiXElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJc
bGV2ZWxkYlxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnkuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRi
XGxldmVsZGJcSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QkluZGV4LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhl
ZGRiXElEQktleS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGlu
ZGV4ZWRkYlxJREJLZXlSYW5nZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxN
b2R1bGVzXGluZGV4ZWRkYlxJREJPYmplY3RTdG9yZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxldmVs
ZGJcSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJSZXF1ZXN0LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQlRyYW5zYWN0aW9uLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXFBhZ2VHcm91
cEluZGV4ZWREYXRhYmFzZS5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDRlOWI4NC4uY2ZlMjJkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY0
Nyw3ICsxNjQ3LDEzIEBACiAJCTUxMUVGMkNGMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQkFueUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTFFRjJDQzE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJBbnlDdXN0b20uY3BwICovOyB9OwogCQk1
MTFFRjJEMDE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjJDRDE3RjBGREYx
MDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgKi87IH07CiAJCTUxMUVGMkQxMTdG
MEZERjEwMEU0RkExNiAvKiBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVGMkNFMTdGMEZERjEwMEU0RkEx
NiAvKiBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCAqLzsgfTsKLQkJNTExRUYzMjkxN0YwRkYw
MzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjMyODE3RjBGRjAzMDBFNEZBMTYgLyogSURCQmFj
a2luZ1N0b3JlLmNwcCAqLzsgfTsKKwkJNTExRUYzMzkxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkJh
Y2tpbmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTExRUYzMkIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZUxl
dmVsREIuY3BwICovOyB9OworCQk1MTFFRjMzQTE3RjIzQjczMDBFNEZBMTYgLyogSURCQ3Vyc29y
QmFja2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTExRUYzMkQxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkN1cnNvckJhY2tlbmRMZXZl
bERCLmNwcCAqLzsgfTsKKwkJNTExRUYzM0IxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkRhdGFiYXNl
QmFja2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTExRUYzMkYxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFja2VuZExl
dmVsREIuY3BwICovOyB9OworCQk1MTFFRjMzQzE3RjIzQjczMDBFNEZBMTYgLyogSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMUVGMzMxMTdGMjNCNjkwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExl
dmVsREIuY3BwICovOyB9OworCQk1MTFFRjMzRDE3RjIzQjczMDBFNEZBMTYgLyogSURCTGV2ZWxE
QkNvZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTFFRjMzMzE3RjIzQjY5MDBFNEZBMTYgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgKi87IH07
CisJCTUxMUVGMzNFMTdGMjNCNzMwMEU0RkExNiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZl
bERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MUVGMzM1MTdGMjNCNjkwMEU0RkExNiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNw
cCAqLzsgfTsKKwkJNTExRUYzM0YxN0YyM0I3MzAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTExRUYzMzcxN0YyM0I2OTAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIuY3BwICovOyB9OwogCQk1MTFGMjMxOTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRo
cmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTFGMjMxNTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5jcHAgKi87IH07CiAJCTUx
MUYyMzFBMERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGMjMxNjBEQzE2MERBMDA0RjAwMzIg
LyogU3RvcmFnZVRocmVhZC5oICovOyB9OwogCQk1MTI2RTZCQjBBMkUzQjEyMDA1QzI5RkEgLyog
SWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMjZFNkI5MEEyRTNCMTIwMDVDMjlGQSAvKiBJY29uRGF0YWJhc2UuY3BwICovOyB9
OwpAQCAtMTczMSw2ICsxNzM3LDcgQEAKIAkJNTFDODFCODkwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZU
UERpcmVjdG9yeVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2Vy
LmNwcCAqLzsgfTsKIAkJNTFDODFCOEEwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFD
ODFCODgwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5oICovOyB9OwogCQk1
MUNCRkM5OTBEMTBFNDgzMDAyREJGNTEgLyogQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0JGQzk4MEQxMEU0
ODMwMDJEQkY1MSAvKiBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxQ0VGQjJCMTdGMjQ5MjkwMEFDQUEx
OCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUNFRkIyOTE3RjI0OTIxMDBBQ0FBMTgg
LyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwICovOyB9OwogCQk1MUQwQzUx
NjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAv
KiBKU1N0b3JhZ2VDdXN0b20uY3BwICovOyB9OwogCQk1MURDRTgwMjBDQUM5RjFDMDA0ODgzNTgg
LyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRENFODAxMENBQzlGMUMwMDQ4ODM1OCAvKiBKU1NR
TFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwICovOyB9OwogCQk1MURGNkQ3RTBCOTJBMTZEMDBD
MkRDODUgLyogVGhyZWFkQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxREY2RDdEMEI5MkExNkQwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMTI0LDE2
ICszMTMxLDExIEBACiAJCTk3MTJBNUFEMTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1NTQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFz
ZS5jcHAgKi87IH07CiAJCTk3MTJBNUFFMTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTU1MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2Uu
aCAqLzsgfTsKIAkJOTcxMkE1QjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkFueS5oICovOyB9OwotCQk5NzEyQTVCMzE1MDA0RURBMDA0OEFGMTAgLyog
SURCQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzEyQTU1QTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggKi87
IH07CiAJCTk3MTJBNUI0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVCMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCAqLzsgfTsKIAkJOTcxMkE1QjYxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcxMkE1NUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5oICovOyB9Owot
CQk5NzEyQTVCODE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUYxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1
QjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2MDE1MDA0RURBMDA0OEFG
MTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLzsgfTsKIAkJOTcxMkE1QkExNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCTk3MTJBNUJDMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTYzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JX
aXRoVmFsdWUuaCAqLzsgfTsKIAkJOTcxMkE1QkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFi
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU2NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCAqLzsgfTsKLQkJOTcxMkE1QzEx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjgxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovOyB9OwotCQk5NzEyQTVDMjE1MDA0
RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLzsgfTsKIAkJOTcxMkE1QzMxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oICovOyB9OwogCQk5NzEyQTVDNDE1MDA0RURBMDA0
OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZUNhbGxiYWNrcy5oICovOyB9OwogCQk5NzEyQTVDNTE1MDA0RURBMDA0OEFGMTAgLyogSURC
RGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwICovOyB9OwpAQCAtMzE0Myw4ICszMTQ1LDYgQEAKIAkJOTcxMkE1Q0Ex
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3MTE1MDA0RURBMDA0OEFGMTAg
LyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLzsgfTsKIAkJOTcxMkE1Q0QxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlz
cGF0Y2hlci5oICovOyB9OwogCQk5NzEyQTVDRjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9y
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
NzYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCAqLzsgfTsKLQkJOTcxMkE1RDExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3ODE1MDA0RURBMDA0OEFGMTAg
LyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RDIxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oICovOyB9OwogCQk5NzEyQTVEMzE1MDA0RURBMDA0OEFGMTAgLyog
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0ExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLzsgfTsKQEAgLTMx
NTIsMTcgKzMxNTIsMTEgQEAKIAkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBh
dGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTg2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggKi87IH07CiAJCTk3MTJBNUUzMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJh
bmdlLmggKi87IH07CiAJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
OTExNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmggKi87IH07Ci0JCTk3MTJBNUVD
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTkzMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1
RUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk0MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi87IH07CiAJCTk3MTJBNUVG
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk2MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLzsgfTsKIAkJ
OTcxMkE1RjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk3
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi87IH07
CiAJCTk3MTJBNUYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5OTE1MDA0RURBMDA0OEFG
MTAgLyogSURCUmVxdWVzdC5oICovOyB9OwogCQk5NzEyQTVGNDE1MDA0RURBMDA0OEFGMTAgLyog
SURCVHJhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1OUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCAqLzsgfTsKIAkJOTcx
MkE1RjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb24uaCAqLzsgfTsKLQkJOTcxMkE1RjgxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuY3BwICovOyB9OwotCQk5NzEyQTVGOTE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCAqLzsgfTsKLQkJOTcxMkE1RkMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwICovOyB9OwotCQk5NzEyQTVGRDE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCAqLzsgfTsKIAkJOTcxMkE1RkUxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTVBNTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmNwcCAqLzsgfTsKIAkJOTcxMkE1RkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZl
cnNpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcxMkE1QTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVu
dC5oICovOyB9OwogCQk5NzEyQTYwNDE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhl
ZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNUFCMTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2Uu
Y3BwICovOyB9OwpAQCAtODI0NSw3ICs4MjM5LDIwIEBACiAJCTUxMUVGMkNDMTdGMEZERjEwMEU0
RkExNiAvKiBKU0lEQkFueUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0lEQkFueUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxMUVGMkNEMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCRGF0YWJhc2VDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFFRjJDRTE3RjBGREYxMDBFNEZBMTYg
LyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTExRUYzMjgxN0YwRkYwMzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJCYWNraW5nU3RvcmUu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkJh
Y2tpbmdTdG9yZUxldmVsREIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUxldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMyQzE3
RjIzQjY5MDBFNEZBMTYgLyogSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBJREJCYWNraW5nU3RvcmVMZXZlbERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTExRUYzMkQxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMyRTE3RjIzQjY5MDBFNEZBMTYgLyog
SURCQ3Vyc29yQmFja2VuZExldmVsREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yQmFja2Vu
ZExldmVsREIuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFj
a2VuZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkYxN0Yy
M0I2OTAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMzMDE3RjIzQjY5MDBFNEZBMTYgLyogSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzExN0YyM0I2
OTAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTFFRjMzMjE3RjIzQjY5MDBFNEZBMTYgLyogSURCRmFjdG9yeUJhY2tl
bmRMZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzMxN0YyM0I2OTAwRTRGQTE2
IC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCTGV2ZWxEQkNv
ZGluZy5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2Rp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMzNDE3RjIzQjY5MDBF
NEZBMTYgLyogSURCTGV2ZWxEQkNvZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJMZXZlbERCQ29k
aW5nLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2Rpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzUxN0YyM0I2OTAwRTRGQTE2
IC8qIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
SURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTFFRjMzNjE3RjIzQjY5MDBFNEZBMTYgLyogSURCT2JqZWN0U3Rv
cmVCYWNrZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRM
ZXZlbERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzcx
N0YyM0I2OTAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMzODE3RjIzQjY5MDBFNEZBMTYg
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTExRjIzMTUwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVRocmVhZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUYyMzE2MERDMTYwREEwMDRGMDAzMiAvKiBTdG9y
YWdlVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUaHJl
YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyNkU2QjkwQTJFM0IxMjAwNUMy
OUZBIC8qIEljb25EYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSWNvbkRhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgz
MzMsNiArODM0MCw4IEBACiAJCTUxQzgxQjg3MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3Rv
cnlQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZUUERp
cmVjdG9yeVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzgxQjg4
MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZUUERpcmVjdG9yeVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUNCRkM5ODBEMTBFNDgzMDAyREJGNTEgLyogQ2FjaGVkRnJhbWVQbGF0
Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkRnJhbWVQ
bGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFDRUZCMjkxN0Yy
NDkyMTAwQUNBQTE4IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcDsgcGF0
aCA9IE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxl
dmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUNFRkIyQTE3RjI0OTIx
MDBBQ0FBMTggLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFEMEM1MTUwREFBOTBCNzAwM0IzODMxIC8qIEpT
U3RvcmFnZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1N0b3JhZ2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MURDRTgw
MTBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxREY2RDdEMEI5MkExNkQw
MEMyREM4NSAvKiBUaHJlYWRDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUaHJlYWRDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc0NSwxOSAr
OTc1NCwxNCBAQAogCQk5NzEyQTU1NjE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhl
ZERhdGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBET01XaW5kb3dJbmRleGVkRGF0
YWJhc2UuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFi
YXNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NTgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJB
bnkuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NzEyQTU1OTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBJREJBbnkuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCQW55LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1NUExNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJREJCYWNraW5nU3RvcmUuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU1QjE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQkNhbGxiYWNrcy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJh
Y2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTVEMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
Q3Vyc29yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NUUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNv
ci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCQ3Vyc29yLmlkbDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTk3MTJBNTVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3JCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJ
REJDdXJzb3JCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NjExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU2MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29y
V2l0aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvcldp
dGhWYWx1ZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTY0MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JXaXRoVmFsdWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkN1cnNv
cldpdGhWYWx1ZS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFs
dWUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU2NjE1MDA0RURBMDA0
OEFGMTAgLyogSURCRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SURCRGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTY3MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRGF0YWJhc2UuaWRsOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk5NzEyQTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU2OTE1
MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MTJBNTZBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1
NkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzLmg7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NzEyQTU2QzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc2OCw4
ICs5NzcyLDYgQEAKIAkJOTcxMkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0
Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJFdmVudERpc3BhdGNo
ZXIuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU3NjE1MDA0RURBMDA0OEFGMTAgLyogSURC
RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5Lmg7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MTJBNTc3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJGYWN0b3J5LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEy
QTU3ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU3OTE1MDA0RURBMDA0OEFGMTAgLyogSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTdBMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5j
cHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTdCMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkluZGV4Lmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc4MCw4
ICs5NzgyLDYgQEAKIAkJOTcxMkE1OEIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJLZXlSYW5nZS5pZGw7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MTJBNTkxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTcxMkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJB
NTkzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTk0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTcxMkE1OTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTcxMkE1OTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvci5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5OTE1
MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJREJSZXF1ZXN0Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Nzg5LDEwICs5Nzg5LDYgQEAKIAkJ
OTcxMkE1OUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSURCVHJhY2luZy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5RDE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSURCVHJhbnNhY3Rpb24uaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTlFMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
SURCVHJhbnNhY3Rpb24uaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU5RjE1MDA0RURBMDA0
OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3
MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNUE0MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTcxMkE1QTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1QTYxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NzEyQTVBNzE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsOyBw
YXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0ODQxLDYgKzE0ODM3LDI5IEBACiAJCQluYW1lID0g
YW5pbWF0aW9uOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTExRUYzMkEx
N0YyMzZFOTAwRTRGQTE2IC8qIGxldmVsZGIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJ
CWNoaWxkcmVuID0gKAorCQkJCTUxMUVGMzJCMTdGMjNCNjkwMEU0RkExNiAvKiBJREJCYWNraW5n
U3RvcmVMZXZlbERCLmNwcCAqLywKKwkJCQk1MTFFRjMyQzE3RjIzQjY5MDBFNEZBMTYgLyogSURC
QmFja2luZ1N0b3JlTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzJEMTdGMjNCNjkwMEU0RkExNiAv
KiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgKi8sCisJCQkJNTExRUYzMkUxN0YyM0I2OTAw
RTRGQTE2IC8qIElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmggKi8sCisJCQkJNTExRUYzMkYxN0Yy
M0I2OTAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwICovLAorCQkJCTUx
MUVGMzMwMTdGMjNCNjkwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmggKi8s
CisJCQkJNTExRUYzMzExN0YyM0I2OTAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qi5jcHAgKi8sCisJCQkJNTExRUYzMzIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzMzMTdGMjNCNjkwMEU0RkExNiAvKiBJREJMZXZl
bERCQ29kaW5nLmNwcCAqLywKKwkJCQk1MTFFRjMzNDE3RjIzQjY5MDBFNEZBMTYgLyogSURCTGV2
ZWxEQkNvZGluZy5oICovLAorCQkJCTUxMUVGMzM1MTdGMjNCNjkwMEU0RkExNiAvKiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcCAqLywKKwkJCQk1MTFFRjMzNjE3RjIzQjY5MDBFNEZB
MTYgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzM3MTdG
MjNCNjkwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCAqLywKKwkJ
CQk1MTFFRjMzODE3RjIzQjY5MDBFNEZBMTYgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qi5oICovLAorCQkJCTUxQ0VGQjI5MTdGMjQ5MjEwMEFDQUExOCAvKiBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yTGV2ZWxEQi5jcHAgKi8sCisJCQkJNTFDRUZCMkExN0YyNDkyMTAwQUNBQTE4IC8q
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmggKi8sCisJCQkpOworCQkJbmFtZSA9
IGxldmVsZGI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1MTI2RTZCNjBB
MkUzQUVGMDA1QzI5RkEgLyogaWNvbiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC0xNjczNSwyMCArMTY3NTQsMTcgQEAKIAkJOTcxMkE1NTMxNTAwNEUzQzAw
NDhBRjEwIC8qIGluZGV4ZWRkYiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTExRUYzMkExN0YyMzZFOTAwRTRGQTE2IC8qIGxldmVsZGIgKi8sCiAJCQkJ
OTcxMkE1NTQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAg
Ki8sCiAJCQkJOTcxMkE1NTUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRh
YmFzZS5oICovLAogCQkJCTk3MTJBNTU2MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuaWRsICovLAogCQkJCTUxMUVGMjg4MTdGMEZBNkUwMEU0RkExNiAvKiBJREJB
bnkuY3BwICovLAogCQkJCTk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLywK
IAkJCQk5NzEyQTU1OTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmlkbCAqLywKLQkJCQk1MTFF
RjMyODE3RjBGRjAzMDBFNEZBMTYgLyogSURCQmFja2luZ1N0b3JlLmNwcCAqLywKLQkJCQk5NzEy
QTU1QTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJOTcxMkE1
NUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oICovLAogCQkJCTUxMUVGMjg5MTdG
MEZBNkUwMEU0RkExNiAvKiBJREJDdXJzb3IuY3BwICovLAogCQkJCTk3MTJBNTVEMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLywKIAkJCQk5NzEyQTU1RTE1MDA0RURBMDA0OEFGMTAg
LyogSURCQ3Vyc29yLmlkbCAqLywKLQkJCQk5NzEyQTU1RjE1MDA0RURBMDA0OEFGMTAgLyogSURC
Q3Vyc29yQmFja2VuZEltcGwuY3BwICovLAotCQkJCTk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oICovLAogCQkJCTk3MTJBNTYxMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi8sCiAJCQkJNTExRUYyOEExN0YwRkE2
RTAwRTRGQTE2IC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi8sCiAJCQkJOTcxMkE1NjMxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovLApAQCAtMTY3NTYsOCArMTY3
NzIsNiBAQAogCQkJCTUxMUVGMjhCMTdGMEZBNkUwMEU0RkExNiAvKiBJREJEYXRhYmFzZS5jcHAg
Ki8sCiAJCQkJOTcxMkE1NjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmggKi8sCiAJ
CQkJOTcxMkE1NjcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmlkbCAqLywKLQkJCQk5
NzEyQTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8s
Ci0JCQkJOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwu
aCAqLywKIAkJCQk5NzEyQTU2QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmggKi8sCiAJCQkJOTcxMkE1NkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFi
YXNlQ2FsbGJhY2tzLmggKi8sCiAJCQkJOTcxMkE1NkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8sCkBAIC0xNjc3MCw4ICsxNjc4NCw2IEBACiAJCQkJ
NTExRUYyOEQxN0YwRkE2RTAwRTRGQTE2IC8qIElEQkZhY3RvcnkuY3BwICovLAogCQkJCTk3MTJB
NTc2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmggKi8sCiAJCQkJOTcxMkE1NzcxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaWRsICovLAotCQkJCTk3MTJBNTc4MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwICovLAotCQkJCTk3MTJBNTc5MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCAqLywKIAkJCQk5NzEyQTU3
QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovLAog
CQkJCTk3MTJBNTdCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oICovLAogCQkJCTUxMUVGMjhFMTdGMEZBNkYwMEU0RkExNiAvKiBJREJIaXN0b2dyYW1zLmgg
Ki8sCkBAIC0xNjc4OSw4ICsxNjgwMSw2IEBACiAJCQkJNTExRUYyOTMxN0YwRkE2RjAwRTRGQTE2
IC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLywKIAkJCQk5NzEyQTU5MTE1MDA0RURBMDA0OEFGMTAg
LyogSURCT2JqZWN0U3RvcmUuaCAqLywKIAkJCQk5NzEyQTU5MjE1MDA0RURBMDA0OEFGMTAgLyog
SURCT2JqZWN0U3RvcmUuaWRsICovLAotCQkJCTk3MTJBNTkzMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk5NzEyQTU5NDE1MDA0RURBMDA0
OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovLAogCQkJCTUxMUVGMjk0MTdG
MEZBNkYwMEU0RkExNiAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCAqLywKIAkJCQk1MTFFRjI5NTE3
RjBGQTZGMDBFNEZBMTYgLyogSURCT3BlbkRCUmVxdWVzdC5oICovLAogCQkJCTUxMUVGMjk2MTdG
MEZBNkYwMEU0RkExNiAvKiBJREJPcGVuREJSZXF1ZXN0LmlkbCAqLywKQEAgLTE2ODAzLDEwICsx
NjgxMyw2IEBACiAJCQkJNTExRUYyOTgxN0YwRkE2RjAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9u
LmNwcCAqLywKIAkJCQk5NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24u
aCAqLywKIAkJCQk5NzEyQTU5RTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaWRs
ICovLAotCQkJCTk3MTJBNTlGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmNwcCAqLywKLQkJCQk5NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oICovLAotCQkJCTk3MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLywKLQkJCQk5NzEyQTVBNDE1MDA0RURBMDA0
OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovLAogCQkJCTk3MTJBNUE1MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovLAogCQkJCTk3MTJB
NUE2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLywKIAkJCQk5
NzEyQTVBNzE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCAqLywK
QEAgLTIyNzc4LDE1ICsyMjc4NCwxMiBAQAogCQkJCTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAv
KiBJY29uUmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NUJBQzJCMDEzNjBCQkFCMDA1REEy
NTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1QjExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkFueS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1QjMxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU4NUE2NjMxMUQ0
RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3MTJBNUI0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3MTJBNUI2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTk3MTJBNUI5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1QkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUJDMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
MTJBNUJGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJOTcxMkE1QzIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3MTJBNUMzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUM0MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcx
MkE1QzYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMjc5NSw3ICsyMjc5OCw2IEBACiAJCQkJOTcxMkE1Q0ExNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEy
QTVDRDE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzEyQTVDRjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJOTcxMkE1RDIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5k
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVENjE1
MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNURD
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjI4MDMsMTMg
KzIyODA1LDEwIEBACiAJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGgu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlS
YW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RUExNTAwNEVEQTAwNDhBRjEwIC8qIElE
Qk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVFRDE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcx
MkE1RjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3MTJBNUYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVGNDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJh
Y2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RjYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVGOTE1MDA0RURBMDA0OEFG
MTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTcx
MkE1RkQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzFENTdDMEYzMzgxOTAwMEY5Q0U0RSAv
KiBJZGVudGlmaWVyUmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTEzQTI0MjEzRDQ5RUJBMDBG
NUIwNUMgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NDExLDYg
KzI1NDEwLDcgQEAKIAkJCQk4MkUzRDhERTEyMkVBMEQxMDAzQUU1QkMgLyogQ1NTUHJvcGVydHlT
b3VyY2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUExMkRGMERDMDQxNDgwMEM5QUZB
RCAvKiBDU1NSZWZsZWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZEMDYwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTExRUYzMzkx
N0YyM0I3MzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTgwRTZEMDkwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGVMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTM3MUY1MUEyMEQyNjJGQTAwMEVDRTBENSAvKiBDU1NTZWdtZW50ZWRG
b250RmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNzM0RjBBMTk5Qzc3MDA3RkI4QzUg
LyogQ1NTU2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTQ3MCw3ICsyNTQ3MCw2IEBA
CiAJCQkJRkQzMTYwMkQxMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5Tm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRDMxNjAzMDEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlQcm9jZXNzb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFODNBQzQwQURBRkZEODAwOTM1NEY2IC8qIERlbGV0ZUJ1
dHRvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTFFRjMyOTE3RjBGRjAzMDBFNEZBMTYgLyog
SURCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDRTgzQUMzMEFEQUZGRDcw
MDkzNTRGNiAvKiBEZWxldGVCdXR0b25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMzA5RERFMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REUwMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU5MTgsNiArMjU5MTcsNyBA
QAogCQkJCTkzRjE5QUZEMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOERGM0ZEMTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM4NjQxMjI4ODNFOTAwQjgxRkY4IC8q
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUVGMzNDMTdG
MjNCNzMwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTdCNzkxQTkxNEM2QTYzMzAwRjIwMkQxIC8qIEhUTUxDb250ZW50RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1RDRGNTFERjEzMjcyNTQ4MDAxNkY1NDEgLyogSFRNTENv
bnZlcnRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY1QzA0MURBMEZGQ0E3Q0UwMDgzOUQ0QSAv
KiBIVE1MRGF0YUxpc3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYwMzQsMTYgKzI2
MDM0LDEwIEBACiAJCQkJNTFFMUVDQzAwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDUwOTlDNDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU4NUE2NjIxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTcxMkE1QjgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3
MTJBNUMxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3MTJBNUM1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1QzkxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJB
NUQxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUVDMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
MTJBNUVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUY4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUZDMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3MTJBNUZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3MUQ1N0IwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50
aWZpZXJSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTkxM0EyNDExM0Q0OUVCQTAwRjVCMDVD
IC8qIElkZW50aWZpZXJzRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MzgyLDYgKzI2
Mzc2LDcgQEAKIAkJCQk0QUQwMTczQzEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBNjBBMUNFOTA1MDBCNDJCMjUgLyog
SlNIVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBODBB
MUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUxMUVGMzNBMTdGMjNCNzMwMEU0RkExNiAvKiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBQTBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1M
UHJlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNDIyNkU1QTExNjNENjY3MDA4Qjgz
OTcgLyogSlNIVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJB
RUM3MEExRDI5N0IwMEI0MkIyNSAvKiBKU0hUTUxRdW90ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yNzE5Miw2ICsyNzE4Nyw3IEBACiAJCQkJMjkzRUFFMjExMzU2QjMyRTAwNjdBQ0Y5
IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4QzZF
QTYxOTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTExRUYzM0QxN0YyM0I3MzAwRTRGQTE2
IC8qIElEQkxldmVsREJDb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNURGRThGNTYwRDE2
NDc3QjAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTYyQzdGNDExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOUJEMEJGOTQxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVldWUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNzMxOCw2ICsyNzMxNCw3IEBACiAJCQkJQTFFMTE1NDgxMzAx
NUM1RDAwNTRBQzhDIC8qIFNwb3RMaWdodFNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
N0JDNkEzRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBMkU2RTdBMENDNTU2RDUwMDRBMjA2MiAvKiBTUUxpdGVBdXRob3JpemVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUxMUVGMzNFMTdGMjNCNzMwMEU0RkExNiAvKiBJREJPYmplY3RT
dG9yZUJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMjI0NjQ5MENDOThE
REIwMEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNUE2
ODQyNDBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTIyNDY0QjBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjc0MjIsNiArMjc0MTksNyBAQAogCQkJCTA4QjVGMjU1MTNCNUZG
RjIwMDI5NTlFQyAvKiBTVkdBbmltYXRlZFBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDNC
OTMzNkExM0IyNjFCMTAwNDU4NEJGIC8qIFNWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQzMUEzMDIxMTNCODlEQ0MwMDc3OTFFNCAvKiBTVkdBbmltYXRlZFByZXNl
cnZlQXNwZWN0UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTExRUYzM0YxN0YyM0I3MzAw
RTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODM2RkJDRUMxNzhDMTE3RjAwQjIxQTE1IC8qIFNWR0FuaW1hdGVkUHJvcGVydHkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDMxNDJFN0ExM0IxRTk3NzAwRjFDODcxIC8qIFNWR0FuaW1h
dGVkUmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0M0E2MjY2NzEzQjNEMTEwMDBBQzk0Qjgg
LyogU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzU0NCw2ICsyNzU0
Miw3IEBACiAJCQkJQjIyMjdBOEIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E4RTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBOTAwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BvbHlnb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxQ0VGQjJCMTdGMjQ5
MjkwMEFDQUExOCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMjIyN0E5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seWxpbmVFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NDNCODU3MTdFQjc1OEYwMDNCRTkzQSAvKiBT
VkdQcm9wZXJ0eUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBOTYwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
NzYwNSw2ICsyNzYwNCw3IEBACiAJCQkJOTM0M0NCODExMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRD
b2RlY1VURjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyQjk3QzkxMzEzODk0MzAwOEJFRjRC
IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JD
ODRCMzEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUxMUVGMzNCMTdGMjNCNzMwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM4NDgzMTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0
RG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNDYwRDAwNkMxRDAw
RUY2RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTA1REE2MjBG
M0FBNjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMg
Ki8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212591</attachid>
            <date>2013-09-25 09:51:56 -0700</date>
            <delta_ts>2013-09-25 10:53:07 -0700</delta_ts>
            <desc>Patch v3 - Hopefully this applies!</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>355966</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzljNzllNi4uNjY1MGZiZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTUsNiArNSw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nYW1lcGFkIgogICAgICIke1dFQkNPUkVfRElSfS9N
b2R1bGVzL2dlb2xvY2F0aW9uIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRk
YiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYiIKICAgICAi
JHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRpZXVpIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1
bGVzL21lZGlhc291cmNlIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhc3RyZWFt
IgpAQCAtODAzLDMzICs4MDQsMzMgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJBbnkuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAotICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5j
cHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAKICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCiAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGgu
Y3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJS
ZXF1ZXN0LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWRE
YXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4
ZWREYXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUxldmVsREIuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JC
YWNrZW5kTGV2ZWxEQi5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJG
YWN0b3J5QmFja2VuZExldmVsREIuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJMZXZlbERCQ29kaW5nLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwCiAKICAgICBNb2R1bGVzL21lZGlhc291
cmNlL01lZGlhU291cmNlLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2VS
ZWdpc3RyeS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYTMxNGIwLi5mYmY1N2I0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTMtMDktMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vcmUgcmVmYWN0b3JpbmcgdG8gbWFrZSB0aGUgTGV2ZWxEQiBkZXBl
bmRlbmNpZXMgb2YgSURCIG1vcmUgb2J2aW91cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTg4MAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXhl
eSBQcm9za3VyeWFrb3YuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRocmVlIHRoaW5nczoK
KyAgICAgICAgMSAtIE1vdmVzIHNvbWUgZmlsZXMgdG8gdGhlIGluZGV4ZWRkYi9sZXZlbGRiIHN1
YmRpcmVjdG9yeSwgcmVuYW1pbmcgdGhlbSBpbiB0aGUgcHJvY2Vzcy4KKyAgICAgICAgMiAtIFJl
bmFtZXMgc29tZSBjbGFzc2VzLgorICAgICAgICAzIC0gQWRkcyAiVVNFKExFVkVMREIpIiBndWFy
ZHMgaW4gYWRkaXRpb24gdG8gdGhlIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSBndWFyZCBmb3Ig
dGhvc2UgZmlsZXMuCisKKyAgICAgICAgUHJvamVjdCBmaWxlIHVwZGF0ZXM6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qOgorCisgICAgICAgIEZpbGUgcmVuYW1lcywgY2xhc3MgcmVuYW1l
cywgYW5kIFVTRShMRVZFTERCKSBndWFyZHM6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKTogQWRkIGEgbnVsbCByZXR1cm4gaWYgVVNF
KExFVkVMREIpIGlzIGRpc2FibGVkIGFzIGEgc3RvcCBnYXAgbWVhc3VyZSB1bnRpbAorICAgICAg
ICAgIHRoZXJlIGlzIGEgbm9uLUxldmVsREIgaW1wbC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmguCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRMZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
LgorCisKIDIwMTMtMDktMjUgIEFsYmVydG8gR2FyY2lhICA8YmVydG9AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBGaXggd2FybmluZyBpbiBtYWtlcHJvcC5wbApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggMjFiNjQ4ZC4uYTdiYzhhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCkBAIC0xODgzLDE3ICsxODgzLDE3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCBcCi0JU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBc
Ci0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1
cnNvckJhY2tlbmRMZXZlbERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIFwKQEAgLTE5MDUs
OCArMTkwNSw4IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaCBcCi0JU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJG
YWN0b3J5QmFja2VuZExldmVsREIuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCBcCkBAIC0xOTIzLDggKzE5MjMs
OCBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmggXAogCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmggXAotCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIFwKLQlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwIFwKQEAgLTE5MzQsMTAgKzE5
MzQsMTAgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYWNpbmcuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCisJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggY2FlZThkMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6b3BlbihT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgTE9H
X0VSUk9SKCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6Om9w
ZW4gaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPigpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0
b3JlOjpvcGVuSW5NZW1vcnkoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmKQotewotICAg
IExPR19FUlJPUigiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0b3Jl
OjpvcGVuSW5NZW1vcnkgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0gICAgcmV0dXJuIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPigpOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0T2Jq
ZWN0U3RvcmVzKGludDY0X3QsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKikK
LXsKLSAgICBMT0dfRVJST1IoIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzIGlzIGN1cnJlbnRseSBlbXB0eSIpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6YWR2YW5jZSh1bnNp
Z25lZCBsb25nKQotewotICAgIExPR19FUlJPUigiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24g
b2YgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmFkdmFuY2UgaXMgY3VycmVudGx5IGVtcHR5Iik7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpj
b250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSosIEl0ZXJhdG9yU3RhdGUpCi17Ci0gICAgTE9H
X0VSUk9SKCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6OkN1
cnNvcjo6Y29udGludWVGdW5jdGlvbiBpcyBjdXJyZW50bHkgZW1wdHkiKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLUlEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElE
QkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2lu
Z1N0b3JlKQotewotfQotCi12b2lkIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2lu
KCkKLXsKLSAgICBMT0dfRVJST1IoIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luIGlzIGN1cnJlbnRseSBlbXB0eSIpOwotfQot
Ci1ib29sIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCi17Ci0gICAgTE9H
X0VSUk9SKCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpjb21taXQgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQot
ewotICAgIExPR19FUlJPUigiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2sgaXMgY3VycmVudGx5IGVtcHR5Iik7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY3MGZkYS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJCYWNraW5n
U3RvcmVfaAotI2RlZmluZSBJREJCYWNraW5nU3RvcmVfaAotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5o
IgotI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgot
I2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGV2ZWxEQkNvbXBhcmF0b3I7Ci1jbGFzcyBM
ZXZlbERCRGF0YWJhc2U7Ci1jbGFzcyBMZXZlbERCVHJhbnNhY3Rpb247Ci1jbGFzcyBJREJLZXk7
Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotY2xhc3MgU2hhcmVk
QnVmZmVyOwotCi1jbGFzcyBMZXZlbERCRmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
TGV2ZWxEQkZhY3RvcnkoKSB7IH0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFi
YXNlPiBvcGVuTGV2ZWxEQihjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBMZXZlbERCQ29t
cGFyYXRvciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVzdHJveUxldmVsREIoY29uc3QgU3Ry
aW5nJiBmaWxlTmFtZSkgPSAwOwotfTsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVibGlj
IFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7Ci1wdWJsaWM6Ci0gICAgY2xhc3MgVHJhbnNh
Y3Rpb247Ci0KLSAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJp
bmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBT
dHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBMZXZlbERCRmFj
dG9yeSopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkluTWVt
b3J5KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5Jbk1lbW9yeShTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKLSAgICBXZWFr
UHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha0ZhY3Rv
cnkuY3JlYXRlV2Vha1B0cigpOyB9Ci0KLSAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdldERh
dGFiYXNlTmFtZXMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqLCBib29sJiBzdWNjZXNzKSBX
QVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qg
aW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJv
d0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
cm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICBib29sIGdldE9iamVjdFN0b3JlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKikgV0FS
Tl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
YXV0b0luY3JlbWVudCk7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZU9iamVjdFN0b3JlKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgY2xhc3MgUmVjb3JkSWRlbnRp
ZmllciB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZElkZW50aWZpZXIpOwot
ICAgIHB1YmxpYzoKLSAgICAgICAgUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8Y2hhcj4m
IHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFyeUtleSks
IG1fdmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOyB9Ci0g
ICAgICAgIFJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3ZlcnNpb24oLTEp
IHsgfQotCi0gICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdmVyc2lvbjsgfQotICAgICAgICB2b2lkIHJlc2V0KGNvbnN0IFZlY3RvcjxjaGFy
PiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlL
ZXk7IG1fdmVyc2lvbiA9IHZlcnNpb247IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3Rv
cjxjaGFyPiBtX3ByaW1hcnlLZXk7IC8vIEZJWE1FOiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhhdCB0
aGlzIGlzIHRoZSAqZW5jb2RlZCogdmVyc2lvbiBvZiB0aGUga2V5LgotICAgICAgICBpbnQ2NF90
IG1fdmVyc2lvbjsKLSAgICB9OwotCi0gICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgcmVjb3JkKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUmVjb3JkSWRlbnRp
ZmllciopIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgY2xlYXJPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGN1cnJlbnROdW1iZXIpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVj
a0N1cnJlbnQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50
aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllciwgYm9vbCYgZm91bmQpIFdBUk5fVU5VU0VEX1JF
VFVSTjsKLQotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVj
b3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25z
dCBSZWNvcmRJZGVudGlmaWVyJikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYsIFJlZlB0cjxJREJLZXk+JiBwcmltYXJ5S2V5KSBXQVJOX1VOVVNFRF9S
RVRVUk47Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+
JiBmb3VuZFByaW1hcnlLZXksIGJvb2wmIGV4aXN0cykgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0g
ICAgY2xhc3MgQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7Ci0gICAgcHVibGlj
OgotICAgICAgICBlbnVtIEl0ZXJhdG9yU3RhdGUgewotICAgICAgICAgICAgUmVhZHkgPSAwLAot
ICAgICAgICAgICAgU2VlawotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBDdXJzb3JPcHRp
b25zIHsKLSAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZDsKLSAgICAgICAgICAgIGludDY0
X3Qgb2JqZWN0U3RvcmVJZDsKLSAgICAgICAgICAgIGludDY0X3QgaW5kZXhJZDsKLSAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPiBsb3dLZXk7Ci0gICAgICAgICAgICBib29sIGxvd09wZW47Ci0gICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKLSAgICAgICAgICAgIGJvb2wgaGlnaE9wZW47
Ci0gICAgICAgICAgICBib29sIGZvcndhcmQ7Ci0gICAgICAgICAgICBib29sIHVuaXF1ZTsKLSAg
ICAgICAgfTsKLQotICAgICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50S2V5OyB9Ci0gICAgICAgIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJ
REJLZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWspOwotICAgICAgICBib29sIGFkdmFuY2Uo
dW5zaWduZWQgbG9uZyk7Ci0gICAgICAgIGJvb2wgZmlyc3RTZWVrKCk7Ci0KLSAgICAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7
IH0KLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25z
dCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsgfQotICAgICAgICB2
aXJ0dWFsIH5DdXJzb3IoKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93
KCkgPSAwOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBDdXJzb3IoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAg
ICAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgICAgICwgbV9j
dXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAg
ICBleHBsaWNpdCBDdXJzb3IoY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IqIG90aGVyKTsK
LQotICAgICAgICB2aXJ0dWFsIFZlY3RvcjxjaGFyPiBlbmNvZGVLZXkoY29uc3QgSURCS2V5Jikg
PSAwOwotCi0gICAgICAgIGJvb2wgaXNQYXN0Qm91bmRzKCkgY29uc3Q7Ci0gICAgICAgIGJvb2wg
aGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0OwotCi0gICAgICAgIExldmVsREJUcmFuc2FjdGlvbiog
bV90cmFuc2FjdGlvbjsKLSAgICAgICAgY29uc3QgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlv
bnM7Ci0jaWYgVVNFKExFVkVMREIpCi0gICAgICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IG1f
aXRlcmF0b3I7Ci0jZW5kaWYKLSAgICAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5Owot
ICAgICAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgbV9yZWNvcmRJZGVudGlm
aWVyOwotICAgIH07Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0
U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBv
cGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSos
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbik7Ci0KLSAgICBjbGFzcyBUcmFuc2FjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAg
ICBleHBsaWNpdCBUcmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmUqKTsKLSAgICAgICAgdm9pZCBi
ZWdpbigpOwotICAgICAgICBib29sIGNvbW1pdCgpOwotICAgICAgICB2b2lkIHJvbGxiYWNrKCk7
Ci0gICAgICAgIHZvaWQgcmVzZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2JhY2tpbmdT
dG9yZSA9IDA7Ci0jaWYgVVNFKExFVkVMREIpCi0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uID0g
MDsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIExldmVsREJUcmFuc2FjdGlv
biogbGV2ZWxEQlRyYW5zYWN0aW9uRnJvbShUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAg
ICAgIHsKLSNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
cmFuc2FjdGlvbio+KHRyYW5zYWN0aW9uKS0+bV90cmFuc2FjdGlvbi5nZXQoKTsKLSNlbHNlCi0g
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBJREJCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOwotI2lmIFVTRShMRVZF
TERCKQotICAgICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwot
I2VuZGlmCi0gICAgfTsKLQotcHJvdGVjdGVkOgotICAgIElEQkJhY2tpbmdTdG9yZShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiwgUGFzc093blB0
cjxMZXZlbERCQ29tcGFyYXRvcj4pOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgdXNlZCBmb3IgbW9j
a2luZy4KLSAgICBJREJCYWNraW5nU3RvcmUoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiwgUGFzc093blB0cjxMZXZlbERCQ29tcGFyYXRv
cj4pOwotCi0gICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5LCBib29sJiBmb3VuZCk7Ci0gICAgYm9vbCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1h
cCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0KLSAg
ICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwotICAgIE93blB0cjxMZXZlbERCQ29tcGFy
YXRvcj4gbV9jb21wYXJhdG9yOwotICAgIFdlYWtQdHJGYWN0b3J5PElEQkJhY2tpbmdTdG9yZT4g
bV93ZWFrRmFjdG9yeTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCQmFja2luZ1N0b3JlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhM2NmNi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JC
YWNrZW5kSW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5oIgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklEQkRh
dGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgotI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElE
QkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIGtl
eSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAg
OiBtX2N1cnNvcihjdXJzb3IpCi0gICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1fY2Fs
bGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRJbXBsPiBtX2N1cnNvcjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2tleTsKLSAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkN1cnNvckJhY2tl
bmRJbXBsOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci1wcml2YXRlOgotICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAg
ICAgICAgLCBtX2NvdW50KGNvdW50KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNv
cjsKLSAgICB1bnNpZ25lZCBsb25nIG1fY291bnQ7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJl
ZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRJbXBsPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDdXJz
b3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIG51bWJlclRvRmV0Y2gsIGNhbGxi
YWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgaW50IG51bWJlclRv
RmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9j
dXJzb3IoY3Vyc29yKQotICAgICAgICAsIG1fbnVtYmVyVG9GZXRjaChudW1iZXJUb0ZldGNoKQot
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNvcjsKLSAgICBpbnQgbV9udW1iZXJUb0Zl
dGNoOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotSURCQ3Vy
c29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0g
ICAgOiBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUp
Ci0gICAgLCBtX2RhdGFiYXNlKHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKQotICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlk
KQotICAgICwgbV9jdXJzb3IoY3Vyc29yKQotICAgICwgbV9jbG9zZWQoZmFsc2UpCi17Ci0gICAg
bV90cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwotfQotCi1JREJDdXJzb3JC
YWNrZW5kSW1wbDo6fklEQkN1cnNvckJhY2tlbmRJbXBsKCkKLXsKLSAgICBtX3RyYW5zYWN0aW9u
LT51bnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKLX0KLQotCi12b2lkIElEQkN1cnNvckJhY2tl
bmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElE
Ql9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlIik7Ci0gICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBrZXksIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBs
OjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29y
QmFja2VuZEltcGw6OmFkdmFuY2UiKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEN1cnNv
ckFkdmFuY2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBjb3VudCwgY2FsbGJhY2tzKSk7Ci19Ci0K
LXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopCi17Ci0gICAgSURCX1RSQUNFKCJDdXJzb3JB
ZHZhbmNlT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1fY3Vy
c29yLT5tX2N1cnNvci0+YWR2YW5jZShtX2NvdW50KSkgewotICAgICAgICBtX2N1cnNvci0+bV9j
dXJzb3IgPSAwOwotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNo
YXJlZEJ1ZmZlcio+KDApKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBt
X2N1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNv
ckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKikK
LXsKLSAgICBJREJfVFJBQ0UoIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotICAgIGlmICgh
bV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rp
b24obV9rZXkuZ2V0KCkpKSB7Ci0gICAgICAgIG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyht
X2N1cnNvci0+a2V5KCksIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIG1fY3Vyc29yLT52YWx1ZSgp
KTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGVsZXRlIik7Ci0gICAgQVNTRVJUKG1f
dHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwot
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRlKG1f
Y3Vyc29yLT5wcmltYXJ5S2V5KCkpOwotICAgIG1fZGF0YWJhc2UtPmRlbGV0ZVJhbmdlKG1fdHJh
bnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UucmVsZWFzZSgpLCBwcnBD
YWxsYmFja3MpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRp
bnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpwcmVmZXRjaENvbnRpbnVlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rh
c2tUeXBlLCBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG51
bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBs
OjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKikKLXsKLSAgICBJREJfVFJBQ0UoIkN1cnNvclByZWZldGNoSXRlcmF0aW9u
T3BlcmF0aW9uIik7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsKLSAgICBWZWN0b3I8
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gPiBmb3VuZFZhbHVlczsKLQotICAgIGlmIChtX2N1cnNvci0+
bV9jdXJzb3IpCi0gICAgICAgIG1fY3Vyc29yLT5tX3NhdmVkQ3Vyc29yID0gbV9jdXJzb3ItPm1f
Y3Vyc29yLT5jbG9uZSgpOwotCi0gICAgY29uc3Qgc2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9IDEw
ICogMTAyNCAqIDEwMjQ7Ci0gICAgc2l6ZV90IHNpemVFc3RpbWF0ZSA9IDA7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fbnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAgICAgIGlmICghbV9j
dXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24o
MCkpIHsKLSAgICAgICAgICAgIG1fY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGZvdW5kS2V5cy5hcHBlbmQobV9jdXJzb3ItPm1f
Y3Vyc29yLT5rZXkoKSk7Ci0gICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKG1fY3Vyc29y
LT5tX2N1cnNvci0+cHJpbWFyeUtleSgpKTsKLQotICAgICAgICBzd2l0Y2ggKG1fY3Vyc29yLT5t
X2N1cnNvclR5cGUpIHsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvcktleU9ubHk6Ci0g
ICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OkN1cnNvcktleUFuZFZh
bHVlOgotICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+dmFs
dWUoKS0+c2l6ZSgpOwotICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKG1fY3Vyc29yLT5t
X2N1cnNvci0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHNp
emVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsK
LSAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgp
LT5zaXplRXN0aW1hdGUoKTsKLQotICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVz
dGltYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEtleXMu
c2l6ZSgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hh
cmVkQnVmZmVyKj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtleXMsIGZv
dW5kVmFsdWVzKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hSZXNl
dChpbnQgdXNlZFByZWZldGNoZXMsIGludCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJh
Y2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0Iik7Ci0gICAgbV9jdXJzb3IgPSBtX3NhdmVkQ3Vyc29y
OwotICAgIG1fc2F2ZWRDdXJzb3IgPSAwOwotCi0gICAgaWYgKG1fY2xvc2VkKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG1fY3Vyc29yKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dXNlZFByZWZldGNoZXM7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9IG1fY3Vyc29yLT5j
b250aW51ZUZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNsb3NlKCkK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSIpOwotICAgIG1f
Y2xvc2VkID0gdHJ1ZTsKLSAgICBtX2N1cnNvci5jbGVhcigpOwotICAgIG1fc2F2ZWRDdXJzb3Iu
Y2xlYXIoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTVlMjZiYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLQotI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkN1
cnNvckJhY2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQktleVJhbmdl
OwotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNv
ciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29y
VHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlv
biwgb2JqZWN0U3RvcmVJZCkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tlbmRJbXBsKGN1cnNvciwgY3Vyc29yVHlw
ZSwgdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAgIHZp
cnR1YWwgfklEQkN1cnNvckJhY2tlbmRJbXBsKCk7Ci0KLSAgICAvLyBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNv
bnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0KGlu
dCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOwotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgfQotCi0gICAgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLT5rZXkoKTsgfQotICAgIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlL
ZXkoKTsgfQotICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSA/IDAgOiBtX2N1
cnNvci0+dmFsdWUoKTsgfQotICAgIHZvaWQgY2xvc2UoKTsKLQotcHJpdmF0ZToKLSAgICBJREJD
dXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLQot
ICAgIGNsYXNzIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjsKLSAgICBjbGFzcyBDdXJzb3JBZHZh
bmNlT3BlcmF0aW9uOwotICAgIGNsYXNzIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9u
OwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBl
OwotICAgIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgY29uc3QgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgY29uc3QgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJz
b3I+IG1fY3Vyc29yOyAvLyBNdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgbV90cmFuc2FjdGlvbi4K
LSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fc2F2ZWRDdXJzb3I7IC8vIE11
c3QgYmUgZGVzdHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgotCi0gICAgYm9vbCBtX2Nsb3Nl
ZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZEltcGxfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3NDM3YS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzODQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZS5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLSNp
bmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKLSNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihi
YWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFk
YXRhKQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBt
X29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Ci19Owot
Ci1jbGFzcyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVN
ZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgICAgIDogbV9iYWNraW5n
U3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmpl
Y3RTdG9yZU1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oZGF0YWJhc2UsIHRy
YW5zYWN0aW9uSWQsIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKLSAg
ICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwotcHJpdmF0ZToKLSAgICBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKLSAgICAgICAgOiBtX2Rh
dGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklk
KQotICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tz
KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9k
YXRhYmFzZTsKLSAgICBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKLSAgICBpbnQ2NF90IG1fdmVy
c2lvbjsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Ci19OwotCi1jbGFzcyBD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3Bl
cmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgICAgIDogbV9kYXRh
YmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkK
LSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IG1fZGF0YWJhc2U7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci19OwotCi1j
bGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKLXByaXZhdGU6Ci0gICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fZGF0YWJhc2Uo
ZGF0YWJhc2UpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0
YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBtX2RhdGFiYXNlOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1l
dGFkYXRhOwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJl
dmlvdXNJbnRWZXJzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJz
aW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIHByZXZpb3VzVmVyc2lvbiwgcHJldmlv
dXNJbnRWZXJzaW9uKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgVmVyc2lvbkNoYW5nZUFib3J0T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0
IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKLSAg
ICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fcHJldmlvdXNWZXJzaW9u
KHByZXZpb3VzVmVyc2lvbikKLSAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihwcmV2aW91
c0ludFZlcnNpb24pCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIFN0cmluZyBtX3ByZXZpb3VzVmVyc2lvbjsKLSAgICBp
bnQ2NF90IG1fcHJldmlvdXNJbnRWZXJzaW9uOwotfTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0
YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4T3Bl
cmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7
Ci1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNr
aW5nU3RvcmUpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAg
ICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAg
IGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9p
bmRleE1ldGFkYXRhOwotfTsKLQotY2xhc3MgRGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdT
dG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAg
IERlbGV0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAg
ICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleE1l
dGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwot
fTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
cmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJ
ZChpbmRleElkKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLX07Ci0KLWNsYXNzIERlbGV0ZUluZGV4
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0
aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZElt
cGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRh
dGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERl
bGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0
YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAg
OiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RT
dG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsK
LSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRh
YmFzZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBJREJJ
bmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIEdldE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRPcGVyYXRpb24oYmFj
a2luZ1N0b3JlLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1
cnNvclR5cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIEdldE9wZXJhdGlvbihQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFz
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5
cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlk
KG1ldGFkYXRhLmlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQot
ICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQotICAgICAgICAsIG1fa2V5UGF0aChtZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgpCi0gICAgICAgICwgbV9h
dXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuYXV0
b0luY3JlbWVudCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1f
Y3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2Jq
ZWN0U3RvcmVJZCkpOwotICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChv
YmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci0KLSAgICBjb25zdCBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90
IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBj
b25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICBjb25zdCBJREJLZXlQYXRoIG1fa2V5UGF0aDsK
LSAgICBjb25zdCBib29sIG1fYXV0b0luY3JlbWVudDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5
UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vy
c29yVHlwZTsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07
Ci0KLWNsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUHV0T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5
cykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKik7Ci1wcml2YXRlOgotICAgIFB1dE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQotICAgICAgICA6IG1fYmFja2lu
Z1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkK
LSAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCi0gICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1fcHV0TW9kZShwdXRNb2Rl
KQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2luZGV4SWRz
KGluZGV4SWRzKQotICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKLSAgICB7Ci0gICAg
fQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0g
ICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBtX29iamVjdFN0b3JlOwotICAgIGNvbnN0IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1f
dmFsdWU7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7Ci0gICAgY29uc3QgSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIG1fcHV0TW9kZTsKLSAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4g
bV9pbmRleElkczsKLSAgICBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpJbmRleEtleXM+IG1faW5kZXhLZXlzOwotfTsKLQotY2xhc3MgU2V0SW5kZXhlc1JlYWR5T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoc2l6ZV90IGluZGV4Q291bnQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihpbmRleENvdW50KSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
KTsKLXByaXZhdGU6Ci0gICAgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENv
dW50KQotICAgICAgICA6IG1faW5kZXhDb3VudChpbmRleENvdW50KQotICAgIHsKLSAgICB9Ci0K
LSAgICBjb25zdCBzaXplX3QgbV9pbmRleENvdW50OwotfTsKLQotY2xhc3MgT3BlbkN1cnNvck9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5
cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIE9wZW5DdXJzb3JPcGVyYXRpb24o
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAs
IG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmpl
Y3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQotICAgICAgICAsIG1fa2V5
UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQotICAgICAg
ICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5
cGUpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25z
dCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICBjb25zdCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uIG1fZGlyZWN0aW9uOwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNv
clR5cGU7Ci0gICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBt
X3Rhc2tUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwot
fTsKLQotY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ291bnRPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXBy
aXZhdGU6Ci0gICAgQ291bnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFj
a2luZ1N0b3JlKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICAgICAs
IG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJZChpbmRl
eElkKQotICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsK
LSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1f
aW5kZXhJZDsKLSAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAg
Y29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBEZWxl
dGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlUmFu
Z2VPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXlS
YW5nZSwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgRGVsZXRlUmFuZ2VPcGVyYXRp
b24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1f
YmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJh
c2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAg
LCBtX2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNr
aW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tl
eVJhbmdlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsK
LQotY2xhc3MgQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ2xlYXJPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBDbGVh
ck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
Ci0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmplY3RT
dG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tp
bmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdPcGVu
Q2FsbCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGVuZGluZ09wZW5DYWxsPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCB2ZXJzaW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
ZW5kaW5nT3BlbkNhbGwoY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25J
ZCwgdmVyc2lvbikpOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KLSAgICBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFj
a3M7IH0KLSAgICBpbnQ2NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAgICBp
bnQ2NF90IHRyYW5zYWN0aW9uSWQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSWQ7IH0K
LQotcHJpdmF0ZToKLSAgICBQZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxs
YmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQotICAgICAgICA6
IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRh
dGFiYXNlQ2FsbGJhY2tzKQotICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQotICAgICAgICAs
IG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotICAgIGludDY0X3QgbV92ZXJzaW9uOwotICAgIGNv
bnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6UGVuZGluZ0RlbGV0ZUNhbGwgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ0RlbGV0
ZUNhbGwoY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQotCi1wcml2YXRlOgotICAgIFBlbmRp
bmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAg
IDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0gICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1QYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9y
eSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQotewotICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBiYWNrZW5kID0gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwobmFtZSwgZGF0YWJhc2UsIGZhY3RvcnksIHVuaXF1ZUlkZW50aWZpZXIpKTsKLSAgICBp
ZiAoIWJhY2tlbmQtPm9wZW5JbnRlcm5hbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gYmFja2VuZC5yZWxlYXNlKCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCBjaGFyKiBOb1N0
cmluZ1ZlcnNpb24gPSAiIjsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5p
cXVlSWRlbnRpZmllcikKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAs
IG1fbWV0YWRhdGEobmFtZSwgSW52YWxpZElkLCBOb1N0cmluZ1ZlcnNpb24sIElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok5vSW50VmVyc2lvbiwgSW52YWxpZElkKQotICAgICwgbV9pZGVudGlmaWVyKHVu
aXF1ZUlkZW50aWZpZXIpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLSAgICAsIG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvcihJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUoKSkKLSAg
ICAsIG1fY2xvc2luZ0Nvbm5lY3Rpb24oZmFsc2UpCi17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRh
Lm5hbWUuaXNOdWxsKCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9i
amVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2
NF90IG5ld01heE9iamVjdFN0b3JlSWQpCi17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS5pZCkpOwotICAgIGlmIChuZXdNYXhPYmplY3RT
dG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICBB
U1NFUlQobV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7
Ci0gICAgICAgIG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3Jl
SWQ7Ci0gICAgfQotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5p
ZCwgb2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92
ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBBU1NFUlQobV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCi17Ci0gICAgQVNT
RVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAg
ICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRl
eGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5k
ZXguaWQsIGluZGV4KTsKLSAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRh
OjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBu
ZXdNYXhJbmRleElkKTsKLSAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heElu
ZGV4SWQ7Ci0gICAgfQotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9y
ZUlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVt
b3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0gICAg
QVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsK
LSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0b3JlLmlu
ZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwotICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3Zl
KGluZGV4SWQpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlk
LCBvYmplY3RTdG9yZSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3Blbklu
dGVybmFsKCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBib29sIG9rID0gbV9i
YWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAmbV9t
ZXRhZGF0YSwgc3VjY2Vzcyk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09ICht
X21ldGFkYXRhLmlkICE9IEludmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxkIiwg
c3VjY2VzcyA/ICJ0cnVlIiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRh
ZGF0YS5pZCkpOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
c3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9yZXMo
bV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsKLQotICAgIHJldHVybiBt
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5hbWUs
IG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFkYXRhLmlk
KTsKLX0KLQotSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6fklEQkRhdGFiYXNlQmFja2VuZEltcGwo
KQotewotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6YmFja2luZ1N0b3JlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmU7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotewot
ICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUi
KTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQsIGtleVBhdGgsIGF1
dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6TWluaW11bUluZGV4SWQp
OwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQpKTsK
LQotICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3JlTWV0YWRhdGEsIG9iamVjdFN0b3JlSWQp
OwotfQotCi12b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRl
T2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVP
YmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhLm5hbWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29i
amVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCkpIHsKLSAgICAgICAgUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBj
cmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51
dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNl
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotCi0gICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2lu
Z1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7Ci0gICAgcmVtb3ZlT2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQotewotICAgIElEQl9UUkFD
RSgiSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgiKTsKLSAgICBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25D
aGFuZ2UpOwotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9i
amVjdFN0b3JlSWQpKTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0
b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAg
QVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKLSAgICBjb25z
dCBJREJJbmRleE1ldGFkYXRhIGluZGV4TWV0YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0aCwg
dW5pcXVlLCBtdWx0aUVudHJ5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3Jl
YXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhNZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkKSk7Ci0KLSAgICBhZGRJbmRleChvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhLCBpbmRleElkKTsKLX0KLQotdm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJ
REJfVFJBQ0UoIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRy
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRh
ZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBt
X2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5h
bWUudXRmOCgpLmRhdGEoKSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBD
cmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJh
dGlvbiIpOwotICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0g
ICAgbV9kYXRhYmFzZS0+cmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOwot
fQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0g
ICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7
Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3Jl
LmluZGV4ZXMuZ2V0KGluZGV4SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhE
ZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLQotICAgIHJlbW92ZUluZGV4KG9iamVj
dFN0b3JlSWQsIGluZGV4SWQpOwotfQotCi12b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9U
UkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBib29sIG9rID0gbV9iYWNraW5nU3Rv
cmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCB0
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0
YWRhdGEuaWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBp
bmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAg
ICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFu
c2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsK
LSAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOwotICAgIG1fZGF0
YWJhc2UtPmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJREJJbmRl
eE1ldGFkYXRhOjpJbnZhbGlkSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gVGhlIGZyb250ZW5kIHN1
Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNseSBpbml0aWF0
ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2FjdGlvbi4gb25B
Ym9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5kLCBzbyBpdCB3
aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYgKG1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICAvLyBJZiB0aGUgdHJh
bnNhY3Rpb24gaXMgdW5rbm93biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFib3J0ZWQgYnkg
dGhlIGJhY2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRvIGlnbm9yZSBpdC4K
LSAgICBpZiAobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpCi0gICAgICAg
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0
aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBi
YWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0gICAg
aWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3Ry
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KGVycm9yKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldCIpOwotICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soR2V0T3BlcmF0aW9uOjpjcmVhdGUo
bV9iYWNraW5nU3RvcmUsIG1fbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJh
bmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5IDogSW5kZXhlZERCOjpDdXJz
b3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgR2V0T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9U
UkFDRSgiR2V0T3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0KLSAgICBp
ZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCi0gICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxv
d2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gYmFja2luZ1N0b3JlQ3Vyc29yOwotICAgICAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAh
PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUg
UmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9i
YWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKLSAg
ICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAg
ICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtl
eUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhl
ZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvLyBJ
bmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNv
ck5leHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsK
LSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7
Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleTsKLSAgICBib29sIG9rOwot
ICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAg
ICAgIC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIFZlY3Rvcjxj
aGFyPiB2YWx1ZTsKLSAgICAgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgKmtleSwgdmFsdWUpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYm
ICFtX2tleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOwotICAgICAgICByZXR1cm47
Ci0KLSAgICB9Ci0KLSAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGlu
ZGV4ZXMuCi0gICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKLSAgICBpZiAoIW9rKSB7
Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
IXByaW1hcnlLZXkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJz
b3JLZXlPbmx5KSB7Ci0gICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24K
LSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmll
dmFsIE9wZXJhdGlvbgotICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKLSAgICBvayA9IG1fYmFja2lu
Z1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgdmFsdWUpOwotICAg
IGlmICghb2spIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvciBpbiBnZXRSZWNvcmQuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQ
YXRoLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVm
ZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHByaW1hcnlLZXksIG1fa2V5UGF0aCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6
OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUg
cHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dCIpOwotICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
UmVhZE9ubHkpOwotCi0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9y
ZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwot
Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0
KCkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0
ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwg
cHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Ci19Ci0KLXZvaWQgUHV0
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQotewotICAgIElEQl9UUkFDRSgiUHV0T3BlcmF0aW9uIik7Ci0gICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLSAgICBBU1NF
UlQobV9pbmRleElkcy5zaXplKCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKLSAgICBib29sIGtl
eVdhc0dlbmVyYXRlZCA9IGZhbHNlOwotCi0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgIGlm
IChtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUg
JiYgbV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmICFtX2tleSkgewotICAgICAgICBSZWZQ
dHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJh
dGVLZXkobV9iYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmUuaWQpOwotICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICBpZiAo
IWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJh
aW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAg
ICB9IGVsc2UKLSAgICAgICAga2V5ID0gbV9rZXk7Ci0KLSAgICBBU1NFUlQoa2V5ICYmIGtleS0+
aXNWYWxpZCgpKTsKLQotICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNv
cmRJZGVudGlmaWVyOwotICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpBZGRPbmx5KSB7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAg
Ym9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmUuaWQsICprZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7Ci0gICAgICAgIGlmICghb2sp
IHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
Y2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFp
bnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZlY3RvcjxPd25QdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwot
ICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFs
c2U7Ci0gICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgbV9iYWNraW5nU3RvcmUuZ2V0KCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1faW5k
ZXhJZHMsIG1faW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0Nv
bnN0cmFpbnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgbV9j
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJv
ciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJy
b3IsIGVycm9yTWVzc2FnZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQmVm
b3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwg
cm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgYmFja2luZ1N0
b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtl
eSwgbV92YWx1ZSwgJnJlY29yZElkZW50aWZpZXIpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3Vj
Y2VzcykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
OiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5z
aXplKCk7ICsraSkgewotICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdy
aXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4
V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9iYWNraW5nU3RvcmUs
IHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmUuaWQpOwotICAgIH0KLQotICAgIGlmIChtX29iamVjdFN0b3JlLmF1dG9JbmNy
ZW1lbnQgJiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29y
VXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgewotICAgICAgICBi
b29sIG9rID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6dXBkYXRlS2V5R2VuZXJhdG9yKG1f
YmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlk
LCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5n
IGtleSBnZW5lcmF0b3IuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKLX0KLQotdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYgaW5kZXhLZXlzKQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6c2V0SW5kZXhLZXlzIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNh
Y3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFu
c2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgp
ID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OwotICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU+IHN0b3JlID0gYmFja2luZ1N0b3JlKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9k
IGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3
b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KLSAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElk
ZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAg
Ym9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJp
bWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgg
a2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkgewotICAg
ICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQo
IkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIpKTsK
LSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwotICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAgIEFTU0VSVChtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nl
c3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0
aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgcHJpbWFyeUtleSwg
ZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2Us
IG9iZXlzQ29uc3RyYWludHMpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAg
ICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9y
ZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWlu
dEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGlu
ZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlz
KHJlY29yZElkZW50aWZpZXIsICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOwotICAgIH0KLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKQotewotICAgIElE
Ql9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5Iik7Ci0K
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3Jl
YXRlKGluZGV4SWRzLnNpemUoKSkpOwotfQotCi12b2lkIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
bjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBJREJfVFJBQ0UoIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyArK2kpCi0gICAgICAgIHRyYW5zYWN0aW9uLT5kaWRD
b21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlw
ZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0
ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWRE
Qjo6Q3Vyc29yS2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBP
cGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRy
YW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOwotCi0g
ICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhl
IHRyYW5zYWN0aW9uCi0gICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlz
IGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0
byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhlcyBh
cmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0gICAg
aWYgKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZl
VGFzaykKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotCi0gICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0gICAg
aWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAg
QVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6Tm9ybWFsVGFzayk7Ci0gICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhl
ZERCOjpDdXJzb3JLZXlPbmx5KQotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9i
YWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwg
bV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0g
ICAgfQotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
IHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGU+KG1fdGFza1R5cGUpKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNv
ciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgp
LCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZUlkKTsK
LSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29y
LT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RSQUNFKCJJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb3VudCIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwot
ICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3Jl
LCBpZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19
Ci0KLXZvaWQgQ291bnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJDb3VudE9wZXJhdGlvbiIpOwotICAg
IHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IGJhY2tpbmdTdG9yZUN1cnNvcjsKLQotICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRh
ZGF0YTo6SW52YWxpZElkKQotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdT
dG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5n
ZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIGJhY2tpbmdT
dG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2Vzcyhjb3VudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAg
ICAgICsrY291bnQ7Ci0gICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1
bmN0aW9uKDApKTsKLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotfQotCi12
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJREJfVFJB
Q0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZVJhbmdlIik7Ci0gICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25s
eSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZVJhbmdlT3BlcmF0aW9u
OjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBj
YWxsYmFja3MpKTsKLX0KLQotdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRl
bGV0ZVJhbmdlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0
KTsKLSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAg
ICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIGJhY2tp
bmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKSkgewotICAgICAgICAgICAgICAgIG1f
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIpKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUg
KGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0gICAgfQotCi0gICAg
bV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xlYXIiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0
aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLQotICAgIHRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ2xlYXJPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdT
dG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgQ2xlYXJP
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24p
Ci17Ci0gICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Ci0gICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQpKSB7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2JqZWN0IHN0b3Jl
IikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKLX0KLQotdm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5k
ZWxldGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7
Ci0gICAgaWYgKCFvaykgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ig
PSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9y
ZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIlZlcnNp
b25DaGFuZ2VPcGVyYXRpb24iKTsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtX2RhdGFiYXNl
LT5pZCgpOwotICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEu
aW50VmVyc2lvbjsKLSAgICBBU1NFUlQobV92ZXJzaW9uID4gb2xkVmVyc2lvbik7Ci0gICAgbV9k
YXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV92ZXJzaW9uOwotICAgIGlmICghbV9k
YXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgbV9kYXRhYmFz
ZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZSB3
aGVuIHVwZGF0aW5nIHZlcnNpb24uIik7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVy
cm9yKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fcGVuZGluZ1NlY29uZEhhbGZPcGVu
KTsKLSAgICBtX2RhdGFiYXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IFBlbmRpbmdPcGVu
Q2FsbDo6Y3JlYXRlKG1fY2FsbGJhY2tzLCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBtX3RyYW5zYWN0
aW9uSWQsIG1fdmVyc2lvbik7Ci0gICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRW
ZXJzaW9uLCBtX2RhdGFiYXNlLCBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKLSAg
ICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lv
bkNoYW5nZSkgewotICAgICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbik7Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5z
YWN0aW9uOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2Fj
dGlvbkZpbmlzaGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJh
bnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uID0gcHJwVHJhbnNhY3Rpb247Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uLT5pZCgpKSk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbi0+aWQoKSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fdHJhbnNhY3Rp
b25zLnJlbW92ZSh0cmFuc2FjdGlvbi0+aWQoKSk7Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgQVNT
RVJUKHRyYW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi5nZXQoKSk7Ci0gICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVh
cigpOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlv
bkZpbmlzaGVkQW5kQWJvcnRGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHBycFRyYW5zYWN0aW9uKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwotICAgIGlmICh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Ci0gICAgICAg
IC8vIElmIHRoaXMgd2FzIGFuIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwgYmUg
YSAic2Vjb25kCi0gICAgICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBpbiBw
cm9jZXNzUGVuZGluZ0NhbGxzLgotICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBsb25nZXIg
c3VwcG9ydCBzZXRWZXJzaW9uLCBhc3NlcnQgc3VjaCBhIHRoaW5nLgotICAgICAgICBpZiAobV9w
ZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB3
YXMgYWJvcnRlZCBpbiB1cGdyYWRlbmVlZGVkIGV2ZW50IGhhbmRsZXIuIikpOwotICAgICAgICAg
ICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgICAg
IHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlvbikKLXsKLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsK
LSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVy
c2lvbkNoYW5nZSkKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi1zaXplX3Qg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y29ubmVjdGlvbkNvdW50KCkKLXsKLSAgICAvLyBUaGlz
IGRvZXMgbm90IGluY2x1ZGUgcGVuZGluZyBvcGVuIGNhbGxzLCBhcyB0aG9zZSBzaG91bGQgbm90
IGJsb2NrIHZlcnNpb24gY2hhbmdlcyBhbmQgZGVsZXRlcy4KLSAgICByZXR1cm4gbV9kYXRhYmFz
ZUNhbGxiYWNrc1NldC5zaXplKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
cHJvY2Vzc1BlbmRpbmdDYWxscygpCi17Ci0gICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVu
KSB7Ci0gICAgICAgIEFTU0VSVChtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+dmVyc2lvbigpID09
IG1fbWV0YWRhdGEuaW50VmVyc2lvbik7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlkICE9
IEludmFsaWRJZCk7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3Mo
KS0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICBtX3BlbmRpbmdT
ZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB3aGVuIGNv
bXBsZXRlLCBhcyBwZW5kaW5nIGRlbGV0ZXMgbWF5IGJlIChwYXJ0aWFsbHkpIHVuYmxvY2tlZC4K
LSAgICB9Ci0KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBjaGVjayBpcyBvbmx5IGFuIG9wdGltaXph
dGlvbiB0byByZWR1Y2UgcXVldWUtY2h1cm4gYW5kCi0gICAgLy8gbm90IG5lY2Vzc2FyeSBmb3Ig
Y29ycmVjdG5lc3M7IGRlbGV0ZURhdGFiYXNlIGFuZCBvcGVuQ29ubmVjdGlvbiB3aWxsCi0gICAg
Ly8gcmVxdWV1ZSB0aGVpciBjYWxscyBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgotICAgIGlm
IChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpICYmIGlzRGVsZXRlRGF0YWJh
c2VCbG9ja2VkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoIW1fcGVuZGluZ0RlbGV0
ZUNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBl
bmRpbmdEZWxldGVDYWxsID0gbV9wZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7Ci0gICAg
ICAgIGRlbGV0ZURhdGFiYXNlRmluYWwocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsK
LSAgICB9Ci0gICAgLy8gZGVsZXRlRGF0YWJhc2VGaW5hbCBzaG91bGQgbmV2ZXIgcmUtcXVldWUg
Y2FsbHMuCi0gICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSk7Ci0KLSAg
ICAvLyBUaGlzIGNoZWNrIGlzIGFsc28gbm90IHJlYWxseSBuZWVkZWQsIG9wZW5Db25uZWN0aW9u
IHdvdWxkIGp1c3QgcmVxdWV1ZSBpdHMgY2FsbHMuCi0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3BlbiBjYWxscyBj
YW4gYmUgcmVxdWV1ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0ZWQgYSB2ZXJzaW9uIGNoYW5nZSB0
cmFuc2FjdGlvbi4KLSAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPiA+IHBlbmRpbmdP
cGVuQ2FsbHM7Ci0gICAgbV9wZW5kaW5nT3BlbkNhbGxzLnN3YXAocGVuZGluZ09wZW5DYWxscyk7
Ci0gICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBPd25Q
dHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5kaW5nT3BlbkNhbGxzLnRh
a2VGaXJzdCgpOwotICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNhbGxi
YWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIHBlbmRpbmdPcGVu
Q2FsbC0+dHJhbnNhY3Rpb25JZCgpLCBwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSk7Ci0gICAg
fQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZVRyYW5zYWN0aW9uKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBz
aG9ydCBtb2RlKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZSh0cmFuc2FjdGlvbklk
LCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZT4obW9kZSksIHRoaXMpOwotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb25JZCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlv
bklkLCB0cmFuc2FjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQotewotICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VD
YWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxiYWNrczsKLQotICAgIGlmICghbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikg
ewotICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKFBlbmRpbmdPcGVuQ2FsbDo6Y3Jl
YXRlKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24p
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX21ldGFkYXRhLmlkID09IElu
dmFsaWRJZCkgewotICAgICAgICAvLyBUaGUgZGF0YWJhc2Ugd2FzIGRlbGV0ZWQgdGhlbiBpbW1l
ZGlhdGVseSByZS1vcGVuZWQ7IG9wZW5JbnRlcm5hbCgpIHJlY3JlYXRlcyBpdCBpbiB0aGUgYmFj
a2luZyBzdG9yZS4KLSAgICAgICAgaWYgKG9wZW5JbnRlcm5hbCgpKQotICAgICAgICAgICAgQVNT
RVJUKG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZl
cnNpb24pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlOwotICAg
ICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yOwotICAgICAgICAgICAgaWYg
KHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKQotICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIG5v
IHZlcnNpb24gc3BlY2lmaWVkLiI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNl
IHdpdGggdmVyc2lvbiAlbGxkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2ZXJzaW9uKSk7Ci0g
ICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIG1lc3NhZ2UpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRh
dGFiYXNlIGRpZG4ndCBleGlzdCBmcm9tIGl0cyBsYWNrIG9mIGVpdGhlciB0eXBlIG9mIHZlcnNp
b24uCi0gICAgYm9vbCBpc05ld0RhdGFiYXNlID0gbV9tZXRhZGF0YS52ZXJzaW9uID09IE5vU3Ry
aW5nVmVyc2lvbiAmJiBtX21ldGFkYXRhLmludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0
YTo6Tm9JbnRWZXJzaW9uOwotCi0gICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0
YTo6RGVmYXVsdEludFZlcnNpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgY29tbWVudHMg
d2FzIHJlbGF0ZWQgdG8gQ2hyb21pdW0gY29kZS4gSXQgbWF5IGJlIGluY29ycmVjdAotICAgICAg
ICAvLyBGb3IgdW5pdCB0ZXN0cyBvbmx5IC0gc2tpcCB1cGdyYWRlIHN0ZXBzLiBDYWxsaW5nIGZy
b20gc2NyaXB0IHdpdGggRGVmYXVsdEludFZlcnNpb24gdGhyb3dzIGV4Y2VwdGlvbi4KLSAgICAg
ICAgQVNTRVJUKGlzTmV3RGF0YWJhc2UpOwotICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0
LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRo
aXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKSB7Ci0gICAgICAg
IGlmICghaXNOZXdEYXRhYmFzZSkgewotICAgICAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1Nl
dC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPihkYXRhYmFzZUNhbGxiYWNrcykpOwot
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU3BlYyBzYXlzOiBJ
ZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQgZGF0
YWJhc2UgdmVyc2lvbiB0byAxLgotICAgICAgICB2ZXJzaW9uID0gMTsKLSAgICB9Ci0KLSAgICBp
ZiAodmVyc2lvbiA+IG1fbWV0YWRhdGEuaW50VmVyc2lvbikgewotICAgICAgICBydW5JbnRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNh
Y3Rpb25JZCwgdmVyc2lvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHZlcnNp
b24gPCBtX21ldGFkYXRhLmludFZlcnNpb24pIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lvbkVy
cm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9uICglbGxkKSBpcyBsZXNz
IHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24gKCVsbGQpLiIsIHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4odmVyc2lvbiksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9tZXRhZGF0YS5pbnRWZXJzaW9u
KSkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQodmVyc2lvbiA9PSBtX21l
dGFkYXRhLmludFZlcnNpb24pOwotICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFi
YXNlQ2FsbGJhY2tzKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRh
ZGF0YSgpKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQotewotICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxs
YmFja3M7Ci0gICAgQVNTRVJUKGNhbGxiYWNrcyk7Ci0gICAgZm9yIChEYXRhYmFzZUNhbGxiYWNr
c1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7
IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgLy8g
RnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0
aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNh
bGxiYWNrcykKLSAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS5p
bnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICB9Ci0gICAgLy8gVGhlIHNwZWMgZGlj
dGF0ZXMgd2Ugd2FpdCB1bnRpbCBhbGwgdGhlIHZlcnNpb24gY2hhbmdlIGV2ZW50cyBhcmUKLSAg
ICAvLyBkZWxpdmVyZWQgYW5kIHRoZW4gY2hlY2sgbV9kYXRhYmFzZUNhbGxiYWNrcy5lbXB0eSgp
IGJlZm9yZSBwcm9jZWVkaW5nCi0gICAgLy8gb3IgZmlyaW5nIGEgYmxvY2tlZCBldmVudCwgYnV0
IGluc3RlYWQgd2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cKLSAgICAvLyB0aGUgb2xk
IHNldFZlcnNpb24gKGluY29ycmVjdGx5KSBkaWQgaXQuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0
aGUgY2FsbCB0byBvbkJsb2NrZWQgYW5kIGluc3RlYWQgd2FpdCB1bnRpbCB0aGUgZnJvbnRlbmQK
LSAgICAvLyB0ZWxscyB1cyB0aGF0IGFsbCB0aGUgYmxvY2tlZCBldmVudHMgaGF2ZSBiZWVuIGRl
bGl2ZXJlZC4gU2VlCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcxMTMwCi0gICAgaWYgKGNvbm5lY3Rpb25Db3VudCgpKQotICAgICAgICBjYWxsYmFja3Mt
Pm9uQmxvY2tlZChtX21ldGFkYXRhLmludFZlcnNpb24pOwotICAgIC8vIEZJWE1FOiBBZGQgdGVz
dCBmb3IgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLgotICAgIGlmIChtX3J1bm5p
bmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgY29ubmVjdGlvbkNvdW50KCkpIHsKLSAgICAg
ICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxs
YmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9u
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0
U3RvcmVJZHM7Ci0gICAgY3JlYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgZGF0YWJhc2VD
YWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNo
YW5nZSk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
ID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotCi0gICAgdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNh
Y3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyks
IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRhdGEudmVy
c2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uKSk7Ci0KLSAgICBBU1NFUlQoIW1fcGVuZGluZ1Nl
Y29uZEhhbGZPcGVuKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNh
bGxiYWNrcyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJh
c2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKGlzRGVsZXRl
RGF0YWJhc2VCbG9ja2VkKCkpIHsKLSAgICAgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIC8vIEZy
b250IGVuZCBlbnN1cmVzIHRoZSBldmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhh
dCBoYXZlIGNsb3NlUGVuZGluZyBzZXQuCi0gICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hh
bmdlKG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBp
ZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAgICAgLy8gVmVyc2lv
bkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAg
ICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0YS5pbnRWZXJzaW9uKTsKLSAgICAg
ICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUo
Y2FsbGJhY2tzLnJlbGVhc2UoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlbGV0
ZURhdGFiYXNlRmluYWwoY2FsbGJhY2tzLnJlbGVhc2UoKSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQotewotICAgIHJldHVybiBj
b25uZWN0aW9uQ291bnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxl
dGVEYXRhYmFzZUZpbmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0g
ICAgQVNTRVJUKCFpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKLSAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmUpOwotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbWV0
YWRhdGEubmFtZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgZGVsZXRpbmcgZGF0YWJhc2UuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IG1fbWV0YWRhdGEudmVyc2lvbiA9IE5vU3RyaW5nVmVyc2lvbjsKLSAgICBtX21ldGFkYXRhLmlk
ID0gSW52YWxpZElkOwotICAgIG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok5vSW50VmVyc2lvbjsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jbGVhcigp
OwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzKQotewotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOwotICAgIEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNh
bGxiYWNrcykpOwotCi0gICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tz
KTsKLSAgICBpZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFs
Zk9wZW4tPmRhdGFiYXNlQ2FsbGJhY2tzKCkgPT0gY2FsbGJhY2tzKSB7Ci0gICAgICAgIG1fcGVu
ZGluZ1NlY29uZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlv
biB3YXMgY2xvc2VkLiIpKTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFz
ZSgpOwotICAgIH0KLQotICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDEpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3Ig
dG8gcHJvY2VzcyBhIHBlbmRpbmcgb3BlbiBjYWxsCi0gICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJl
ZW50ZXJpbmcgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UuIFRoZW4gdGhlCi0gICAgLy8g
YmFja2VuZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0
cyBjb25uZWN0aW9uLCBhbmQKLSAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNh
bGxlZCBjbG9zZS4KLSAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2Vl
ZCBpbiBjYXNlIG9mIHJlZW50cmFuY3kuCi0gICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rp
b24obV9jbG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7Ci0gICAgcHJvY2Vzc1BlbmRpbmdDYWxscygp
OwotCi0gICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMg
Y2FzZXMgYmVsb3cuCi0gICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3Bl
bkNhbGxzLnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7Ci0gICAgICAg
IFRyYW5zYWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7Ci0gICAgICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5n
LiIpOwotICAgICAgICBmb3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVz
IGl0ID0gdHJhbnNhY3Rpb25zLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9ucy52
YWx1ZXMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgKCppdCktPmFib3J0
KGVycm9yKTsKLQotICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKLQot
ICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotCi0gICAgICAgIC8vIFRoaXMgY2hlY2sg
c2hvdWxkIG9ubHkgYmUgZmFsc2UgaW4gdW5pdCB0ZXN0cy4KLSAgICAgICAgQVNTRVJUKG1fZmFj
dG9yeSk7Ci0gICAgICAgIGlmIChtX2ZhY3RvcnkpCi0gICAgICAgICAgICBtX2ZhY3RvcnktPnJl
bW92ZUlEQkRhdGFiYXNlQmFja2VuZChtX2lkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9pZCBD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3Rv
cmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFu
c2FjdGlvbik7Ci0gICAgbV9kYXRhYmFzZS0+cmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RTdG9y
ZUlkKTsKLX0KLQotdm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFD
RSgiRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVF9VTlVTRUQo
dHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0gICAgbV9kYXRhYmFzZS0+YWRkT2JqZWN0U3Rv
cmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlk
SWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9y
dE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKLXsKLSAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIpOwotICAg
IEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7Ci0gICAgbV9kYXRhYmFz
ZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gbV9wcmV2aW91c1ZlcnNpb247Ci0gICAgbV9kYXRhYmFz
ZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV9wcmV2aW91c0ludFZlcnNpb247Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTNiZmEw
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbF9oCi0KLSNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJNZXRh
ZGF0YS5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJREJCYWNraW5nU3RvcmU7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7Ci1jbGFzcyBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsIDog
cHVibGljIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwg
Y29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKCk7Ci0KLSAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAw
OwotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0gICAg
dm9pZCBhZGRPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRf
dCBuZXdNYXhPYmplY3RTdG9yZUlkKTsKLSAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOwotICAg
IHZvaWQgcmVtb3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQp
OwotCi0gICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgdmVyc2lvbik7Ci0gICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwotICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhZGF0YTsgfQotCi0gICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwotICAgIHZpcnR1YWwg
dm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2b2lk
IGFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotCi0gICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25D
b29yZGluYXRvci5nZXQoKTsgfQotICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5p
c2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICB2b2lkIHRy
YW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwotICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0Rmly
ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhL
ZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwo
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwotCi0gICAgYm9v
bCBvcGVuSW50ZXJuYWwoKTsKLSAgICB2b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7Ci0g
ICAgc2l6ZV90IGNvbm5lY3Rpb25Db3VudCgpOwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdDYWxs
cygpOwotCi0gICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpOwotICAgIHZvaWQgZGVs
ZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgY2xhc3Mg
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjsKLQotICAgIC8vIFdoZW4gYSAidmVyc2lvbmNoYW5nZSIg
dHJhbnNhY3Rpb24gYWJvcnRzLCB0aGVzZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBvYmplY3QgaGll
cmFyY2h5LgotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsKLQotICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIElEQkRhdGFiYXNlTWV0
YWRhdGEgbV9tZXRhZGF0YTsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgLy8gVGhp
cyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9yeSdzIGxpZmV0
aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0byBiZSBjb25z
ZXJ2aXRpdmUgdGhhbiBzb3JyeS4KLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBt
X2ZhY3Rvcnk7Ci0KLSAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFu
c2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247Ci0KLSAgICB0eXBlZGVmIEhhc2hN
YXA8aW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+IFRyYW5zYWN0aW9uTWFwOwot
ICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNhY3Rpb25zOwotCi0gICAgY2xhc3MgUGVuZGluZ09w
ZW5DYWxsOwotICAgIERlcXVlPE93blB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3Bl
bkNhbGxzOwotICAgIE93blB0cjxQZW5kaW5nT3BlbkNhbGw+IG1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuOwotCi0gICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7Ci0gICAgRGVxdWU8T3duUHRyPFBl
bmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOwotCi0gICAgdHlwZWRlZiBM
aXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFj
a3NTZXQ7Ci0gICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsK
LQotICAgIGJvb2wgbV9jbG9zaW5nQ29ubmVjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGUxOTdjLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKLQotI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNl
cHRpb24uaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBNPgotc3RhdGljIHZvaWQgY2xlYW5XZWFrTWFwKEhhc2hNYXA8
SywgV2Vha1B0cjxNPiA+JiBtYXApCi17Ci0gICAgSGFzaE1hcDxLLCBXZWFrUHRyPE0+ID4gb3Ro
ZXI7Ci0gICAgb3RoZXIuc3dhcChtYXApOwotCi0gICAgdHlwZW5hbWUgSGFzaE1hcDxLLCBXZWFr
UHRyPE0+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOwotICAgIHdoaWxl
IChpdGVyICE9IG90aGVyLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdGVyLT52YWx1ZS5nZXQoKSkK
LSAgICAgICAgICAgIG1hcC5zZXQoaXRlci0+a2V5LCBpdGVyLT52YWx1ZSk7Ci0gICAgICAgICsr
aXRlcjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29tcHV0ZUZpbGVJZGVudGlmaWVyKFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBs
ZXZlbERCRmlsZVN1ZmZpeFtdID0gIkAxIjsKLSAgICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpICsgbGV2ZWxEQkZpbGVTdWZmaXg7Ci19Ci0KLXN0YXRpYyBTdHJp
bmcgY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9y
aWdpbiogc2VjdXJpdHlPcmlnaW4pCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmll
cihzZWN1cml0eU9yaWdpbikgKyBuYW1lOwotfQotCi1JREJGYWN0b3J5QmFja2VuZEltcGw6OklE
QkZhY3RvcnlCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLUlEQkZhY3RvcnlCYWNrZW5kSW1wbDo6fklE
QkZhY3RvcnlCYWNrZW5kSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpyZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVy
KQotewotICAgIEFTU0VSVChtX2RhdGFiYXNlQmFja2VuZE1hcC5jb250YWlucyh1bmlxdWVJZGVu
dGlmaWVyKSk7Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAucmVtb3ZlKHVuaXF1ZUlkZW50aWZp
ZXIpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBzZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6Z2V0RGF0YWJhc2VOYW1lcyIpOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rvcnkp
OwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgIkludGVybmFsIGVycm9yIG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLndl
YmtpdEdldERhdGFiYXNlTmFtZXMuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXMgPSBiYWNraW5nU3RvcmUtPmdl
dERhdGFiYXNlTmFtZXMoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGZvdW5kTmFtZXMuYmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5lbmQoKTsgKytpdCkK
LSAgICAgICAgZGF0YWJhc2VOYW1lcy0+YXBwZW5kKCppdCk7Ci0KLSAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3Vy
aXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
ZWN0b3J5KQotewotICAgIElEQl9UUkFDRSgiSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVE
YXRhYmFzZSIpOwotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVu
aXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwotCi0gICAgSURCRGF0
YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQo
dW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMgdG8gdGhlIGRh
dGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCi0gICAgICAgIC8vIGRhdGFiYXNlLgotICAgICAg
ICBpdC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUg
ZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5
KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9yIGluZGV4ZWREQi5k
ZWxldGVEYXRhYmFzZS4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVlSWRl
bnRpZmllcik7Ci0gICAgaWYgKGRhdGFiYXNlQmFja2VuZCkgewotICAgICAgICBtX2RhdGFiYXNl
QmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsK
LSAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwotICAg
ICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNy
ZWF0aW5nIGRhdGFiYXNlIGJhY2tlbmQgZm9yIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZS4iKSk7
Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBjb25zdCBTdHJpbmcgZmls
ZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkp
OwotICAgIGNvbnN0IGJvb2wgb3BlbkluTWVtb3J5ID0gZGF0YURpcmVjdG9yeS5pc0VtcHR5KCk7
Ci0KLSAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3Jl
TWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOwotICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVN
YXAuZW5kKCkgJiYgaXQyLT52YWx1ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIGl0Mi0+dmFsdWUu
Z2V0KCk7Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7Ci0gICAg
aWYgKG9wZW5Jbk1lbW9yeSkKLSAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3Jl
OjpvcGVuSW5NZW1vcnkoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGZpbGVJZGVudGlmaWVyKTsKLSAg
ICBlbHNlCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1
cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIpOwotCi0gICAg
aWYgKGJhY2tpbmdTdG9yZSkgewotICAgICAgICBjbGVhbldlYWtNYXAobV9iYWNraW5nU3RvcmVN
YXApOwotICAgICAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIsIGJhY2tp
bmdTdG9yZS0+Y3JlYXRlV2Vha1B0cigpKTsKLSAgICAgICAgLy8gSWYgYW4gaW4tbWVtb3J5IGRh
dGFiYXNlLCBiaW5kIGxpZmV0aW1lIHRvIHRoaXMgZmFjdG9yeSBpbnN0YW5jZS4KLSAgICAgICAg
aWYgKG9wZW5Jbk1lbW9yeSkKLSAgICAgICAgICAgIG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVz
LmFkZChiYWNraW5nU3RvcmUpOwotCi0gICAgICAgIC8vIEFsbCBiYWNraW5nIHN0b3JlcyBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBmYWN0b3J5IHNob3VsZCBiZSBvZiB0aGUgc2FtZSB0eXBlLgotICAg
ICAgICBBU1NFUlQobV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXMuaXNFbXB0eSgpIHx8IG9wZW5J
bk1lbW9yeSk7Ci0KLSAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBwcnBTZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6b3BlbiIpOwotICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4g
PSBwcnBTZWN1cml0eU9yaWdpbjsKLSAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9
IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLQot
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQ7Ci0gICAg
SURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFw
LmZpbmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ID09IG1fZGF0YWJhc2VCYWNrZW5k
TWFwLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAg
ICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBiYWNraW5nIHN0b3JlIGZvciBpbmRleGVkREIu
b3Blbi4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRh
YmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2lu
Z1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGRhdGFi
YXNlQmFja2VuZCkKLSAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJ
ZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNyZWF0aW5nIGRh
dGFiYXNlIGJhY2tlbmQgZm9yIGluZGV4ZWRkYi5vcGVuLiIpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+
dmFsdWU7Ci0KLSAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcywg
ZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YTY4MjAuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgSURCRmFjdG9y
eUJhY2tlbmRJbXBsX2gKLSNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRJbXBsX2gKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5nTGlz
dDsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDsKLQotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsIDogcHVibGljIElEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5
QmFja2VuZEltcGw+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+SURCRmFjdG9y
eUJhY2tlbmRJbXBsKCk7Ci0KLSAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gd2VhayBwb2ludGVy
cy4KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmlu
ZyYgdW5pcXVlSWRlbnRpZmllcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1l
cyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2aXJ0
dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLQotcHJvdGVjdGVkOgotICAgIElEQkZhY3RvcnlC
YWNrZW5kSW1wbCgpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9w
ZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwotICAgIElE
QkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKLQotICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFdlYWtQdHI8SURCQmFja2luZ1N0b3JlPiA+IElEQkJhY2tpbmdTdG9y
ZU1hcDsKLSAgICBJREJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7Ci0KLSAgICBI
YXNoU2V0PFJlZlB0cjxJREJCYWNraW5nU3RvcmU+ID4gbV9zZXNzaW9uT25seUJhY2tpbmdTdG9y
ZXM7Ci0KLSAgICAvLyBPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSBzaG91bGQgZXhp
c3QgYXQgYW55IGdpdmVuIHRpbWUuCi0gICAgc3RhdGljIElEQkZhY3RvcnlCYWNrZW5kSW1wbCog
aWRiRmFjdG9yeUJhY2tlbmRJbXBsOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKLQotI2VuZGlmIC8vIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5jcHAKaW5kZXggOTk1ZTgzZC4uOTYzNDRlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmNwcApAQCAtMjgsMTUgKzI4LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKIAotI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgotCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
ZiBVU0UoTEVWRUxEQikKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZExldmVsREIuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBJREJGYWN0b3J5QmFja2VuZEltcGw6OmNyZWF0ZSgpOworICAgIC8vIEZJWE1FOiBO
ZWVkIGEgYmV0dGVyIHBsYXRmb3JtIGFic3RyYWN0aW9uIGhlcmUsIGJ1dCB0aGlzIHN0b3AgZ2Fw
IHdpbGwgd29yayBmb3Igbm93LgorI2lmIFVTRShMRVZFTERCKQorICAgIHJldHVybiBJREJGYWN0
b3J5QmFja2VuZExldmVsREI6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzVlZDBjLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNp
bmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgi
Ci0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNs
dWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdyaXRl
cjo6dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywg
Y29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBTdHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QKLXsK
LSAgICBjYW5BZGRLZXlzID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2lu
ZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIG9rID0gYWRkaW5nS2V5QWxsb3dl
ZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5LCBjYW5BZGRLZXlzKTsK
LSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KCFjYW5BZGRLZXlzKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQotICAgICAgICAg
ICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkg
dG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlx
dWVuZXNzIHJlcXVpcmVtZW50cy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhbkFk
ZEtleXMgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNraW5n
U3RvcmU6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9y
ZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0Ci17Ci0g
ICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBvayA9
IGJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCByZWNv
cmRJZGVudGlmaWVyKTsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4g
dmVyaWZpZWQgYXMgYSB2YWxpZCB3cml0ZSBkdXJpbmcgdmVyaWZ5SW5kZXhLZXlzLgotICAgICAg
ICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgfQotfQotCi1ib29sIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OkluZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tpbmdTdG9y
ZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBi
b29sJiBhbGxvd2VkKSBjb25zdAotewotICAgIGFsbG93ZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1f
aW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKLSAgICAgICAgYWxsb3dlZCA9IHRydWU7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJpbWFyeUtl
eTsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS5r
ZXlFeGlzdHNJbkluZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAqaW5kZXhLZXksIGZvdW5kUHJpbWFyeUtleSwgZm91bmQpOwotICAgIGlmICghb2sp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWZvdW5kIHx8IChwcmltYXJ5S2V5ICYm
IGZvdW5kUHJpbWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkpCi0gICAgICAgIGFsbG93ZWQg
PSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3duUHRyPEluZGV4V3Jp
dGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0
ZWQpCi17Ci0gICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgpKTsK
LSAgICBjb21wbGV0ZWQgPSBmYWxzZTsKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFwOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5kZXhJZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGluZGV4S2V5TWFw
LmFkZChpbmRleElkc1tpXSwgaW5kZXhLZXlzW2ldKTsKLQotICAgIGZvciAoSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUuaW5k
ZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0K
LSAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+dmFsdWU7Ci0KLSAg
ICAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMga2V5cyA9IGluZGV4
S2V5TWFwLmdldChpdC0+a2V5KTsKLSAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVz
aW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5
UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtl
eS4KLSAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCAmJiAoaW5kZXgua2V5UGF0aCA9PSBvYmpl
Y3RTdG9yZS5rZXlQYXRoKSkKLSAgICAgICAgICAgIGtleXMuYXBwZW5kKHByaW1hcnlLZXkpOwot
Ci0gICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRvcHRQdHIobmV3IElu
ZGV4V3JpdGVyKGluZGV4LCBrZXlzKSkpOwotICAgICAgICBib29sIGNhbkFkZEtleXMgPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gaW5kZXhXcml0ZXItPnZlcmlm
eUluZGV4S2V5cygqYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUuaWQsIGluZGV4LmlkLCBjYW5BZGRLZXlz
LCBwcmltYXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICBpZiAoIWJhY2tpbmdT
dG9yZVN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2Fu
QWRkS2V5cykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGluZGV4V3JpdGVy
cy0+YXBwZW5kKGluZGV4V3JpdGVyLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgY29tcGxldGVk
ID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQot
ewotICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUgPSA5MDA3MTk5MjU0NzQwOTky
TEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01BU2NyaXB0IG51bWJlci4KLSAg
ICBpbnQ2NF90IGN1cnJlbnROdW1iZXI7Ci0gICAgYm9vbCBvayA9IGJhY2tpbmdTdG9yZS0+Z2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3VycmVudE51bWJlcik7Ci0gICAg
aWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyIik7Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsK
LSAgICB9Ci0gICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8IGN1cnJlbnROdW1iZXIgPiBtYXhH
ZW5lcmF0b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwot
Ci0gICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOwotfQotCi1i
b29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQotewot
ICAgIEFTU0VSVChrZXkgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAg
ICByZXR1cm4gYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS0+bnVtYmVyKCkpKSAr
IDEsIGNoZWNrQ3VycmVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0
Y2IxNDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGxfaAotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQktleVBhdGgu
aCIKLSNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7Ci1zdHJ1Y3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTsKLQotLy8gRklYTUU6IHRoaXMgbmFtZXNwYWNlIGlzIHRlbXBvcmFyeSB1
bnRpbCB3ZSBtb3ZlIGl0cyBjb250ZW50cyBvdXQgdG8gdGhlaXIgb3duIGhvbWUuCi1uYW1lc3Bh
Y2UgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCB7Ci0KLSAgICBjbGFzcyBJbmRleFdyaXRlciB7
Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBJbmRleFdyaXRlcihjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICAgICAgOiBtX2luZGV4TWV0YWRhdGEo
aW5kZXhNZXRhZGF0YSkKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgSW5kZXhXcml0ZXIoY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleXMmIGluZGV4S2V5cykKLSAgICAgICAgICAgIDogbV9pbmRleE1l
dGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAgICAgICAgICAsIG1faW5kZXhLZXlzKGluZGV4S2V5
cykKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgYm9vbCB2ZXJpZnlJbmRleEtleXMoSURCQmFja2lu
Z1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtl
eXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAsIFN0cmluZyogZXJyb3JNZXNzYWdlID0g
MCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgICAgIHZvaWQgd3JpdGVJbmRleEtl
eXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiwgSURCQmFja2luZ1N0
b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJv
b2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3RvcmUmLCBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmlt
YXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICAg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci0gICAgICAgIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIG1faW5kZXhLZXlzOwotICAgIH07Ci0K
LSAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiwgSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wg
a2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiwgVmVjdG9yPE93
blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwg
Ym9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICBQYXNzUmVmUHRyPElE
QktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7Ci0gICAgYm9vbCB1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+LCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Kiwg
Ym9vbCBjaGVja0N1cnJlbnQpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKLQotI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjZjI2ZS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3Mu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYWNp
bmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVj
dFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKiBkYXRhYmFzZSkKLXsKLSAgICBIYXNoU2V0PGludDY0X3Q+IG9iamVjdFN0b3Jl
SGFzaFNldDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFN0b3JlSWRzLnNpemUo
KTsgKytpKQotICAgICAgICBvYmplY3RTdG9yZUhhc2hTZXQuYWRkKG9iamVjdFN0b3JlSWRzW2ld
KTsKLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChp
ZCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUhhc2hTZXQsIG1vZGUsIGRhdGFiYXNlKSk7Ci19Ci0K
LUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaW50
NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25z
dCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCi0gICAgOiBtX2lk
KGlkKQotICAgICwgbV9vYmplY3RTdG9yZUlkcyhvYmplY3RTdG9yZUlkcykKLSAgICAsIG1fbW9k
ZShtb2RlKQotICAgICwgbV9zdGF0ZShVbnVzZWQpCi0gICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFs
c2UpCi0gICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgLCBtX2RhdGFiYXNlKGRhdGFi
YXNlKQotICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+YmFja2luZ1N0b3JlKCkuZ2V0KCkp
Ci0gICAgLCBtX3Rhc2tUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFz
a1RpbWVyRmlyZWQpCi0gICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCi17Ci0gICAg
Ly8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFk
b3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0KLSAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOwot
fQotCi1JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCgpCi17Ci0gICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0
byBnZXQgZGVsZXRlZCB1bnRpbCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgotICAg
IEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSB0eXBlLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxPcGVyYXRp
b24+IGFib3J0VGFzaykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKHR5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpO
b3JtYWxUYXNrKQotICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQodGFzayk7Ci0gICAgZWxzZQot
ICAgICAgICBtX3ByZWVtcHRpdmVUYXNrUXVldWUuYXBwZW5kKHRhc2spOwotCi0gICAgaWYgKGFi
b3J0VGFzaykKLSAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5kKGFib3J0VGFzayk7Ci0K
LSAgICBpZiAobV9zdGF0ZSA9PSBVbnVzZWQpCi0gICAgICAgIHN0YXJ0KCk7Ci0gICAgZWxzZSBp
ZiAobV9zdGF0ZSA9PSBSdW5uaW5nICYmICFtX3Rhc2tUaW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6YWJvcnQoKQotewotICAgIGFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgKHVu
a25vd24gY2F1c2UpIikpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFi
b3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCIpOwotICAgIGlmIChtX3N0YXRlID09
IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0
YXRlID09IFJ1bm5pbmc7Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmpl
Y3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gYWJvcnQgc3Rl
cHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJz
ZWx2ZXMKLSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAgUmVm
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgbV9zdGF0
ZSA9IEZpbmlzaGVkOwotICAgIG1fdGFza1RpbWVyLnN0b3AoKTsKLQotICAgIGlmICh3YXNSdW5u
aW5nKQotICAgICAgICBtX3RyYW5zYWN0aW9uLnJvbGxiYWNrKCk7Ci0KLSAgICAvLyBSdW4gdGhl
IGFib3J0IHRhc2tzLCBpZiBhbnkuCi0gICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1w
dHkoKSkgewotICAgICAgICBPd25QdHI8T3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUu
dGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5wZXJmb3JtKDApOwotICAgIH0KLQotICAgIC8v
IEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVh
c2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2Ny
aXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2lu
ZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRp
Y2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX3RyYW5zYWN0aW9uLnJlc2V0KCk7
Ci0KLSAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQg
YmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCi0gICAgLy8gdGhlIHRyYW5zYWN0
aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlv
bnMuCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hU
cmFuc2FjdGlvbih0aGlzKTsKLSAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+aXNBY3RpdmUodGhpcykpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
RmluaXNoZWQodGhpcyk7Ci0KLSAgICBpZiAobV9jYWxsYmFja3MpCi0gICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkFib3J0KG1faWQsIGVycm9yKTsKLQotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
RmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOwotCi0gICAgbV9kYXRhYmFzZSA9IDA7Ci19Ci0K
LWJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6aXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5pc0VtcHR5KCkgJiYgbV90YXNr
UXVldWUuaXNFbXB0eSgpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Omhh
c1BlbmRpbmdUYXNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMgfHwgIWlzVGFza1F1ZXVlRW1wdHkoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpyZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqIGN1cnNv
cikKLXsKLSAgICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJ
bXBsKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVuQ3Vyc29ycy5yZW1vdmUoY3Vyc29yKTsKLX0KLQot
dm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpydW4oKQotewotICAgIC8vIFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IgaGFzIHN0YXJ0ZWQgdGhpcyB0cmFuc2FjdGlvbi4gU2NoZWR1bGUgYSB0
aW1lcgotICAgIC8vIHRvIHByb2Nlc3MgdGhlIGZpcnN0IHRhc2suCi0gICAgQVNTRVJUKG1fc3Rh
dGUgPT0gU3RhcnRQZW5kaW5nIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgQVNTRVJUKCFt
X3Rhc2tUaW1lci5pc0FjdGl2ZSgpKTsKLQotICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzdGFydCgpCi17Ci0gICAg
QVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsKLQotICAgIG1fc3RhdGUgPSBTdGFydFBlbmRpbmc7
Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRTdGFydFRyYW5z
YWN0aW9uKHRoaXMpOwotICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlzKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQotewotICAgIElE
Ql9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0Iik7Ci0KLSAgICAvLyBJ
biBtdWx0aXByb2Nlc3MgcG9ydHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1ZXN0ZWQgYSBjb21t
aXQgYnV0IGFuIGFib3J0IGhhcyBhbHJlYWR5Ci0gICAgLy8gYmVlbiBpbml0aWF0ZWQgYXN5bmNo
cm9ub3VzbHkgYnkgdGhlIGJhY2stZW5kLgotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVzZWQgfHwgbV9zdGF0
ZSA9PSBSdW5uaW5nKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gRnJv
bnQtZW5kIGhhcyByZXF1ZXN0ZWQgYSBjb21taXQsIGJ1dCB0aGVyZSBtYXkgYmUgdGFza3MgbGlr
ZSBjcmVhdGVJbmRleCB3aGljaAotICAgIC8vIGFyZSBjb25zaWRlcmVkIHN5bmNocm9ub3VzIGJ5
IHRoZSBmcm9udC1lbmQgYnV0IGFyZSBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYg
KGhhc1BlbmRpbmdUYXNrcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgbGFzdCBy
ZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcg
dGhlCi0gICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYg
cmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5n
IHRoaXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcm90ZWN0
KCp0aGlzKTsKLQotICAgIGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7Ci0gICAgbV9z
dGF0ZSA9IEZpbmlzaGVkOwotCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90cmFu
c2FjdGlvbi5jb21taXQoKTsKLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxk
IHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCi0g
ICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZl
cmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0c2VsZiB0byBiZSBy
ZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsK
LSAgICBtX3RyYW5zYWN0aW9uLnJlc2V0KCk7Ci0KLSAgICAvLyBUcmFuc2FjdGlvbnMgbXVzdCBh
bHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90aWZp
ZWQsIGFzCi0gICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mgb3BlcmF0
aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCi0gICAgaWYgKCF1bnVzZWQpCi0gICAgICAg
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rp
b24odGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLQot
ICAgIGlmIChjb21taXR0ZWQpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUobV9p
ZCk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZp
cmVkKHRoaXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KG1f
aWQsIElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7Ci0gICAg
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOwot
ICAgIH0KLQotICAgIG1fZGF0YWJhc2UgPSAwOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KikKLXsKLSAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1l
ckZpcmVkIik7Ci0gICAgQVNTRVJUKCFpc1Rhc2tRdWV1ZUVtcHR5KCkpOwotCi0gICAgaWYgKG1f
c3RhdGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24uYmVnaW4oKTsK
LSAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7Ci0gICAgfQotCi0gICAgLy8gVGhlIGxhc3QgcmVm
ZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRo
ZQotICAgIC8vIHRhc2tzLiBUYWtlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIHRoaXMg
b2JqZWN0IGFsaXZlIHNvIHRoYXQKLSAgICAvLyB0aGUgbG9vcCB0ZXJtaW5hdGlvbiBjb25kaXRp
b25zIGNhbiBiZSBjaGVja2VkLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBw
cm90ZWN0KCp0aGlzKTsKLQotICAgIFRhc2tRdWV1ZSogdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJl
ZW1wdGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7Ci0g
ICAgd2hpbGUgKCF0YXNrUXVldWUtPmlzRW1wdHkoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkKSB7
Ci0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgICAgICBPd25QdHI8T3Bl
cmF0aW9uPiB0YXNrKHRhc2tRdWV1ZS0+dGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5wZXJm
b3JtKHRoaXMpOwotCi0gICAgICAgIC8vIEV2ZW50IGl0c2VsZiBtYXkgY2hhbmdlIHdoaWNoIHF1
ZXVlIHNob3VsZCBiZSBwcm9jZXNzZWQgbmV4dC4KLSAgICAgICAgdGFza1F1ZXVlID0gbV9wZW5k
aW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3ByZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVl
dWU7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgdGFza3MsIHdlIGhh
dmVuJ3QgYWxyZWFkeSBjb21taXR0ZWQvYWJvcnRlZCwKLSAgICAvLyBhbmQgdGhlIGZyb250LWVu
ZCByZXF1ZXN0ZWQgYSBjb21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNvLgotICAgIGlmICgh
aGFzUGVuZGluZ1Rhc2tzKCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBtX2NvbW1pdFBlbmRp
bmcpCi0gICAgICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmNsb3NlT3BlbkN1cnNvcnMoKQotewotICAgIGZvciAoSGFzaFNldDxJREJDdXJzb3JCYWNr
ZW5kSW1wbCo+OjppdGVyYXRvciBpID0gbV9vcGVuQ3Vyc29ycy5iZWdpbigpOyBpICE9IG1fb3Bl
bkN1cnNvcnMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+Y2xvc2UoKTsKLSAgICBtX29wZW5D
dXJzb3JzLmNsZWFyKCk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTYxOGZhMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbF9oCi0jZGVmaW5l
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5j
bHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOwotY2xhc3MgSURCQ3Vyc29yQmFja2VuZElt
cGw7Ci1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKLSAgICB2b2lk
IGNvbW1pdCgpOwotCi0gICAgY2xhc3MgT3BlcmF0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgfk9wZXJhdGlvbigpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKikgPSAwOwotICAgIH07Ci0KLSAgICB2b2lkIGFib3J0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotICAgIHZvaWQgcnVuKCk7Ci0gICAgSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQot
ICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9vYmpl
Y3RTdG9yZUlkczsgfQotICAgIHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NPd25QdHI8T3BlcmF0aW9u
PiB0YXNrLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyBzY2hl
ZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0YXNrLCBh
Ym9ydFRhc2spOyB9Ci0gICAgdm9pZCBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+LCBQYXNzT3duUHRyPE9wZXJh
dGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7Ci0gICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3Io
SURCQ3Vyc29yQmFja2VuZEltcGwqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElE
QkN1cnNvckJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSB7IG1f
cGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQotICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0
aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGlu
Z1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9
Ci0gICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIElEQkRhdGFi
YXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQo
KTsgfQotCi1wcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaW50NjRfdCBp
ZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRf
dD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCopOwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVudXNlZCwgLy8g
Q3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KLSAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBFbnF1
ZXVlZCB0YXNrcywgYnV0IGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVk
LgotICAgICAgICBSdW5uaW5nLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0ZWQg
YnV0IG5vdCB5ZXQgZmluaXNoZWQuCi0gICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJvcnRl
ZCBvciBjb21taXR0ZWQuCi0gICAgfTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLQotICAgIGJvb2wg
aXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0OwotICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkgY29u
c3Q7Ci0KLSAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+Kik7Ci0gICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICBjb25zdCBpbnQ2
NF90IG1faWQ7Ci0gICAgY29uc3QgSGFzaFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOwot
ICAgIGNvbnN0IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1fbW9kZTsKLQotICAgIFN0YXRl
IG1fc3RhdGU7Ci0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7Ci0gICAgUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gbV9kYXRhYmFzZTsKLQotICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPE9wZXJhdGlvbj4g
PiBUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fdGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBt
X3ByZWVtcHRpdmVUYXNrUXVldWU7Ci0gICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7Ci0K
LSAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247Ci0KLSAgICAv
LyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgot
ICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVyOwotICAgIGlu
dCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JCYWNr
ZW5kSW1wbCo+IG1fb3BlbkN1cnNvcnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTZmY2Q4ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
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
ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkpOwotfQotCi1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKLXsKLX0KLQotSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6fklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKQotewotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6OmRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb24pKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIHRy
YW5zYWN0aW9uKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRTdGFy
dFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewot
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAg
bV9xdWV1ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAgICBwcm9jZXNzU3RhcnRl
ZFRyYW5zYWN0aW9ucygpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRp
ZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9u
KQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwot
Ci0gICAgaWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgewot
ICAgICAgICBBU1NFUlQoIW1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bikpOwotICAgICAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwot
ICAgIH0gZWxzZSBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
KSkKLSAgICAgICAgbV9zdGFydGVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0K
LSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotCi0gICAgcHJvY2Vzc1N0
YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLS8vIFZlcmlmaWVzIGlu
dGVybmFsIGNvbnNpc3RpZW5jeSB3aGlsZSByZXR1cm5pbmcgd2hldGhlciBhbnl0aGluZyBpcyBm
b3VuZC4KLWJvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6aXNBY3RpdmUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwotICAgIGlmIChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCi0g
ICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uKSkgewotICAgICAgICBBU1NFUlQoIWZvdW5kKTsKLSAgICAgICAgZm91
bmQgPSB0cnVlOwotICAgIH0KLSAgICBBU1NFUlQoZm91bmQgPT0gbV90cmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICByZXR1cm4gZm91bmQ7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygp
Ci17Ci0gICAgaWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwgKCpt
X3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKSktPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYmVn
aW4oKTsKLSAgICB3aGlsZSAoaXQgIT0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuZW5kKCkpIHsKLSAg
ICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSAqaXQ7Ci0gICAg
ICAgICsraXQ7Ci0gICAgICAgIGlmIChjYW5SdW5UcmFuc2FjdGlvbih0cmFuc2FjdGlvbikpIHsK
LSAgICAgICAgICAgIG1fcXVldWVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0g
ICAgICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAgICAg
ICAgICAgIHRyYW5zYWN0aW9uLT5ydW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGlj
IGJvb2wgZG9TY29wZXNPdmVybGFwKGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlMSwgY29u
c3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUyKQotewotICAgIGZvciAoSGFzaFNldDxpbnQ2NF90
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY29wZTEuYmVnaW4oKTsgaXQgIT0gc2NvcGUxLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGlmIChzY29wZTIuY29udGFpbnMoKml0KSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvcjo6Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rpb25z
LmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7Ci0gICAgc3dpdGNoICh0cmFuc2FjdGlvbi0+bW9kZSgp
KSB7Ci0gICAgY2FzZSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZToKLSAgICAg
ICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rpb25zLnNpemUoKSA9PSAxKTsKLSAgICAgICAgQVNT
RVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5OgotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRXcml0ZToK
LSAgICAgICAgZm9yIChIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9zdGFy
dGVkVHJhbnNhY3Rpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCppdCktPm1v
ZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYmIGRvU2NvcGVzT3Zlcmxh
cCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKExpc3RIYXNoU2V0PElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5z
YWN0aW9ucy5iZWdpbigpOyAqaXQgIT0gdHJhbnNhY3Rpb247ICsraXQpIHsKLSAgICAgICAgICAg
IEFTU0VSVChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSk7Ci0gICAgICAgICAgICBp
ZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYmIGRv
U2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi19OwotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGNmZmIuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3JfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKLQotLy8gVHJhbnNh
Y3Rpb25zIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhlIHdlcmUgY3JlYXRlZC4KLWNsYXNz
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfklE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKLQotICAgIC8vIENhbGxlZCBieSB0cmFuc2FjdGlv
bnMgYXMgdGhleSBzdGFydCBhbmQgZmluaXNoLgotICAgIHZvaWQgZGlkQ3JlYXRlVHJhbnNhY3Rp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotICAgIHZvaWQgZGlkU3RhcnRUcmFuc2Fj
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0gICAgdm9pZCBkaWRGaW5pc2hUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgYm9vbCBpc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0jZW5kaWYKLQot
cHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0KLSAgICB2b2lkIHBy
b2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Ci0gICAgYm9vbCBjYW5SdW5UcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci0KLSAgICAvLyBUaGlzIGlzIGp1c3QgYW4gZWZm
aWNpZW50IHdheSB0byBrZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4KLSAgICBI
YXNoTWFwPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gPiBtX3RyYW5zYWN0aW9uczsKLSAgICAvLyBUcmFuc2FjdGlvbnMgaW4gZGlm
ZmVyZW50IHN0YXRlcyBhcmUgZ3JvdXBlZCBiZWxvdy4KLSAgICBMaXN0SGFzaFNldDxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaFNldDxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCmluZGV4IDQ4ZTBkMzEuLjUyNTA1NDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0
b3JlTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcApAQCAtMjQsOSArMjQsOSBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCiAKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAKICNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpAQCAt
MTk5Myw0ICsxOTkzLDQgQEAgdm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xs
YmFjaygpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0Uo
TEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiNzc3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5o
CkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJCYWNraW5nU3RvcmVfaAorI2Rl
ZmluZSBJREJCYWNraW5nU3RvcmVfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYm
IFVTRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCTWV0YWRh
dGEuaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3Iu
aCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExldmVsREJDb21wYXJhdG9yOworY2xh
c3MgTGV2ZWxEQkRhdGFiYXNlOworY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOworY2xhc3MgSURC
S2V5OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNo
YXJlZEJ1ZmZlcjsKKworY2xhc3MgTGV2ZWxEQkZhY3RvcnkgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkxldmVsREJGYWN0b3J5KCkgeyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPExldmVsREJE
YXRhYmFzZT4gb3BlbkxldmVsREIoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgTGV2ZWxE
QkNvbXBhcmF0b3IqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlc3Ryb3lMZXZlbERCKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpID0gMDsKK307CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZSA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZT4geworcHVibGljOgorICAgIGNsYXNzIFRy
YW5zYWN0aW9uOworCisgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2ZWxE
QkZhY3RvcnkqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5J
bk1lbW9yeShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuSW5NZW1vcnkoU2VjdXJpdHlP
cmlnaW4qLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7CisgICAg
V2Vha1B0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtG
YWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBn
ZXREYXRhYmFzZU5hbWVzKCk7CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiwgYm9vbCYgc3VjY2Vz
cykgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2
NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
SURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
SURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgYm9vbCBnZXRPYmplY3RTdG9yZXMo
aW50NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcCop
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBi
b29sIGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIGNsYXNzIFJlY29yZElk
ZW50aWZpZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRJZGVudGlmaWVy
KTsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNo
YXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1hcnlL
ZXkpLCBtX3ZlcnNpb24odmVyc2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgpKTsg
fQorICAgICAgICBSZWNvcmRJZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJzaW9u
KC0xKSB7IH0KKworICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25z
dCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICAgICAgdm9pZCByZXNldChjb25zdCBWZWN0b3I8
Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgeyBtX3ByaW1hcnlLZXkgPSBwcmlt
YXJ5S2V5OyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBW
ZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFyIHRo
YXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2YgdGhlIGtleS4KKyAgICAgICAgaW50
NjRfdCBtX3ZlcnNpb247CisgICAgfTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIHJlY29yZCkgV0FSTl9V
TlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFJlY29yZElk
ZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGNsZWFyT2Jq
ZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVh
bCBib29sIGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZp
ZXImKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJyZW50TnVtYmVyKSBX
QVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wg
Y2hlY2tDdXJyZW50KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGtleUV4
aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJ
ZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VOVVNF
RF9SRVRVUk47CisKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYs
IGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZv
clJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgUmVjb3JkSWRlbnRpZmllciYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURC
S2V5PiYgZm91bmRQcmltYXJ5S2V5LCBib29sJiBleGlzdHMpIFdBUk5fVU5VU0VEX1JFVFVSTjsK
KworICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4geworICAgIHB1
YmxpYzoKKyAgICAgICAgZW51bSBJdGVyYXRvclN0YXRlIHsKKyAgICAgICAgICAgIFJlYWR5ID0g
MCwKKyAgICAgICAgICAgIFNlZWsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQ3Vyc29y
T3B0aW9ucyB7CisgICAgICAgICAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAgICAgICAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSWQ7CisgICAgICAgICAgICBpbnQ2NF90IGluZGV4SWQ7CisgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gbG93S2V5OworICAgICAgICAgICAgYm9vbCBsb3dPcGVuOwor
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7CisgICAgICAgICAgICBib29sIGhpZ2hP
cGVuOworICAgICAgICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICAgICAgYm9vbCB1bmlxdWU7
CisgICAgICAgIH07CisKKyAgICAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgICAgICBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29u
c3QgSURCS2V5KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVrKTsKKyAgICAgICAgYm9vbCBhZHZh
bmNlKHVuc2lnbmVkIGxvbmcpOworICAgICAgICBib29sIGZpcnN0U2VlaygpOworCisgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IGNsb25lKCkgPSAwOworICAgICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
S2V5OyB9CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZpZXImIHJlY29y
ZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KKyAgICAg
ICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVu
dFJvdygpID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ3Vyc29yKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMp
CisgICAgICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICAgICAs
IG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgZXhwbGljaXQgQ3Vyc29yKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKiBvdGhl
cik7CisKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElEQktl
eSYpID0gMDsKKworICAgICAgICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OworICAgICAgICBi
b29sIGhhdmVFbnRlcmVkUmFuZ2UoKSBjb25zdDsKKworICAgICAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIG1fdHJhbnNhY3Rpb247CisgICAgICAgIGNvbnN0IEN1cnNvck9wdGlvbnMgbV9jdXJzb3JP
cHRpb25zOworI2lmIFVTRShMRVZFTERCKQorICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBtX2l0ZXJhdG9yOworI2VuZGlmCisgICAgICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtl
eTsKKyAgICAgICAgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIG1fcmVjb3JkSWRl
bnRpZmllcjsKKyAgICB9OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9i
amVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFu
Z2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24pOworCisgICAgY2xhc3MgVHJhbnNhY3Rpb24geworICAgIHB1YmxpYzoKKyAg
ICAgICAgZXhwbGljaXQgVHJhbnNhY3Rpb24oSURCQmFja2luZ1N0b3JlKik7CisgICAgICAgIHZv
aWQgYmVnaW4oKTsKKyAgICAgICAgYm9vbCBjb21taXQoKTsKKyAgICAgICAgdm9pZCByb2xsYmFj
aygpOworICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNr
aW5nU3RvcmUgPSAwOworI2lmIFVTRShMRVZFTERCKQorICAgICAgICAgICAgbV90cmFuc2FjdGlv
biA9IDA7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQor
ICAgICAgICB7CisjaWYgVVNFKExFVkVMREIpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisjZWxz
ZQorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24pOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgSURCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyNpZiBVU0Uo
TEVWRUxEQikKKyAgICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlv
bjsKKyNlbmRpZgorICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBJREJCYWNraW5nU3RvcmUoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NP
d25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+KTsKKworICAgIC8vIFNob3VsZCBvbmx5IHVzZWQgZm9y
IG1vY2tpbmcuCisgICAgSURCQmFja2luZ1N0b3JlKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBh
cmF0b3I+KTsKKworICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJp
bWFyeUtleSwgYm9vbCYgZm91bmQpOworICAgIGJvb2wgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5k
ZXhNYXAqKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwor
CisgICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsKKyAgICBPd25QdHI8TGV2ZWxEQkNv
bXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKKyAgICBXZWFrUHRyRmFjdG9yeTxJREJCYWNraW5nU3Rv
cmU+IG1fd2Vha0ZhY3Rvcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAv
LyBJREJCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM2N2Q3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJz
b3JCYWNrZW5kTGV2ZWxEQi5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCIKKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJh
Y2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJv
ci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpDdXJzb3JJdGVy
YXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3Bl
cmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRMZXZlbERCPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIGtleSwgY2FsbGJhY2tzKSk7CisgICAg
fQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
KTsKK3ByaXZhdGU6CisgICAgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZExldmVsREI+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2N1cnNvcihjdXJz
b3IpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBt
X2N1cnNvcjsKKyAgICBSZWZQdHI8SURCS2V5PiBtX2tleTsKKyAgICBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpD
dXJzb3JBZHZhbmNlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kTGV2ZWxEQj4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKik7Citwcml2YXRlOgorICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kTGV2ZWxEQj4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1cnNv
cikKKyAgICAgICAgLCBtX2NvdW50KGNvdW50KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxi
YWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERC
PiBtX2N1cnNvcjsKKyAgICB1bnNpZ25lZCBsb25nIG1fY291bnQ7CisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qjo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNo
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3Is
IG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIEN1cnNv
clByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZExl
dmVsREI+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1fbnVt
YmVyVG9GZXRjaChudW1iZXJUb0ZldGNoKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBt
X2N1cnNvcjsKKyAgICBpbnQgbV9udW1iZXJUb0ZldGNoOworICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOworfTsKKworSURCQ3Vyc29yQmFja2VuZExldmVsREI6OklEQkN1cnNv
ckJhY2tlbmRMZXZlbERCKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNv
ciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCisgICAgOiBtX3Rhc2tUeXBlKHRh
c2tUeXBlKQorICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgLCBtX2RhdGFiYXNl
KHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpKQorICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlv
bikKKyAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICwgbV9jdXJzb3Io
Y3Vyc29yKQorICAgICwgbV9jbG9zZWQoZmFsc2UpCit7CisgICAgbV90cmFuc2FjdGlvbi0+cmVn
aXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOworfQorCitJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6fklE
QkN1cnNvckJhY2tlbmRMZXZlbERCKCkKK3sKKyAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVy
T3BlbkN1cnNvcih0aGlzKTsKK30KKworCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpj
b250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIElEQl9UUkFDRSgi
SURCQ3Vyc29yQmFja2VuZExldmVsREI6OmNvbnRpbnVlIik7CisgICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBrZXksIGNhbGxiYWNrcykpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjph
ZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFj
a2VuZExldmVsREI6OmFkdmFuY2UiKTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7CisgICAgbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEN1cnNv
ckFkdmFuY2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBjb3VudCwgY2FsbGJhY2tzKSk7Cit9CisK
K3ZvaWQgSURCQ3Vyc29yQmFja2VuZExldmVsREI6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBl
cmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopCit7CisgICAgSURCX1RSQUNFKCJD
dXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7CisgICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwg
IW1fY3Vyc29yLT5tX2N1cnNvci0+YWR2YW5jZShtX2NvdW50KSkgeworICAgICAgICBtX2N1cnNv
ci0+bV9jdXJzb3IgPSAwOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19j
YXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFyeUtl
eSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZExldmVs
REI6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKikKK3sKKyAgICBJREJfVFJBQ0UoIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIp
OworICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmNv
bnRpbnVlRnVuY3Rpb24obV9rZXkuZ2V0KCkpKSB7CisgICAgICAgIG1fY3Vyc29yLT5tX2N1cnNv
ciA9IDA7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVk
QnVmZmVyKj4oMCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2VzcyhtX2N1cnNvci0+a2V5KCksIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCksIG1fY3Vy
c29yLT52YWx1ZSgpKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRl
RnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9u
Q29kZSYpCit7CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRl
Iik7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uUmVhZE9ubHkpOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJL
ZXlSYW5nZTo6Y3JlYXRlKG1fY3Vyc29yLT5wcmltYXJ5S2V5KCkpOworICAgIG1fZGF0YWJhc2Ut
PmRlbGV0ZVJhbmdlKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwga2V5UmFu
Z2UucmVsZWFzZSgpLCBwcnBDYWxsYmFja3MpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRM
ZXZlbERCOjpwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBJREJfVFJB
Q0UoIklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpwcmVmZXRjaENvbnRpbnVlIik7CisgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpOworfQorCit2
b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJh
dGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKikKK3sKKyAgICBJREJf
VFJBQ0UoIkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uIik7CisKKyAgICBWZWN0b3I8
UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4g
Zm91bmRQcmltYXJ5S2V5czsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gPiBmb3Vu
ZFZhbHVlczsKKworICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3IpCisgICAgICAgIG1fY3Vyc29y
LT5tX3NhdmVkQ3Vyc29yID0gbV9jdXJzb3ItPm1fY3Vyc29yLT5jbG9uZSgpOworCisgICAgY29u
c3Qgc2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7CisgICAgc2l6ZV90
IHNpemVFc3RpbWF0ZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtYmVyVG9G
ZXRjaDsgKytpKSB7CisgICAgICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNv
ci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpIHsKKyAgICAgICAgICAgIG1fY3Vyc29y
LT5tX2N1cnNvciA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGZvdW5kS2V5cy5hcHBlbmQobV9jdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAgIGZv
dW5kUHJpbWFyeUtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpKTsK
KworICAgICAgICBzd2l0Y2ggKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBJbmRleGVkREI6OkN1cnNvcktleU9ubHk6CisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBl
bmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbmRleGVkREI6OkN1cnNvcktleUFuZFZhbHVlOgorICAgICAgICAgICAgc2l6ZUVzdGlt
YXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS0+c2l6ZSgpOworICAgICAgICAgICAg
Zm91bmRWYWx1ZXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9j
dXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1f
Y3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsKKworICAgICAg
ICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKCFmb3VuZEtleXMuc2l6ZSgpKSB7CisgICAgICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChm
b3VuZEtleXMsIGZvdW5kUHJpbWFyeUtleXMsIGZvdW5kVmFsdWVzKTsKK30KKwordm9pZCBJREJD
dXJzb3JCYWNrZW5kTGV2ZWxEQjo6cHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGlu
dCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpwcmVmZXRjaFJl
c2V0Iik7CisgICAgbV9jdXJzb3IgPSBtX3NhdmVkQ3Vyc29yOworICAgIG1fc2F2ZWRDdXJzb3Ig
PSAwOworCisgICAgaWYgKG1fY2xvc2VkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3Vy
c29yKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZFByZWZldGNoZXM7ICsraSkg
eworICAgICAgICAgICAgYm9vbCBvayA9IG1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKCk7Cisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgSURCQ3Vyc29yQmFja2VuZExldmVsREI6OmNsb3NlKCkKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpjbG9zZSIpOworICAgIG1fY2xvc2VkID0gdHJ1ZTsK
KyAgICBtX2N1cnNvci5jbGVhcigpOworICAgIG1fc2F2ZWRDdXJzb3IuY2xlYXIoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYzc3MTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJh
Y2tlbmRMZXZlbERCLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBJREJDdXJz
b3JCYWNrZW5kTGV2ZWxEQl9oCisjZGVmaW5lIElEQkN1cnNvckJhY2tlbmRMZXZlbERCX2gKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUg
IklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOworY2xhc3MgSURC
S2V5UmFuZ2U7CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRMZXZlbERCIDogcHVibGljIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRMZXZlbERCPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFja2VuZExl
dmVsREIoY3Vyc29yLCBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5v
cm1hbFRhc2ssIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkKSk7CisgICAgfQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vy
c29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQ3Vyc29yQmFj
a2VuZExldmVsREIoY3Vyc29yLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG9i
amVjdFN0b3JlSWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+SURCQ3Vyc29yQmFja2VuZExldmVs
REIoKTsKKworICAgIC8vIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZv
aWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVmUHRy
PElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hDb250aW51ZShpbnQgbnVt
YmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51
c2VkUHJlZmV0Y2hlcyk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKCkgeyB9CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJzb3ItPmtleSgpOyB9CisgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOyB9CisgICAgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRl
eGVkREI6OkN1cnNvcktleU9ubHkpID8gMCA6IG1fY3Vyc29yLT52YWx1ZSgpOyB9CisgICAgdm9p
ZCBjbG9zZSgpOworCitwcml2YXRlOgorICAgIElEQkN1cnNvckJhY2tlbmRMZXZlbERCKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+LCBJbmRleGVkREI6OkN1cnNvclR5cGUsIElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworCisgICAgY2xhc3MgQ3Vyc29ySXRl
cmF0aW9uT3BlcmF0aW9uOworICAgIGNsYXNzIEN1cnNvckFkdmFuY2VPcGVyYXRpb247CisgICAg
Y2xhc3MgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb247CisKKyAgICBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7CisgICAgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQj4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQj4gbV90cmFuc2FjdGlvbjsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0
U3RvcmVJZDsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9jdXJzb3I7
IC8vIE11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgorICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gbV9zYXZlZEN1cnNvcjsgLy8gTXVzdCBiZSBkZXN0cm95
ZWQgYmVmb3JlIG1fdHJhbnNhY3Rpb24uCisKKyAgICBib29sIG1fY2xvc2VkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURCQ3Vyc29yQmFja2VuZExldmVsREJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5OWRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qi5jcHAKQEAgLTAsMCArMSwxMzg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCIKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxl
dmVsREIuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9y
ZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yTGV2ZWxEQi5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEm
IG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRh
ZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNraW5n
U3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmpl
Y3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKK307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CisgICAgfQor
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsK
K3ByaXZhdGU6CisgICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
b2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3Rv
cmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFj
a2luZ1N0b3JlOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9y
ZU1ldGFkYXRhOworfTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVyc2lv
bkNoYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpP
cGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2
ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihkYXRhYmFzZSwgdHJhbnNh
Y3Rpb25JZCwgdmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOworICAgIH0K
KyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7
Citwcml2YXRlOgorICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2
NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICA6IG1f
ZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9u
SWQpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgbV9jYWxsYmFja3Mo
Y2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFj
a3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
PiBtX2RhdGFiYXNlOworICAgIGludDY0X3QgbV90cmFuc2FjdGlvbklkOworICAgIGludDY0X3Qg
bV92ZXJzaW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKK307CisKK2Ns
YXNzIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVj
dFN0b3JlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQpKTsKKyAgICB9Cisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOwor
cHJpdmF0ZToKKyAgICBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3Rv
cmVJZChvYmplY3RTdG9yZUlkKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gbV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJZDsKK307CisKK2NsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+
IGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9w
ZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBE
ZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAg
LCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAg
fQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IG1fZGF0YWJhc2U7Cisg
ICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Cit9OworCitj
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+
IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91
c0ludFZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25D
aGFuZ2VBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgcHJldmlvdXNWZXJzaW9uLCBwcmV2aW91c0lu
dFZlcnNpb24pKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgY29u
c3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQor
ICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9wcmV2aW91c1ZlcnNp
b24ocHJldmlvdXNWZXJzaW9uKQorICAgICAgICAsIG1fcHJldmlvdXNJbnRWZXJzaW9uKHByZXZp
b3VzSW50VmVyc2lvbikKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI+IG1fZGF0YWJhc2U7CisgICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9uOwor
ICAgIGludDY0X3QgbV9wcmV2aW91c0ludFZlcnNpb247Cit9OworCitjbGFzcyBDcmVhdGVJbmRl
eE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRp
b24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Jl
YXRlSW5kZXhPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFk
YXRhKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgQ3JlYXRlSW5kZXhPcGVyYXRpb24oUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0
U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3Rv
cmU7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCitjbGFzcyBEZWxldGVJbmRleE9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5k
ZXhPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7
CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqKTsKK3ByaXZhdGU6CisgICAgRGVsZXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6IG1fYmFja2luZ1N0
b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJ
ZCkKKyAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICB7CisgICAg
fQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Cisg
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSBtX2luZGV4TWV0YWRhdGE7Cit9OworCitjbGFzcyBDcmVhdGVJbmRleEFib3J0T3BlcmF0
aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
PiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24o
ZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAg
ICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9y
ZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgewor
ICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBtX2Rh
dGFiYXNlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGlu
dDY0X3QgbV9pbmRleElkOworfTsKKworY2xhc3MgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9w
ZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0
YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKik7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAgICA6
IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0
b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgewor
ICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBtX2Rh
dGFiYXNlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsKKworY2xhc3MgR2V0T3BlcmF0aW9u
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
SW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE9wZXJh
dGlvbihiYWNraW5nU3RvcmUsIG1ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlS
YW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgR2V0
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBt
X2RhdGFiYXNlSWQobWV0YWRhdGEuaWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9rZXlQ
YXRoKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkua2V5UGF0aCkKKyAg
ICAgICAgLCBtX2F1dG9JbmNyZW1lbnQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKS5hdXRvSW5jcmVtZW50KQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisg
ICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV9jYWxsYmFja3Mo
Y2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RT
dG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmlkID09IG9iamVjdFN0b3JlSWQpOworICAgIH0KKwor
ICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNv
bnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IElEQktleVBhdGgg
bV9rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OworICAgIGNvbnN0IFJl
ZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBJbmRleGVkREI6OkN1cnNv
clR5cGUgbV9jdXJzb3JUeXBlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2Fs
bGJhY2tzOworfTsKKworY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQdXRPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBp
bmRleElkcywgaW5kZXhLZXlzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgUHV0T3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBW
ZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+JiBpbmRleEtleXMp
CisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0
YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUp
CisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2tleShrZXkpCisgICAgICAg
ICwgbV9wdXRNb2RlKHB1dE1vZGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQor
ICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMpCisgICAgICAgICwgbV9pbmRleEtleXMoaW5k
ZXhLZXlzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmU7CisgICAgY29uc3QgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV92YWx1ZTsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5PiBtX2tl
eTsKKyAgICBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgbV9wdXRN
b2RlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiBtX2luZGV4SWRzOworICAgIGNvbnN0IFZlY3RvcjxJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gbV9pbmRleEtleXM7Cit9OworCitjbGFz
cyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShzaXplX3QgaW5kZXhD
b3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2V0SW5kZXhlc1JlYWR5
T3BlcmF0aW9uKGluZGV4Q291bnQpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBTZXRJbmRleGVz
UmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQpCisgICAgICAgIDogbV9pbmRleENvdW50
KGluZGV4Q291bnQpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBtX2luZGV4Q291
bnQ7Cit9OworCitjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwg
SW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5DdXJzb3JPcGVyYXRp
b24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlS
YW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CisgICAg
fQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
KTsKK3ByaXZhdGU6CisgICAgT3BlbkN1cnNvck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNv
clR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFi
YXNlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAg
ICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAg
ICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1
cnNvclR5cGUpCisgICAgICAgICwgbV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJC
YWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFz
ZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0
X3QgbV9pbmRleElkOworICAgIGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFu
Z2U7CisgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9kaXJlY3Rpb247Cisg
ICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIG1fdGFza1R5cGU7CisgICAgY29u
c3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBDb3VudE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDb3VudE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAg
ICBDb3VudE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAgICwgbV9vYmplY3RT
dG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAg
ICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFj
a3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1f
YmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOwor
ICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBjb25zdCBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIERlbGV0ZVJhbmdlT3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVSYW5nZU9w
ZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJhbmdl
LCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBEZWxldGVSYW5nZU9wZXJhdGlv
bihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9i
YWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFz
ZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAs
IG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQor
ICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tp
bmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5
UmFuZ2U7CisgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9Owor
CitjbGFzcyBDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDbGVhck9wZXJhdGlvbihiYWNraW5nU3RvcmUsIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgor
ICAgIENsZWFyT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBt
X29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
UGVuZGluZ09wZW5DYWxsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5n
T3BlbkNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFBlbmRpbmdPcGVuQ2FsbChjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0
cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorICAgIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKCkgeyByZXR1cm4gbV9kYXRh
YmFzZUNhbGxiYWNrczsgfQorICAgIGludDY0X3QgdmVyc2lvbigpIHsgcmV0dXJuIG1fdmVyc2lv
bjsgfQorICAgIGludDY0X3QgdHJhbnNhY3Rpb25JZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNh
Y3Rpb25JZDsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdPcGVuQ2FsbChQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBk
YXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24p
CisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VD
YWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24p
CisgICAgICAgICwgbV90cmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpCisgICAgeworICAgIH0K
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CisgICAgaW50NjRfdCBtX3ZlcnNp
b247CisgICAgY29uc3QgaW50NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Cit9OworCitjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpQZW5kaW5nRGVsZXRlQ2FsbCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBQZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZh
dGU6CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK1Bhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIp
Cit7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGJhY2tlbmQgPSBhZG9w
dFJlZihuZXcgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQihuYW1lLCBkYXRhYmFzZSwgZmFjdG9y
eSwgdW5pcXVlSWRlbnRpZmllcikpOworICAgIGlmICghYmFja2VuZC0+b3BlbkludGVybmFsKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBiYWNrZW5kLnJlbGVhc2UoKTsKK30KKwor
bmFtZXNwYWNlIHsKK2NvbnN0IGNoYXIqIE5vU3RyaW5nVmVyc2lvbiA9ICIiOworfQorCitJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQiogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAg
IDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV9tZXRhZGF0YShuYW1lLCBJ
bnZhbGlkSWQsIE5vU3RyaW5nVmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJz
aW9uLCBJbnZhbGlkSWQpCisgICAgLCBtX2lkZW50aWZpZXIodW5pcXVlSWRlbnRpZmllcikKKyAg
ICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpjcmVhdGUoKSkKKyAgICAsIG1fY2xvc2lu
Z0Nvbm5lY3Rpb24oZmFsc2UpCit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxs
KCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmFkZE9iamVjdFN0b3Jl
KGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBpbnQ2NF90IG5ld01h
eE9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZS5pZCkpOworICAgIGlmIChuZXdNYXhPYmplY3RTdG9yZUlkICE9
IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQobV9t
ZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkIDwgbmV3TWF4T2JqZWN0U3RvcmVJZCk7CisgICAgICAg
IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA9IG5ld01heE9iamVjdFN0b3JlSWQ7CisgICAg
fQorICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5pZCwgb2JqZWN0
U3RvcmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnJlbW92ZU9iamVj
dFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5v
YmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4SWQpCit7CisgICAgQVNTRVJU
KG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKCFvYmplY3RTdG9yZS5pbmRleGVz
LmNvbnRhaW5zKGluZGV4LmlkKSk7CisgICAgb2JqZWN0U3RvcmUuaW5kZXhlcy5zZXQoaW5kZXgu
aWQsIGluZGV4KTsKKyAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJ
bnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlLm1heEluZGV4SWQgPCBuZXdN
YXhJbmRleElkKTsKKyAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5kZXhJZCA9IG5ld01heEluZGV4
SWQ7CisgICAgfQorICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlk
LCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cmVt
b3ZlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAg
QVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsK
KyAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmpl
Y3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmlu
ZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMucmVtb3Zl
KGluZGV4SWQpOworICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZUlk
LCBvYmplY3RTdG9yZSk7Cit9CisKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6b3Bl
bkludGVybmFsKCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBib29sIG9rID0g
bV9iYWNraW5nU3RvcmUtPmdldElEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCAm
bV9tZXRhZGF0YSwgc3VjY2Vzcyk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdWNjZXNzID09
IChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCksICJzdWNjZXNzID0gJXMsIG1faWQgPSAlbGxk
Iiwgc3VjY2VzcyA/ICJ0cnVlIiA6ICJmYWxzZSIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9t
ZXRhZGF0YS5pZCkpOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RTdG9y
ZXMobV9tZXRhZGF0YS5pZCwgJm1fbWV0YWRhdGEub2JqZWN0U3RvcmVzKTsKKworICAgIHJldHVy
biBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShtX21ldGFkYXRhLm5h
bWUsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uLCBtX21ldGFkYXRh
LmlkKTsKK30KKworSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6fklEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREIoKQoreworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQjo6YmFja2luZ1N0b3JlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9i
YWNraW5nU3RvcmU7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRl
T2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50KQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAo
IXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAgQVNT
RVJUKCFtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhKG5hbWUsIG9iamVj
dFN0b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZTo6TWluaW11bUluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RT
dG9yZU1ldGFkYXRhKSwgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIG9iamVjdFN0b3JlSWQpKTsKKworICAgIGFkZE9iamVjdFN0b3JlKG9iamVjdFN0b3JlTWV0
YWRhdGEsIG9iamVjdFN0b3JlSWQpOworfQorCit2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQor
eworICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKKyAgICBpZiAo
IW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0
U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUsIG1fb2JqZWN0U3Rv
cmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCkp
IHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6
Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29i
amVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAgIElEQl9UUkFD
RSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblZlcnNpb25DaGFuZ2UpOworCisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9i
amVjdFN0b3JlSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVPYmpl
Y3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZU1ldGFk
YXRhKSwgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmpl
Y3RTdG9yZU1ldGFkYXRhKSk7CisgICAgcmVtb3ZlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCk7
Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlSW5kZXgoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5KQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQjo6Y3JlYXRlSW5kZXgiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9u
LT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAg
QVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsK
KyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKCFvYmplY3RT
dG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBjb25zdCBJREJJbmRleE1ldGFk
YXRhIGluZGV4TWV0YWRhdGEobmFtZSwgaW5kZXhJZCwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVu
dHJ5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVyYXRp
b246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSks
IENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkKSk7CisKKyAgICBhZGRJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLCBp
bmRleElkKTsKK30KKwordm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkNy
ZWF0ZUluZGV4T3BlcmF0aW9uIik7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5k
ZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9p
bmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRh
dGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKKyAgICAgICAgdHJhbnNh
Y3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlp
bmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5z
YWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOwor
ICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRh
YmFzZS0+cmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOworfQorCit2b2lk
IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit7CisgICAgSURC
X1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVJbmRleCIpOworICAgIElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCk7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7
CisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0b3Jl
LmluZGV4ZXMuZ2V0KGluZGV4SWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhE
ZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZUlk
LCBpbmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKKworICAgIHJlbW92ZUluZGV4KG9iamVj
dFN0b3JlSWQsIGluZGV4SWQpOworfQorCit2b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElE
Ql9UUkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKKyAgICBib29sIG9rID0gbV9iYWNraW5n
U3RvcmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4
TWV0YWRhdGEuaWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGlu
ZyBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKKyAgICB9Cit9CisKK3ZvaWQgRGVsZXRl
SW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
KiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24iKTsKKyAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOworICAg
IG1fZGF0YWJhc2UtPmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7CisgICAgLy8gVGhlIGZy
b250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNs
eSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2Fj
dGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5k
LCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCisgICAgaWYg
KG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQorICAgICAgICBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZExldmVsREI6OmFib3J0KGludDY0X3QgdHJhbnNhY3Rpb25JZCkKK3sKKyAgICAv
LyBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgdW5rbm93biwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVu
IGFib3J0ZWQgYnkgdGhlIGJhY2tlbmQgYmVmb3JlIHRoaXMgY2FsbCBzbyBpdCBpcyBzYWZlIHRv
IGlnbm9yZSBpdC4KKyAgICBpZiAobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25J
ZCkpCisgICAgICAgIG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKS0+YWJvcnQoKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjphYm9ydChpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCit7CisgICAgLy8g
SWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBh
Ym9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBp
Z25vcmUgaXQuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQp
KQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KGVycm9y
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpnZXQoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI6OmdldCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJh
bnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soR2V0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG1fbWV0YWRhdGEsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBrZXlPbmx5ID8gSW5kZXhlZERCOjpDdXJzb3JL
ZXlPbmx5IDogSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZSwgY2FsbGJhY2tzKSk7Cit9CisK
K3ZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
IHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiR2V0T3BlcmF0aW9uIik7CisKKyAgICBS
ZWZQdHI8SURCS2V5PiBrZXk7CisKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisg
ICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgICAg
ICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwor
ICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAg
ICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1
cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IElu
ZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1ZSBS
ZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0g
bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJ
ZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZh
bCBPcGVyYXRpb24KKyAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tp
bmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJh
bmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGtleSA9
IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleTsKKyAgICBib29sIG9rOworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgIC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwg
T3BlcmF0aW9uCisgICAgICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAgICAgICAgb2sgPSBtX2Jh
Y2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOworICAgICAg
ICBpZiAoIW9rKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2
YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rv
cih2YWx1ZSkpOworICAgICAgICByZXR1cm47CisKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUg
d2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGluZGV4ZXMuCisgICAgb2sgPSBtX2JhY2tpbmdTdG9y
ZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBw
cmltYXJ5S2V5KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXByaW1hcnlLZXkpIHsKKyAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2N1
cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSB7CisgICAgICAgIC8vIEluZGV4
IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhwcmltYXJ5S2V5LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElu
ZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgIFZlY3RvcjxjaGFy
PiB2YWx1ZTsKKyAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlk
LCAqcHJpbWFyeUtleSwgdmFsdWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgbV9jYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIG1fY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHByaW1h
cnlLZXksIG1fa2V5UGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cHV0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFi
YXNlQmFja2VuZExldmVsREI6OnB1dCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAg
IGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rp
b24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOworCisgICAgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZU1ldGFkYXRhID0gbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0
b3JlTWV0YWRhdGEuYXV0b0luY3JlbWVudCB8fCBrZXkuZ2V0KCkpOworCisgICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQo
KSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBp
bmRleElkcywgaW5kZXhLZXlzKSk7Cit9CisKK3ZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFD
RSgiUHV0T3BlcmF0aW9uIik7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKyAgICBBU1NFUlQobV9pbmRleElkcy5zaXpl
KCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKKyAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZh
bHNlOworCisgICAgUmVmUHRyPElEQktleT4ga2V5OworICAgIGlmIChtX3B1dE1vZGUgIT0gSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUgJiYgbV9vYmplY3RTdG9yZS5h
dXRvSW5jcmVtZW50ICYmICFtX2tleSkgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5j
S2V5ID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6Z2VuZXJhdGVLZXkobV9iYWNraW5n
U3RvcmUsIHRyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAg
ICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOworICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhp
bXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gYXV0b0luY0tleTsKKyAgICB9IGVsc2UKKyAgICAg
ICAga2V5ID0gbV9rZXk7CisKKyAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKKwor
ICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciByZWNvcmRJZGVudGlmaWVyOwor
ICAgIGlmIChtX3B1dE1vZGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpBZGRPbmx5
KSB7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBvayA9IG1fYmFj
a2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksICZy
ZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAg
IG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4
aXN0ZW5jZS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGZvdW5kKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktleSBh
bHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3RvcjxPd25QdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kTGV2ZWxEQjo6SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOworICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7CisgICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7CisgICAgYm9v
bCBiYWNraW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6bWFr
ZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgbV9iYWNraW5nU3RvcmUuZ2V0KCksIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsIG1faW5kZXhJZHMsIG1f
aW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRz
KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGlu
ZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlz
Q29uc3RyYWludHMpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9y
TWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQmVmb3JlIHRoaXMg
cG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sg
dGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCisgICAgYmFja2luZ1N0b3JlU3VjY2Vz
cyA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1
ZSwgJnJlY29yZElkZW50aWZpZXIpOworICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vzcykgewor
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5n
IHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsr
aSkgeworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlciog
aW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAgIGluZGV4V3JpdGVy
LT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9iYWNraW5nU3RvcmUsIHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmUuaWQpOworICAgIH0KKworICAgIGlmIChtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQg
JiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRl
ICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9r
ID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6dXBkYXRlS2V5R2VuZXJhdG9yKG1fYmFj
a2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCBr
ZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtl
eSBnZW5lcmF0b3IuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYgaW5kZXhLZXlzKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQjo6c2V0SW5kZXhLZXlzIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIFJl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmltYXJ5S2V5OworICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU+IHN0b3JlID0gYmFja2luZ1N0b3JlKCk7CisgICAgLy8gRklYTUU6IFRoaXMg
bWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYg
aXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KKyAgICBJREJCYWNraW5nU3RvcmU6OlJl
Y29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgYm9vbCBvayA9IHN0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlk
LCAqcHJpbWFyeUtleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKKyAgICBpZiAoIW9rKSB7
CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcg
aW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFmb3VuZCkg
eworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpm
b3JtYXQoIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3Jl
LiIpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZExldmVsREI6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKyAgICBib29sIGJhY2tpbmdT
dG9yZVN1Y2Nlc3MgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjptYWtlSW5kZXhXcml0
ZXJzKHRyYW5zYWN0aW9uLCBzdG9yZS5nZXQoKSwgaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YSwg
cHJpbWFyeUtleSwgZmFsc2UsIGluZGV4SWRzLCBpbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZl
cnJvck1lc3NhZ2UsIG9iZXlzQ29uc3RyYWludHMpOworICAgIGlmICghYmFja2luZ1N0b3JlU3Vj
Y2VzcykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjog
YmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKKyAgICAgICAgdHJhbnNh
Y3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyKiBp
bmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaW5kZXhXcml0ZXIt
PndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIsICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAg
IH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpzZXRJbmRleGVzUmVhZHko
aW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzKQoreworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6
c2V0SW5kZXhlc1JlYWR5Iik7CisKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAo
IXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIFNldElu
ZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKGluZGV4SWRzLnNpemUoKSkpOworfQorCit2b2lk
IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIlNldEluZGV4ZXNSZWFkeU9w
ZXJhdGlvbiIpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyArK2kp
CisgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpOworfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6Om9wZW5DdXJzb3IoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRp
cmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI6Om9wZW5DdXJzb3IiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQo
KSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25seSA/
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUs
IHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAg
IElEQl9UUkFDRSgiT3BlbkN1cnNvck9wZXJhdGlvbiIpOworCisgICAgLy8gVGhlIGZyb250ZW5k
IGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCisgICAg
Ly8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBhbnkg
ZWFybGllcgorICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFybHkg
bW9kZSBpbiBjYXNlIG11bHRpcGxlCisgICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCBp
biBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCisgICAgaWYgKG1fdGFza1R5cGUgPT0g
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKKyAgICAgICAgdHJh
bnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3I7CisgICAgaWYgKG1faW5kZXhJZCA9PSBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlw
ZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
bV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIEFT
U0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFz
ayk7CisgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5
KQorICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5J
bmRleEtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
bV9kaXJlY3Rpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CisgICAgfQorCisgICAgaWYgKCFi
YWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0
aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19j
YXN0PElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGU+KG1fdGFza1R5cGUpKTsK
KyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZExldmVsREI+IGN1cnNvciA9IElEQkN1cnNvckJh
Y2tlbmRMZXZlbERCOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2N1cnNvclR5
cGUsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZUlkKTsKKyAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5
KCksIGN1cnNvci0+dmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qjo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCOjpjb3VudCIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAg
IGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX21ldGFk
YXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBp
ZCgpLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Cit9CisK
K3ZvaWQgQ291bnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJDb3VudE9wZXJhdGlvbiIpOworICAg
IHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRh
ZGF0YTo6SW52YWxpZElkKQorICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdT
dG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5n
ZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBlbHNlCisgICAgICAgIGJhY2tpbmdT
dG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2Vzcyhjb3VudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkbyB7CisgICAg
ICAgICsrY291bnQ7CisgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1
bmN0aW9uKDApKTsKKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZVJhbmdlIik7CisgICAgSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25SZWFkT25seSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZVJhbmdl
T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGtl
eVJhbmdlLCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJ
REJfVFJBQ0UoIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7CisgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9i
amVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERC
OjpDdXJzb3JOZXh0KTsKKyAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlSWQsIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKSkgeworICAgICAg
ICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBp
biByYW5nZSIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Cisg
ICAgfQorCisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZExldmVsREI6OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAg
IElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y2xlYXIiKTsKKyAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
blJlYWRPbmx5KTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ2xlYXJPcGVyYXRp
b246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tz
KSk7Cit9CisKK3ZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNs
ZWFyT3BlcmF0aW9uIik7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlSWQpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJy
b3IgY2xlYXJpbmcgb2JqZWN0IHN0b3JlIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKK30KKwordm9pZCBEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBJREJfVFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisgICAg
Ym9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCks
IG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFs
IGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0
YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVycm9y
KTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVyc2lvbkNo
YW5nZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFu
c2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24iKTsKKyAg
ICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtX2RhdGFiYXNlLT5pZCgpOworICAgIGludDY0X3Qgb2xk
VmVyc2lvbiA9IG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50VmVyc2lvbjsKKyAgICBBU1NFUlQo
bV92ZXJzaW9uID4gb2xkVmVyc2lvbik7CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRW
ZXJzaW9uID0gbV92ZXJzaW9uOworICAgIGlmICghbV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUt
PnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9u
KSkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9y
IHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZSB3aGVuIHVwZGF0aW5nIHZlcnNpb24uIik7
CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgdHJhbnNhY3Rp
b24tPmFib3J0KGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoIW1f
ZGF0YWJhc2UtPm1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKKyAgICBtX2RhdGFiYXNlLT5tX3Bl
bmRpbmdTZWNvbmRIYWxmT3BlbiA9IFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKG1fY2FsbGJhY2tz
LCBtX2RhdGFiYXNlQ2FsbGJhY2tzLCBtX3RyYW5zYWN0aW9uSWQsIG1fdmVyc2lvbik7CisgICAg
bV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCBtX2RhdGFiYXNlLCBtX2Rh
dGFiYXNlLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
Ojp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgeworICAg
ICAgICBBU1NFUlQoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgICAg
IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOworICAgIH0K
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkZpbmlzaGVk
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJwVHJhbnNhY3Rpb24p
Cit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9u
ID0gcHJwVHJhbnNhY3Rpb247CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uLT5pZCgpKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbi0+aWQoKSkgPT0gdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fdHJhbnNhY3Rpb25zLnJl
bW92ZSh0cmFuc2FjdGlvbi0+aWQoKSk7CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKKyAgICAgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLmdldCgpID09IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5nZXQo
KSk7CisgICAgICAgIG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5jbGVhcigpOwor
ICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjp0cmFuc2FjdGlvbkZp
bmlzaGVkQW5kQWJvcnRGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI+IHBycFRyYW5zYWN0aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIGlmICh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7CisgICAg
ICAgIC8vIElmIHRoaXMgd2FzIGFuIG9wZW4td2l0aC12ZXJzaW9uIGNhbGwsIHRoZXJlIHdpbGwg
YmUgYSAic2Vjb25kCisgICAgICAgIC8vIGhhbGYiIG9wZW4gY2FsbCB3YWl0aW5nIGZvciB1cyBp
biBwcm9jZXNzUGVuZGluZ0NhbGxzLgorICAgICAgICAvLyBGSVhNRTogV2hlbiB3ZSBubyBsb25n
ZXIgc3VwcG9ydCBzZXRWZXJzaW9uLCBhc3NlcnQgc3VjaCBhIHRoaW5nLgorICAgICAgICBpZiAo
bV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlv
biB3YXMgYWJvcnRlZCBpbiB1cGdyYWRlbmVlZGVkIGV2ZW50IGhhbmRsZXIuIikpOworICAgICAg
ICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
ICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQoUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBwcnBU
cmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwor
fQorCitzaXplX3QgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y29ubmVjdGlvbkNvdW50KCkK
K3sKKyAgICAvLyBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcGVuZGluZyBvcGVuIGNhbGxzLCBhcyB0
aG9zZSBzaG91bGQgbm90IGJsb2NrIHZlcnNpb24gY2hhbmdlcyBhbmQgZGVsZXRlcy4KKyAgICBy
ZXR1cm4gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXplKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQjo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCit7CisgICAgaWYgKG1fcGVu
ZGluZ1NlY29uZEhhbGZPcGVuKSB7CisgICAgICAgIEFTU0VSVChtX3BlbmRpbmdTZWNvbmRIYWxm
T3Blbi0+dmVyc2lvbigpID09IG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CisgICAgICAgIEFTU0VS
VChtX21ldGFkYXRhLmlkICE9IEludmFsaWRJZCk7CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhh
bGZPcGVuLT5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwor
ICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi5yZWxlYXNlKCk7CisgICAgICAgIC8vIEZh
bGwgdGhyb3VnaCB3aGVuIGNvbXBsZXRlLCBhcyBwZW5kaW5nIGRlbGV0ZXMgbWF5IGJlIChwYXJ0
aWFsbHkpIHVuYmxvY2tlZC4KKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjaGVjayBp
cyBvbmx5IGFuIG9wdGltaXphdGlvbiB0byByZWR1Y2UgcXVldWUtY2h1cm4gYW5kCisgICAgLy8g
bm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3M7IGRlbGV0ZURhdGFiYXNlIGFuZCBvcGVuQ29u
bmVjdGlvbiB3aWxsCisgICAgLy8gcmVxdWV1ZSB0aGVpciBjYWxscyBpZiB0aGlzIGNvbmRpdGlv
biBpcyB0cnVlLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgp
ICYmIGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpCisgICAgICAgIHJldHVybjsKKyAgICB3aGls
ZSAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBPd25QdHI8UGVu
ZGluZ0RlbGV0ZUNhbGw+IHBlbmRpbmdEZWxldGVDYWxsID0gbV9wZW5kaW5nRGVsZXRlQ2FsbHMu
dGFrZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZURhdGFiYXNlRmluYWwocGVuZGluZ0RlbGV0ZUNh
bGwtPmNhbGxiYWNrcygpKTsKKyAgICB9CisgICAgLy8gZGVsZXRlRGF0YWJhc2VGaW5hbCBzaG91
bGQgbmV2ZXIgcmUtcXVldWUgY2FsbHMuCisgICAgQVNTRVJUKG1fcGVuZGluZ0RlbGV0ZUNhbGxz
LmlzRW1wdHkoKSk7CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIGFsc28gbm90IHJlYWxseSBuZWVk
ZWQsIG9wZW5Db25uZWN0aW9uIHdvdWxkIGp1c3QgcmVxdWV1ZSBpdHMgY2FsbHMuCisgICAgaWYg
KG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gT3BlbiBjYWxscyBjYW4gYmUgcmVxdWV1ZWQgaWYgYW4gb3BlbiBjYWxsIHN0YXJ0ZWQg
YSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4KKyAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ09w
ZW5DYWxsPiA+IHBlbmRpbmdPcGVuQ2FsbHM7CisgICAgbV9wZW5kaW5nT3BlbkNhbGxzLnN3YXAo
cGVuZGluZ09wZW5DYWxscyk7CisgICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHko
KSkgeworICAgICAgICBPd25QdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBw
ZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5k
aW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPmRhdGFiYXNlQ2FsbGJh
Y2tzKCksIHBlbmRpbmdPcGVuQ2FsbC0+dHJhbnNhY3Rpb25JZCgpLCBwZW5kaW5nT3BlbkNhbGwt
PnZlcnNpb24oKSk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OmNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVj
dFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6OmNyZWF0ZSh0cmFuc2FjdGlvbklkLCBjYWxsYmFja3MsIG9iamVjdFN0b3JlSWRzLCBz
dGF0aWNfY2FzdDxJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT4obW9kZSksIHRoaXMpOworICAg
IEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZCkpOworICAgIG1f
dHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbklkLCB0cmFuc2FjdGlvbi5nZXQoKSk7Cit9CisK
K3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCB2ZXJzaW9uKQoreworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MgPSBwcnBEYXRhYmFzZUNhbGxi
YWNrczsKKworICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVu
bmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgeworICAgICAgICBtX3BlbmRpbmdPcGVuQ2Fs
bHMuYXBwZW5kKFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX21ldGFkYXRhLmlkID09IEludmFsaWRJZCkgeworICAgICAgICAvLyBUaGUg
ZGF0YWJhc2Ugd2FzIGRlbGV0ZWQgdGhlbiBpbW1lZGlhdGVseSByZS1vcGVuZWQ7IG9wZW5JbnRl
cm5hbCgpIHJlY3JlYXRlcyBpdCBpbiB0aGUgYmFja2luZyBzdG9yZS4KKyAgICAgICAgaWYgKG9w
ZW5JbnRlcm5hbCgpKQorICAgICAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFN0cmluZyBtZXNzYWdlOworICAgICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yOworICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6Tm9JbnRWZXJzaW9uKQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiSW50ZXJuYWwg
ZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIG5vIHZlcnNpb24gc3BlY2lmaWVkLiI7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJJ
bnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNlIHdpdGggdmVyc2lvbiAlbGxkIiwgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPih2ZXJzaW9uKSk7CisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIG1lc3NhZ2UpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFdlIGluZmVyIHRoYXQgdGhlIGRhdGFiYXNlIGRpZG4ndCBleGlzdCBmcm9tIGl0
cyBsYWNrIG9mIGVpdGhlciB0eXBlIG9mIHZlcnNpb24uCisgICAgYm9vbCBpc05ld0RhdGFiYXNl
ID0gbV9tZXRhZGF0YS52ZXJzaW9uID09IE5vU3RyaW5nVmVyc2lvbiAmJiBtX21ldGFkYXRhLmlu
dFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOworCisgICAgaWYg
KHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pIHsKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgY29tbWVudHMgd2FzIHJlbGF0ZWQgdG8gQ2hyb21pdW0gY29k
ZS4gSXQgbWF5IGJlIGluY29ycmVjdAorICAgICAgICAvLyBGb3IgdW5pdCB0ZXN0cyBvbmx5IC0g
c2tpcCB1cGdyYWRlIHN0ZXBzLiBDYWxsaW5nIGZyb20gc2NyaXB0IHdpdGggRGVmYXVsdEludFZl
cnNpb24gdGhyb3dzIGV4Y2VwdGlvbi4KKyAgICAgICAgQVNTRVJUKGlzTmV3RGF0YWJhc2UpOwor
ICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Cisg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRh
ZGF0YTo6Tm9JbnRWZXJzaW9uKSB7CisgICAgICAgIGlmICghaXNOZXdEYXRhYmFzZSkgeworICAg
ICAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPihkYXRhYmFzZUNhbGxiYWNrcykpOworICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gU3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCBh
bmQgbm8gZGF0YWJhc2UgZXhpc3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0byAxLgorICAgICAg
ICB2ZXJzaW9uID0gMTsKKyAgICB9CisKKyAgICBpZiAodmVyc2lvbiA+IG1fbWV0YWRhdGEuaW50
VmVyc2lvbikgeworICAgICAgICBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY2FsbGJh
Y2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKHZlcnNpb24gPCBtX21ldGFkYXRhLmludFZlcnNpb24p
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJl
cXVlc3RlZCB2ZXJzaW9uICglbGxkKSBpcyBsZXNzIHRoYW4gdGhlIGV4aXN0aW5nIHZlcnNpb24g
KCVsbGQpLiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmVyc2lvbiksIHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4obV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBBU1NFUlQodmVyc2lvbiA9PSBtX21ldGFkYXRhLmludFZlcnNpb24pOworICAgIG1f
ZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKKyAgICBjYWxsYmFj
a3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsKK30KKwordm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQoreworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRh
dGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7CisgICAgQVNTRVJUKGNhbGxi
YWNrcyk7CisgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2
ZW50IGlzIG5vdCBmaXJlZCBhdCBjb25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNl
dC4KKyAgICAgICAgaWYgKCppdCAhPSBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICAgICAgICAgICgq
aXQpLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS5pbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJz
aW9uKTsKKyAgICB9CisgICAgLy8gVGhlIHNwZWMgZGljdGF0ZXMgd2Ugd2FpdCB1bnRpbCBhbGwg
dGhlIHZlcnNpb24gY2hhbmdlIGV2ZW50cyBhcmUKKyAgICAvLyBkZWxpdmVyZWQgYW5kIHRoZW4g
Y2hlY2sgbV9kYXRhYmFzZUNhbGxiYWNrcy5lbXB0eSgpIGJlZm9yZSBwcm9jZWVkaW5nCisgICAg
Ly8gb3IgZmlyaW5nIGEgYmxvY2tlZCBldmVudCwgYnV0IGluc3RlYWQgd2Ugc2hvdWxkIGJlIGNv
bnNpc3RlbnQgd2l0aCBob3cKKyAgICAvLyB0aGUgb2xkIHNldFZlcnNpb24gKGluY29ycmVjdGx5
KSBkaWQgaXQuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgY2FsbCB0byBvbkJsb2NrZWQgYW5k
IGluc3RlYWQgd2FpdCB1bnRpbCB0aGUgZnJvbnRlbmQKKyAgICAvLyB0ZWxscyB1cyB0aGF0IGFs
bCB0aGUgYmxvY2tlZCBldmVudHMgaGF2ZSBiZWVuIGRlbGl2ZXJlZC4gU2VlCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgaWYgKGNvbm5l
Y3Rpb25Db3VudCgpKQorICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZChtX21ldGFkYXRhLmlu
dFZlcnNpb24pOworICAgIC8vIEZJWE1FOiBBZGQgdGVzdCBmb3IgbV9ydW5uaW5nVmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uLgorICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24gfHwgY29ubmVjdGlvbkNvdW50KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFw
cGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tz
LCB0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgY3JlYXRlVHJh
bnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgZGF0YWJhc2VDYWxsYmFja3MsIG9iamVjdFN0b3JlSWRz
LCBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uSWQpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhWZXJzaW9u
Q2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVy
c2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIFZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRW
ZXJzaW9uKSk7CisKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKKyAgICBt
X2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgaWYgKGlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkp
IHsKKyAgICAgICAgZm9yIChEYXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFj
a3NTZXQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRo
ZSBldmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGlu
ZyBzZXQuCisgICAgICAgICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEuaW50
VmVyc2lvbiwgSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBj
b25uZWN0aW9ucyBhZnRlciB0aGUKKyAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUg
cmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKKyAgICAgICAgY2FsbGJhY2tzLT5v
bkJsb2NrZWQobV9tZXRhZGF0YS5pbnRWZXJzaW9uKTsKKyAgICAgICAgbV9wZW5kaW5nRGVsZXRl
Q2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzLnJlbGVhc2Uo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGV0ZURhdGFiYXNlRmluYWwoY2Fs
bGJhY2tzLnJlbGVhc2UoKSk7Cit9CisKK2Jvb2wgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQoreworICAgIHJldHVybiBjb25uZWN0aW9uQ291bnQo
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRhYmFzZUZp
bmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgQVNTRVJUKCFp
c0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwor
ICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0ZURhdGFiYXNlKG1fbWV0YWRhdGEubmFtZSkp
IHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgZGVsZXRp
bmcgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbWV0YWRhdGEu
dmVyc2lvbiA9IE5vU3RyaW5nVmVyc2lvbjsKKyAgICBtX21ldGFkYXRhLmlkID0gSW52YWxpZElk
OworICAgIG1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50
VmVyc2lvbjsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jbGVhcigpOworICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6
Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQorewor
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OworICAgIEFTU0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNrcykp
OworCisgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tzKTsKKyAgICBp
ZiAobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmRh
dGFiYXNlQ2FsbGJhY2tzKCkgPT0gY2FsbGJhY2tzKSB7CisgICAgICAgIG1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuLT5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xv
c2VkLiIpKTsKKyAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAg
IH0KKworICAgIGlmIChjb25uZWN0aW9uQ291bnQoKSA+IDEpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3IgdG8gcHJvY2Vz
cyBhIHBlbmRpbmcgb3BlbiBjYWxsCisgICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJlZW50ZXJpbmcg
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y2xvc2UuIFRoZW4gdGhlCisgICAgLy8gYmFja2Vu
ZCB3b3VsZCBiZSByZW1vdmVkIGJvdGggYnkgdGhlIGluc3BlY3RvciBjbG9zaW5nIGl0cyBjb25u
ZWN0aW9uLCBhbmQKKyAgICAvLyBieSB0aGUgY29ubmVjdGlvbiB0aGF0IGZpcnN0IGNhbGxlZCBj
bG9zZS4KKyAgICAvLyBUbyBhdm9pZCB0aGF0IHNpdHVhdGlvbiwgZG9uJ3QgcHJvY2VlZCBpbiBj
YXNlIG9mIHJlZW50cmFuY3kuCisgICAgaWYgKG1fY2xvc2luZ0Nvbm5lY3Rpb24pCisgICAgICAg
IHJldHVybjsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gY2xvc2luZ0Nvbm5lY3Rpb24obV9j
bG9zaW5nQ29ubmVjdGlvbiwgdHJ1ZSk7CisgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOworCisg
ICAgLy8gRklYTUU6IEFkZCBhIHRlc3QgZm9yIHRoZSBtX3BlbmRpbmdPcGVuQ2FsbHMgY2FzZXMg
YmVsb3cuCisgICAgaWYgKCFjb25uZWN0aW9uQ291bnQoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxz
LnNpemUoKSAmJiAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuc2l6ZSgpKSB7CisgICAgICAgIFRyYW5z
YWN0aW9uTWFwIHRyYW5zYWN0aW9ucyhtX3RyYW5zYWN0aW9ucyk7CisgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiQ29ubmVjdGlvbiBpcyBjbG9zaW5nLiIpOwor
ICAgICAgICBmb3IgKFRyYW5zYWN0aW9uTWFwOjpjb25zdF9pdGVyYXRvcjo6VmFsdWVzIGl0ID0g
dHJhbnNhY3Rpb25zLnZhbHVlcygpLmJlZ2luKCksIGVuZCA9IHRyYW5zYWN0aW9ucy52YWx1ZXMo
KS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgKCppdCktPmFib3J0KGVycm9y
KTsKKworICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKKworICAgICAg
ICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOworCisgICAgICAgIC8vIFRoaXMgY2hlY2sgc2hvdWxk
IG9ubHkgYmUgZmFsc2UgaW4gdW5pdCB0ZXN0cy4KKyAgICAgICAgQVNTRVJUKG1fZmFjdG9yeSk7
CisgICAgICAgIGlmIChtX2ZhY3RvcnkpCisgICAgICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlE
QkRhdGFiYXNlQmFja2VuZChtX2lkZW50aWZpZXIpOworICAgIH0KK30KKwordm9pZCBDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiQ3JlYXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2Fj
dGlvbik7CisgICAgbV9kYXRhYmFzZS0+cmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZUlk
KTsKK30KKwordm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFD
RSgiRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOworICAgIEFTU0VSVF9VTlVTRUQo
dHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+YWRkT2JqZWN0U3Rv
cmUobV9vYmplY3RTdG9yZU1ldGFkYXRhLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlk
SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFu
c2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiIp
OworICAgIEFTU0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sICF0cmFuc2FjdGlvbik7CisgICAgbV9k
YXRhYmFzZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gbV9wcmV2aW91c1ZlcnNpb247CisgICAgbV9k
YXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV9wcmV2aW91c0ludFZlcnNpb247Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4ZjY2NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCX2gKKyNkZWZpbmUgSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQl9oCisKKyNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJNZXRh
ZGF0YS5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSURCQmFja2luZ1N0b3JlOworY2xhc3MgSURCRGF0YWJhc2U7Citj
bGFzcyBJREJGYWN0b3J5QmFja2VuZExldmVsREI7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCOworY2xhc3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI7CisKK2Ns
YXNzIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUq
IGRhdGFiYXNlLCBJREJGYWN0b3J5QmFja2VuZExldmVsREIqLCBjb25zdCBTdHJpbmcmIHVuaXF1
ZUlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZExldmVsREIoKTsK
KworICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdDsK
KworICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7CisgICAgaW50NjRfdCBp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KKyAgICB2b2lkIGFkZE9iamVjdFN0
b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVjdFN0
b3JlSWQpOworICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlk
KTsKKyAgICB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7CisgICAgdm9pZCByZW1vdmVJbmRl
eChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisKKyAgICB2b2lkIG9w
ZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKTsK
KyAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAg
Y29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21l
dGFkYXRhOyB9CisKKyAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgYXV0b0luY3JlbWVudCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9y
ZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21taXQo
aW50NjRfdCB0cmFuc2FjdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0
cmFuc2FjdGlvbklkKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKKworICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBi
b29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5k
ZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCk7CisKKyAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQiogdHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
ci5nZXQoKTsgfQorICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+KTsKKyAgICB2b2lkIHRyYW5z
YWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQj4pOworICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0Rmly
ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBib29sIGtleU9ubHks
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHB1
dChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5k
ZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvdW50KGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIElEQkRhdGFiYXNlQmFja2VuZExl
dmVsREIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJG
YWN0b3J5QmFja2VuZExldmVsREIqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwor
CisgICAgYm9vbCBvcGVuSW50ZXJuYWwoKTsKKyAgICB2b2lkIHJ1bkludFZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVy
c2lvbik7CisgICAgc2l6ZV90IGNvbm5lY3Rpb25Db3VudCgpOworICAgIHZvaWQgcHJvY2Vzc1Bl
bmRpbmdDYWxscygpOworCisgICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpOworICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworCisg
ICAgY2xhc3MgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjsKKworICAgIC8vIFdoZW4gYSAidmVyc2lv
bmNoYW5nZSIgdHJhbnNhY3Rpb24gYWJvcnRzLCB0aGVzZSByZXN0b3JlIHRoZSBiYWNrLWVuZCBv
YmplY3QgaGllcmFyY2h5LgorICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsK
KworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIElEQkRh
dGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Cisg
ICAgLy8gVGhpcyBtaWdodCBub3QgbmVlZCB0byBiZSBhIFJlZlB0ciBzaW5jZSB0aGUgZmFjdG9y
eSdzIGxpZmV0aW1lIGlzIHRoYXQgb2YgdGhlIHBhZ2UgZ3JvdXAsIGJ1dCBpdCdzIGJldHRlciB0
byBiZSBjb25zZXJ2aXRpdmUgdGhhbiBzb3JyeS4KKyAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tl
bmRMZXZlbERCPiBtX2ZhY3Rvcnk7CisKKyAgICBPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvckxldmVsREI+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcjsKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
OworCisgICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqPiBUcmFuc2FjdGlvbk1hcDsKKyAgICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9u
czsKKworICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKKyAgICBEZXF1ZTxPd25QdHI8UGVuZGlu
Z09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKKyAgICBPd25QdHI8UGVuZGluZ09wZW5D
YWxsPiBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbjsKKworICAgIGNsYXNzIFBlbmRpbmdEZWxldGVD
YWxsOworICAgIERlcXVlPE93blB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdEZWxl
dGVDYWxsczsKKworICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPiA+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OworICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7CisKKyAgICBib29sIG1fY2xvc2luZ0Nvbm5lY3Rpb247
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAvLyBJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTM4MTA2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFj
a2VuZExldmVsREIuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIgorCisjaW5jbHVkZSAiRE9NU3Ry
aW5nTGlzdC5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNl
cHRpb24uaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvckxldmVsREIuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIE0+CitzdGF0aWMgdm9p
ZCBjbGVhbldlYWtNYXAoSGFzaE1hcDxLLCBXZWFrUHRyPE0+ID4mIG1hcCkKK3sKKyAgICBIYXNo
TWFwPEssIFdlYWtQdHI8TT4gPiBvdGhlcjsKKyAgICBvdGhlci5zd2FwKG1hcCk7CisKKyAgICB0
eXBlbmFtZSBIYXNoTWFwPEssIFdlYWtQdHI8TT4gPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG90
aGVyLmJlZ2luKCk7CisgICAgd2hpbGUgKGl0ZXIgIT0gb3RoZXIuZW5kKCkpIHsKKyAgICAgICAg
aWYgKGl0ZXItPnZhbHVlLmdldCgpKQorICAgICAgICAgICAgbWFwLnNldChpdGVyLT5rZXksIGl0
ZXItPnZhbHVlKTsKKyAgICAgICAgKytpdGVyOworICAgIH0KK30KKworc3RhdGljIFN0cmluZyBj
b21wdXRlRmlsZUlkZW50aWZpZXIoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGxldmVsREJGaWxlU3VmZml4W10gPSAiQDEiOworICAgIHJl
dHVybiBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyBsZXZlbERCRmlsZVN1
ZmZpeDsKK30KKworc3RhdGljIFN0cmluZyBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKK3sKKyAgICByZXR1
cm4gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luKSArIG5hbWU7Cit9CisKK0lE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCkKK3sKK30K
KworSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjp+SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCkK
K3sKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVsREI6OnJlbW92ZUlEQkRhdGFiYXNl
QmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLmNvbnRhaW5zKHVuaXF1ZUlkZW50aWZpZXIpKTsKKyAgICBtX2Rh
dGFiYXNlQmFja2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgSURC
RmFjdG9yeUJhY2tlbmRMZXZlbERCOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3Jp
Z2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5
KQoreworICAgIElEQl9UUkFDRSgiSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpnZXREYXRhYmFz
ZU5hbWVzIik7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3Bl
bkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgaWYgKCFi
YWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3Igb3BlbmluZyBiYWNraW5nIHN0b3JlIGZvciBpbmRleGVkREIud2Via2l0R2V0RGF0YWJh
c2VOYW1lcy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gZGF0YWJhc2VOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworCisgICAg
VmVjdG9yPFN0cmluZz4gZm91bmROYW1lcyA9IGJhY2tpbmdTdG9yZS0+Z2V0RGF0YWJhc2VOYW1l
cygpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZm91bmRO
YW1lcy5iZWdpbigpOyBpdCAhPSBmb3VuZE5hbWVzLmVuZCgpOyArK2l0KQorICAgICAgICBkYXRh
YmFzZU5hbWVzLT5hcHBlbmQoKml0KTsKKworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFi
YXNlTmFtZXMucmVsZWFzZSgpKTsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVsREI6
OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4s
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit7
CisgICAgSURCX1RSQUNFKCJJREJGYWN0b3J5QmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFiYXNl
Iik7CisgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRl
bnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7CisKKyAgICBJREJEYXRhYmFzZUJh
Y2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJ
ZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsK
KyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2Us
IGRpcmVjdGx5IGRlbGV0ZSB0aGUKKyAgICAgICAgLy8gZGF0YWJhc2UuCisgICAgICAgIGl0LT52
YWx1ZS0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9u
IGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAg
IGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yIG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVu
dGlmaWVyKTsKKyAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKSB7CisgICAgICAgIG1fZGF0YWJhc2VC
YWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwor
ICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CisgICAg
ICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY3Jl
YXRpbmcgZGF0YWJhc2UgYmFja2VuZCBmb3IgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlLiIpKTsK
K30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qjo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9y
aWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIGNvbnN0IFN0cmluZyBm
aWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQo
KSk7CisgICAgY29uc3QgYm9vbCBvcGVuSW5NZW1vcnkgPSBkYXRhRGlyZWN0b3J5LmlzRW1wdHko
KTsKKworICAgIElEQkJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQyID0gbV9iYWNraW5nU3Rv
cmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7CisgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9y
ZU1hcC5lbmQoKSAmJiBpdDItPnZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gaXQyLT52YWx1
ZS5nZXQoKTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAg
ICBpZiAob3BlbkluTWVtb3J5KQorICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJCYWNraW5nU3Rv
cmU6Om9wZW5Jbk1lbW9yeShzZWN1cml0eU9yaWdpbi5nZXQoKSwgZmlsZUlkZW50aWZpZXIpOwor
ICAgIGVsc2UKKyAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVuKHNl
Y3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllcik7CisKKyAg
ICBpZiAoYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNsZWFuV2Vha01hcChtX2JhY2tpbmdTdG9y
ZU1hcCk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlTWFwLnNldChmaWxlSWRlbnRpZmllciwgYmFj
a2luZ1N0b3JlLT5jcmVhdGVXZWFrUHRyKCkpOworICAgICAgICAvLyBJZiBhbiBpbi1tZW1vcnkg
ZGF0YWJhc2UsIGJpbmQgbGlmZXRpbWUgdG8gdGhpcyBmYWN0b3J5IGluc3RhbmNlLgorICAgICAg
ICBpZiAob3BlbkluTWVtb3J5KQorICAgICAgICAgICAgbV9zZXNzaW9uT25seUJhY2tpbmdTdG9y
ZXMuYWRkKGJhY2tpbmdTdG9yZSk7CisKKyAgICAgICAgLy8gQWxsIGJhY2tpbmcgc3RvcmVzIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIGZhY3Rvcnkgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUuCisg
ICAgICAgIEFTU0VSVChtX3Nlc3Npb25Pbmx5QmFja2luZ1N0b3Jlcy5pc0VtcHR5KCkgfHwgb3Bl
bkluTWVtb3J5KTsKKworICAgICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJREJGYWN0b3J5QmFja2VuZExldmVsREI6
Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQoreworICAgIElEQl9UUkFDRSgiSURCRmFjdG9yeUJh
Y2tlbmRMZXZlbERCOjpvcGVuIik7CisgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0
eU9yaWdpbiA9IHBycFNlY3VyaXR5T3JpZ2luOworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVu
dGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0
KCkpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlQmFj
a2VuZDsKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgPT0gbV9kYXRh
YmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVj
dG9yeSk7CisgICAgICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9y
IGluZGV4ZWREQi5vcGVuLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNyZWF0
ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAg
ICAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKQorICAgICAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmRN
YXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgY3JlYXRpbmcgZGF0YWJhc2UgYmFja2VuZCBmb3IgaW5kZXhlZGRiLm9wZW4uIikpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGRhdGFiYXNl
QmFja2VuZCA9IGl0LT52YWx1ZTsKKworICAgIGRhdGFiYXNlQmFja2VuZC0+b3BlbkNvbm5lY3Rp
b24oY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZDkxMGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmln
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
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJREJGYWN0
b3J5QmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZExldmVsREJfaAor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjaW5jbHVk
ZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNp
bmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRE9NU3RyaW5nTGlzdDsKKworY2xhc3MgSURCQmFja2luZ1N0b3JlOworY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjsKKworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCIDogcHVibGljIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZExldmVsREI+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
QigpKTsKKyAgICB9CisgICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCk7CisK
KyAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gd2VhayBwb2ludGVycy4KKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSURCRGF0YWJhc2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIGludDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgZGF0YURpcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKTsKKworcHJvdGVjdGVkOgorICAgIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQigpOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5CYWNraW5nU3RvcmUo
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisKK3By
aXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI+ID4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOworICAgIElEQkRhdGFiYXNlQmFj
a2VuZE1hcCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFdlYWtQdHI8SURCQmFja2luZ1N0b3JlPiA+IElEQkJhY2tpbmdTdG9yZU1hcDsKKyAgICBJ
REJCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVNYXA7CisKKyAgICBIYXNoU2V0PFJlZlB0
cjxJREJCYWNraW5nU3RvcmU+ID4gbV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXM7CisKKyAgICAv
LyBPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSBzaG91bGQgZXhpc3QgYXQgYW55IGdp
dmVuIHRpbWUuCisgICAgc3RhdGljIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQiogaWRiRmFjdG9y
eUJhY2tlbmRJbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURC
RmFjdG9yeUJhY2tlbmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCmluZGV4IDg4
ZTBlMGIuLjA0ZTQyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcApAQCAtMjYsOCArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIK
IAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQorI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKIAogI2luY2x1ZGUgIklEQktl
eS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKQEAgLTE1MjIsNyArMTUyMSw3IEBAIGludDY0
X3QgSW5kZXhGcmVlTGlzdEtleTo6aW5kZXhJZCgpIGNvbnN0CiB9CiAKIC8vIEZJWE1FOiBXZSBu
ZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBw
aW5nCi0vLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLiBDYW4gdGhlIG1h
cHBpbmcgYmVjb21lIHVucmVsaWFibGU/CisvLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCLiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CiAvLyBDYW4g
d2UgcmVtb3ZlIHRoaXM/CiBjb25zdCBjaGFyKiBPYmplY3RTdG9yZU5hbWVzS2V5OjpkZWNvZGUo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU5hbWVzS2V5
KiByZXN1bHQpCiB7CkBAIC0xODA1LDUgKzE4MDQsNCBAQCBQYXNzUmVmUHRyPElEQktleT4gSW5k
ZXhEYXRhS2V5OjpwcmltYXJ5S2V5KCkgY29uc3QKIH0gLy8gbmFtZXNwYWNlIElEQkxldmVsREJD
b2RpbmcKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFVTRShMRVZFTERCKQot
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5kZXgg
NTYxOTdmNi4uYWQyMmYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmgKQEAgLTI2LDggKzI2LDcg
QEAKICNpZm5kZWYgSURCTGV2ZWxEQkNvZGluZ19oCiAjZGVmaW5lIElEQkxldmVsREJDb2Rpbmdf
aAogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCisjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQogCiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTI4Miw3ICsyODEsNyBAQCBw
cml2YXRlOgogY2xhc3MgT2JqZWN0U3RvcmVOYW1lc0tleSB7CiBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgb2JqZWN0IHN0b3JlIGlkcywgYmVjYXVz
ZSBhIG1hcHBpbmcKLSAgICAvLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
LiBDYW4gdGhlIG1hcHBpbmcgYmVjb21lIHVucmVsaWFibGU/CisgICAgLy8gaXMga2VwdCBpbiB0
aGUgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJl
bGlhYmxlPwogICAgIC8vIENhbiB3ZSByZW1vdmUgdGhpcz8KICAgICBzdGF0aWMgY29uc3QgY2hh
ciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3Rv
cmVOYW1lc0tleSogcmVzdWx0KTsKICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsKQEAgLTM2Myw3
ICszNjIsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBVU0UoTEVWRUxEQikKLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAKICNlbmRpZiAv
LyBJREJMZXZlbERCQ29kaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZExldmVsREIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTBlN2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2Vu
ZExldmVsREIuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxE
QikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJC
aW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAi
SURCQ3Vyc29yQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJ
REJLZXkuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRl
cjo6dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgYm9vbCYgY2FuQWRkS2V5cywg
Y29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBTdHJpbmcqIGVycm9yTWVzc2FnZSkgY29uc3QKK3sK
KyAgICBjYW5BZGRLZXlzID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2lu
ZGV4S2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICBib29sIG9rID0gYWRkaW5nS2V5QWxsb3dl
ZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5S2V5LCBjYW5BZGRLZXlzKTsK
KyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KCFjYW5BZGRLZXlzKSB7CisgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICAg
ICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiVW5hYmxlIHRvIGFkZCBrZXkg
dG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSB1bmlx
dWVuZXNzIHJlcXVpcmVtZW50cy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGNhbkFk
ZEtleXMgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyOjp3cml0ZUluZGV4S2V5cyhjb25zdCBJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0Cit7
CisgICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCBv
ayA9IGJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCBy
ZWNvcmRJZGVudGlmaWVyKTsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJl
ZW4gdmVyaWZpZWQgYXMgYSB2YWxpZCB3cml0ZSBkdXJpbmcgdmVyaWZ5SW5kZXhLZXlzLgorICAg
ICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7CisgICAgfQorfQorCitib29sIElEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyOjphZGRpbmdLZXlBbGxvd2VkKElEQkJhY2tp
bmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5
S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdAoreworICAgIGFsbG93ZWQgPSBmYWxzZTsKKyAgICBp
ZiAoIW1faW5kZXhNZXRhZGF0YS51bmlxdWUpIHsKKyAgICAgICAgYWxsb3dlZCA9IHRydWU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlZlB0cjxJREJLZXk+IGZvdW5kUHJp
bWFyeUtleTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBvayA9IGJhY2tpbmdT
dG9yZS5rZXlFeGlzdHNJbkluZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCAqaW5kZXhLZXksIGZvdW5kUHJpbWFyeUtleSwgZm91bmQpOworICAgIGlm
ICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWZvdW5kIHx8IChwcmltYXJ5
S2V5ICYmIGZvdW5kUHJpbWFyeUtleS0+aXNFcXVhbChwcmltYXJ5S2V5KSkpCisgICAgICAgIGFs
bG93ZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElEQk9iamVjdFN0b3Jl
QmFja2VuZExldmVsREI6Om1ha2VJbmRleFdyaXRlcnMoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCPiB0cmFuc2FjdGlvbiwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3Rv
cmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2Jq
ZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVy
YXRlZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBWZWN0b3I8T3du
UHRyPEluZGV4V3JpdGVyPiA+KiBpbmRleFdyaXRlcnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBi
b29sJiBjb21wbGV0ZWQpCit7CisgICAgQVNTRVJUKGluZGV4SWRzLnNpemUoKSA9PSBpbmRleEtl
eXMuc2l6ZSgpKTsKKyAgICBjb21wbGV0ZWQgPSBmYWxzZTsKKworICAgIEhhc2hNYXA8aW50NjRf
dCwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5TWFwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
IGluZGV4S2V5TWFwLmFkZChpbmRleElkc1tpXSwgaW5kZXhLZXlzW2ldKTsKKworICAgIGZvciAo
SURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gb2Jq
ZWN0U3RvcmUuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS5pbmRleGVzLmVuZCgp
OyArK2l0KSB7CisKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXggPSBpdC0+
dmFsdWU7CisKKyAgICAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMg
a2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+a2V5KTsKKyAgICAgICAgLy8gSWYgdGhlIG9iamVj
dFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRoZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBp
ZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFsc28gdXNlIHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQp
IGtleSBhcyBhIGtleS4KKyAgICAgICAgaWYgKGtleVdhc0dlbmVyYXRlZCAmJiAoaW5kZXgua2V5
UGF0aCA9PSBvYmplY3RTdG9yZS5rZXlQYXRoKSkKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKHBy
aW1hcnlLZXkpOworCisgICAgICAgIE93blB0cjxJbmRleFdyaXRlcj4gaW5kZXhXcml0ZXIoYWRv
cHRQdHIobmV3IEluZGV4V3JpdGVyKGluZGV4LCBrZXlzKSkpOworICAgICAgICBib29sIGNhbkFk
ZEtleXMgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gaW5kZXhX
cml0ZXItPnZlcmlmeUluZGV4S2V5cygqYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUuaWQsIGluZGV4Lmlk
LCBjYW5BZGRLZXlzLCBwcmltYXJ5S2V5LmdldCgpLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBp
ZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghY2FuQWRkS2V5cykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGluZGV4V3JpdGVycy0+YXBwZW5kKGluZGV4V3JpdGVyLnJlbGVhc2UoKSk7CisgICAgfQorCisg
ICAgY29tcGxldGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxJ
REJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OmdlbmVyYXRlS2V5KFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQoreworICAgIGNvbnN0IGludDY0X3QgbWF4R2VuZXJhdG9yVmFsdWUg
PSA5MDA3MTk5MjU0NzQwOTkyTEw7IC8vIE1heGltdW0gaW50ZWdlciBzdG9yYWJsZSBhcyBFQ01B
U2NyaXB0IG51bWJlci4KKyAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXI7CisgICAgYm9vbCBvayA9
IGJhY2tpbmdTdG9yZS0+Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3Vy
cmVudE51bWJlcik7CisgICAgaWYgKCFvaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyIik7CisgICAgICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZUludmFsaWQoKTsKKyAgICB9CisgICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8IGN1
cnJlbnROdW1iZXIgPiBtYXhHZW5lcmF0b3JWYWx1ZSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlSW52YWxpZCgpOworCisgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJl
bnROdW1iZXIpOworfQorCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OnVwZGF0
ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiBrZXks
IGJvb2wgY2hlY2tDdXJyZW50KQoreworICAgIEFTU0VSVChrZXkgJiYga2V5LT50eXBlKCkgPT0g
SURCS2V5OjpOdW1iZXJUeXBlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0
ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0X3Q+
KGZsb29yKGtleS0+bnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBV
U0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5YjZlNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElE
Qk9iamVjdFN0b3JlQmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJPYmplY3RTdG9yZUJhY2tl
bmRMZXZlbERCX2gKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5o
IgorI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkgJiYgVVNFKExFVkVMREIpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI7CitzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKKworLy8gRklYTUU6IHRoaXMgbmFt
ZXNwYWNlIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtb3ZlIGl0cyBjb250ZW50cyBvdXQgdG8gdGhl
aXIgb3duIGhvbWUuCituYW1lc3BhY2UgSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQiB7CisK
KyAgICBjbGFzcyBJbmRleFdyaXRlciB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBJ
bmRleFdyaXRlcihjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQorICAgICAg
ICAgICAgOiBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgeyB9CisKKyAg
ICAgICAgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwg
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXMmIGluZGV4S2V5cykK
KyAgICAgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgICAgICAg
ICAsIG1faW5kZXhLZXlzKGluZGV4S2V5cykKKyAgICAgICAgeyB9CisKKyAgICAgICAgYm9vbCB2
ZXJpZnlJbmRleEtleXMoSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSA9IDAs
IFN0cmluZyogZXJyb3JNZXNzYWdlID0gMCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOworCisg
ICAgICAgIHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyJiwgSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdDsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3Rv
cmUmLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5KiBpbmRl
eEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2VkKSBjb25zdCBXQVJO
X1VOVVNFRF9SRVRVUk47CisKKyAgICAgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4
TWV0YWRhdGE7CisgICAgICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlz
IG1faW5kZXhLZXlzOworICAgIH07CisKKyAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiwgSURCQmFja2luZ1N0b3JlKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlOjpJbmRleEtleXM+JiwgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0
ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisKKyAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuZXJhdGVLZXkoUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgYm9vbCB1
cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5KiwgYm9vbCBjaGVja0N1cnJlbnQpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5k
TGV2ZWxEQl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjlkMDA2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVk
ZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlv
bi5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yTGV2ZWxEQi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6Y3JlYXRlKGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGUgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2Up
Cit7CisgICAgSGFzaFNldDxpbnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKKyAgICAgICAgb2Jq
ZWN0U3RvcmVIYXNoU2V0LmFkZChvYmplY3RTdG9yZUlkc1tpXSk7CisKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIoaWQsIGNhbGxiYWNrcywgb2Jq
ZWN0U3RvcmVIYXNoU2V0LCBtb2RlLCBkYXRhYmFzZSkpOworfQorCitJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKGludDY0X3QgaWQsIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxp
bnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUs
IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQorICAgIDogbV9pZChpZCkKKyAgICAs
IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCisgICAgLCBtX21vZGUobW9kZSkKKyAg
ICAsIG1fc3RhdGUoVW51c2VkKQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwg
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAs
IG1fdHJhbnNhY3Rpb24oZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLmdldCgpKQorICAgICwgbV90
YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnRhc2tUaW1lckZp
cmVkKQorICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQoreworICAgIC8vIFdlIHBh
c3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgor
ICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCisgICAgbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKK30KKworSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6fklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIo
KQoreworICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8g
Z2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KKyAgICBB
U1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQjo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUgdHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8T3BlcmF0
aW9uPiBhYm9ydFRhc2spCit7CisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh0eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6
Tm9ybWFsVGFzaykKKyAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOworICAgIGVsc2UK
KyAgICAgICAgbV9wcmVlbXB0aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKworICAgIGlmIChh
Ym9ydFRhc2spCisgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2spOwor
CisgICAgaWYgKG1fc3RhdGUgPT0gVW51c2VkKQorICAgICAgICBzdGFydCgpOworICAgIGVsc2Ug
aWYgKG1fc3RhdGUgPT0gUnVubmluZyAmJiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6OmFib3J0KCkKK3sKKyAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
ICh1bmtub3duIGNhdXNlKSIpKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCOjphYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQoreworICAgIElE
Ql9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6YWJvcnQiKTsKKyAgICBpZiAo
bV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCB3YXNSdW5u
aW5nID0gbV9zdGF0ZSA9PSBSdW5uaW5nOworCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRv
IHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8v
IGFib3J0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRv
IGtlZXAgb3Vyc2VsdmVzCisgICAgLy8gYWxpdmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9k
LgorICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBwcm90ZWN0KCp0aGlzKTsK
KworICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKKyAgICBtX3Rhc2tUaW1lci5zdG9wKCk7CisKKyAg
ICBpZiAod2FzUnVubmluZykKKyAgICAgICAgbV90cmFuc2FjdGlvbi5yb2xsYmFjaygpOworCisg
ICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgorICAgIHdoaWxlICghbV9hYm9ydFRh
c2tRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRyPE9wZXJhdGlvbj4gdGFzayhtX2Fi
b3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSgwKTsKKyAg
ICB9CisKKyAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykg
bXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJl
ZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxs
b3cgdGhlIGJhY2tpbmcgc3RvcmUKKyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBv
cmRlciBpcyBjcml0aWNhbC4KKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2Fj
dGlvbi5yZXNldCgpOworCisgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQg
YXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAgIC8v
IHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9z
aW5nIGNvbm5lY3Rpb25zLgorICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKKyAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworCisgICAgaWYgKG1fY2FsbGJhY2tzKQorICAg
ICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChtX2lkLCBlcnJvcik7CisKKyAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKworICAgIG1fZGF0YWJh
c2UgPSAwOworfQorCitib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmlzVGFza1F1
ZXVlRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByZWVtcHRpdmVUYXNrUXVldWUuaXNF
bXB0eSgpICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsKK30KKworYm9vbCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCOjpoYXNQZW5kaW5nVGFza3MoKSBjb25zdAoreworICAgIHJldHVybiBt
X3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzIHx8ICFpc1Rhc2tRdWV1ZUVtcHR5KCk7Cit9CisKK3Zv
aWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6cmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1
cnNvckJhY2tlbmRJbXBsKiBjdXJzb3IpCit7CisgICAgbV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29y
KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp1bnJlZ2lzdGVyT3Bl
bkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNv
cnMucmVtb3ZlKGN1cnNvcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6cnVuKCkKK3sKKyAgICAvLyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFydGVkIHRo
aXMgdHJhbnNhY3Rpb24uIFNjaGVkdWxlIGEgdGltZXIKKyAgICAvLyB0byBwcm9jZXNzIHRoZSBm
aXJzdCB0YXNrLgorICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBtX3N0YXRl
ID09IFJ1bm5pbmcpOworICAgIEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7CisKKyAg
ICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6c3RhcnQoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNlZCk7
CisKKyAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjo6Y29tbWl0KCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6OmNvbW1pdCIpOworCisgICAgLy8gSW4gbXVsdGlwcm9jZXNzIHBvcnRz
LCBmcm9udC1lbmQgbWF5IGhhdmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBhbiBhYm9ydCBoYXMg
YWxyZWFkeQorICAgIC8vIGJlZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBiYWNr
LWVuZC4KKyAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAg
bV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKworICAgIC8vIEZyb250LWVuZCBoYXMgcmVxdWVzdGVk
IGEgY29tbWl0LCBidXQgdGhlcmUgbWF5IGJlIHRhc2tzIGxpa2UgY3JlYXRlSW5kZXggd2hpY2gK
KyAgICAvLyBhcmUgY29uc2lkZXJlZCBzeW5jaHJvbm91cyBieSB0aGUgZnJvbnQtZW5kIGJ1dCBh
cmUgcHJvY2Vzc2VkIGFzeW5jaHJvbm91c2x5LgorICAgIGlmIChoYXNQZW5kaW5nVGFza3MoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQorICAgIC8vIGNvbW1pdCBz
dGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVwIG91
cnNlbHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KKyAgICBS
ZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBi
b29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOworICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsK
KworICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fdHJhbnNhY3Rpb24uY29tbWl0KCk7
CisKKyAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVz
dCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgIC8vIGFyZSBmaXJlZCwg
YXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cg
dGhlIGJhY2tpbmcgc3RvcmUKKyAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRl
ciBpcyBjcml0aWNhbC4KKyAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CisgICAgbV90cmFuc2FjdGlv
bi5yZXNldCgpOworCisgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMg
Y29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcworICAgIC8vIHRo
ZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5n
IGNvbm5lY3Rpb25zLgorICAgIGlmICghdW51c2VkKQorICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisKKyAgICBpZiAoY29tbWl0dGVk
KSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKG1faWQpOworICAgICAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChtX2lkLCBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOworICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKyAgICB9CisKKyAgICBtX2Rh
dGFiYXNlID0gMDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0YXNr
VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiopCit7CisgICAg
SURCX1RSQUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0YXNrVGltZXJGaXJlZCIp
OworICAgIEFTU0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKKworICAgIGlmIChtX3N0YXRlID09
IFN0YXJ0UGVuZGluZykgeworICAgICAgICBtX3RyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgICAg
IG1fc3RhdGUgPSBSdW5uaW5nOworICAgIH0KKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0
byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAv
LyB0YXNrcy4gVGFrZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9iamVjdCBh
bGl2ZSBzbyB0aGF0CisgICAgLy8gdGhlIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9ucyBjYW4g
YmUgY2hlY2tlZC4KKyAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJvdGVj
dCgqdGhpcyk7CisKKyAgICBUYXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRp
dmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOworICAgIHdo
aWxlICghdGFza1F1ZXVlLT5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgeworICAg
ICAgICBBU1NFUlQobV9zdGF0ZSA9PSBSdW5uaW5nKTsKKyAgICAgICAgT3duUHRyPE9wZXJhdGlv
bj4gdGFzayh0YXNrUXVldWUtPnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSh0
aGlzKTsKKworICAgICAgICAvLyBFdmVudCBpdHNlbGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1ZSBz
aG91bGQgYmUgcHJvY2Vzc2VkIG5leHQuCisgICAgICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwor
ICAgIH0KKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRhc2tzLCB3ZSBoYXZlbid0
IGFscmVhZHkgY29tbWl0dGVkL2Fib3J0ZWQsCisgICAgLy8gYW5kIHRoZSBmcm9udC1lbmQgcmVx
dWVzdGVkIGEgY29tbWl0LCBpdCBpcyBub3cgc2FmZSB0byBkbyBzby4KKyAgICBpZiAoIWhhc1Bl
bmRpbmdUYXNrcygpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQgJiYgbV9jb21taXRQZW5kaW5nKQor
ICAgICAgICBjb21taXQoKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
OjpjbG9zZU9wZW5DdXJzb3JzKCkKK3sKKyAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFja2Vu
ZEltcGwqPjo6aXRlcmF0b3IgaSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAhPSBtX29wZW5D
dXJzb3JzLmVuZCgpOyArK2kpCisgICAgICAgICgqaSktPmNsb3NlKCk7CisgICAgbV9vcGVuQ3Vy
c29ycy5jbGVhcigpOworfQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M4NjkxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBV
U0UoTEVWRUxEQikKKworI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVsREIuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUVycm9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOworY2xhc3MgSURC
Q3Vyc29yQmFja2VuZEltcGw7CitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrczsKKworY2xhc3Mg
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsK
KyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2b2lkIGNvbW1pdCgpOworCisgICAgY2xhc3MgT3BlcmF0
aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbigpIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKikg
PSAwOworICAgIH07CisKKyAgICB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4pOworICAgIHZvaWQgcnVuKCk7CisgICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4m
IHNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlkczsgfQorICAgIHZvaWQgc2No
ZWR1bGVUYXNrKFBhc3NPd25QdHI8T3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9wZXJhdGlv
bj4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpOb3JtYWxUYXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9CisgICAgdm9pZCBzY2hl
ZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc093blB0
cjxPcGVyYXRpb24+LCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7
CisgICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsKKyAg
ICB2b2lkIHVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7CisgICAg
dm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsg
fQorICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVt
cHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0K
KyAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpIHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKworICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREIoaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworCisgICAg
ZW51bSBTdGF0ZSB7CisgICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHll
dC4KKyAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IGJhY2tpbmcg
c3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVkLgorICAgICAgICBSdW5uaW5nLCAvLyBC
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0ZWQgYnV0IG5vdCB5ZXQgZmluaXNoZWQuCisg
ICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJvcnRlZCBvciBjb21taXR0ZWQuCisgICAgfTsK
KworICAgIHZvaWQgc3RhcnQoKTsKKworICAgIGJvb2wgaXNUYXNrUXVldWVFbXB0eSgpIGNvbnN0
OworICAgIGJvb2wgaGFzUGVuZGluZ1Rhc2tzKCkgY29uc3Q7CisKKyAgICB2b2lkIHRhc2tUaW1l
ckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+Kik7CisgICAgdm9pZCBj
bG9zZU9wZW5DdXJzb3JzKCk7CisKKyAgICBjb25zdCBpbnQ2NF90IG1faWQ7CisgICAgY29uc3Qg
SGFzaFNldDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOworICAgIGNvbnN0IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlIG1fbW9kZTsKKworICAgIFN0YXRlIG1fc3RhdGU7CisgICAgYm9vbCBt
X2NvbW1pdFBlbmRpbmc7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxi
YWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKwor
ICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPE9wZXJhdGlvbj4gPiBUYXNrUXVldWU7CisgICAgVGFz
a1F1ZXVlIG1fdGFza1F1ZXVlOworICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7
CisgICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7CisKKyAgICBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247CisKKyAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0
aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgorICAgIFRpbWVyPElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI+IG1fdGFza1RpbWVyOworICAgIGludCBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzOworCisgICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+IG1fb3BlbkN1
cnNvcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAvLyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yTGV2ZWxEQi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Y2M5YTE2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwCkBAIC0wLDAg
KzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkgJiYgVVNFKExFVkVMREIpCisKKyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVs
REI+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpjcmVhdGUoKQoreworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIoKSk7Cit9
CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yTGV2ZWxEQigpCit7Cit9CisKK0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERC
Ojp+SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIoKQoreworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRk
KHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvckxldmVsREI6OmRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uKSk7CisKKyAgICBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNh
Y3Rpb24pOworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCk7Cit9CisKK3ZvaWQgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OmRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworCisgICAgaWYgKG1fcXVldWVkVHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgeworICAgICAgICBBU1NFUlQoIW1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgICAgICBtX3F1ZXVl
ZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworICAgIH0gZWxzZSBpZiAobV9zdGFy
dGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAgICAgICAgbV9zdGFydGVk
VHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7CisKKyAgICBtX3RyYW5zYWN0aW9ucy5y
ZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsK
K30KKworI2lmbmRlZiBOREVCVUcKKy8vIFZlcmlmaWVzIGludGVybmFsIGNvbnNpc3RpZW5jeSB3
aGlsZSByZXR1cm5pbmcgd2hldGhlciBhbnl0aGluZyBpcyBmb3VuZC4KK2Jvb2wgSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvckxldmVsREI6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBpZiAo
bV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKQorICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgaWYgKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFmb3VuZCk7CisgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICB9CisgICAgQVNTRVJUKGZvdW5kID09IG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5z
YWN0aW9uKSk7CisgICAgcmV0dXJuIGZvdW5kOworfQorI2VuZGlmCisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvckxldmVsREI6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKK3sK
KyAgICBpZiAobV9xdWV1ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9zdGFydGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSB8fCAoKm1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5iZWdpbigpKS0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25WZXJzaW9uQ2hhbmdlKTsKKworICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdp
bigpOworICAgIHdoaWxlIChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQoKSkgeworICAg
ICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9ICppdDsKKyAg
ICAgICAgKytpdDsKKyAgICAgICAgaWYgKGNhblJ1blRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSkg
eworICAgICAgICAgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsK
KyAgICAgICAgICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOworICAg
ICAgICAgICAgdHJhbnNhY3Rpb24tPnJ1bigpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0
aWMgYm9vbCBkb1Njb3Blc092ZXJsYXAoY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUxLCBj
b25zdCBIYXNoU2V0PGludDY0X3Q+JiBzY29wZTIpCit7CisgICAgZm9yIChIYXNoU2V0PGludDY0
X3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNjb3BlMS5iZWdpbigpOyBpdCAhPSBzY29wZTEuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgaWYgKHNjb3BlMi5jb250YWlucygqaXQpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQjo6Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKG1fcXVldWVk
VHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgc3dpdGNoICh0cmFuc2Fj
dGlvbi0+bW9kZSgpKSB7CisgICAgY2FzZSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNo
YW5nZToKKyAgICAgICAgQVNTRVJUKG1fcXVldWVkVHJhbnNhY3Rpb25zLnNpemUoKSA9PSAxKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlv
blJlYWRXcml0ZToKKyAgICAgICAgZm9yIChIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4o
KTsgaXQgIT0gbV9zdGFydGVkVHJhbnNhY3Rpb25zLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAg
ICBpZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZFdyaXRlICYm
IGRvU2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKExp
c3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5iZWdpbigpOyAqaXQgIT0gdHJhbnNhY3Rpb247ICsr
aXQpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdCAhPSBtX3F1ZXVlZFRyYW5zYWN0aW9ucy5lbmQo
KSk7CisgICAgICAgICAgICBpZiAoKCppdCktPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uUmVhZFdyaXRlICYmIGRvU2NvcGVzT3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCpp
dCktPnNjb3BlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit9OworCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yTGV2ZWxEQi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2
MWE2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmgKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREJfaAor
I2RlZmluZSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQl9oCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI7CisKKy8vIFRy
YW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQuCitj
bGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI+IGNyZWF0ZSgp
OworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCKCk7CisKKyAg
ICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlzaC4KKyAg
ICB2b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
KTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiopOworICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiopOworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNBY3RpdmUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvckxldmVsREIoKTsKKworICAgIHZvaWQgcHJvY2Vzc1N0YXJ0ZWRU
cmFuc2FjdGlvbnMoKTsKKyAgICBib29sIGNhblJ1blRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREIqKTsKKworICAgIC8vIFRoaXMgaXMganVzdCBhbiBlZmZpY2llbnQgd2F5
IHRvIGtlZXAgcmVmZXJlbmNlcyB0byBhbGwgdHJhbnNhY3Rpb25zLgorICAgIEhhc2hNYXA8SURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiosIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCPiA+IG1fdHJhbnNhY3Rpb25zOworICAgIC8vIFRyYW5zYWN0aW9ucyBpbiBkaWZmZXJl
bnQgc3RhdGVzIGFyZSBncm91cGVkIGJlbG93LgorICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREIqPiBtX3F1ZXVlZFRyYW5zYWN0aW9uczsKKyAgICBIYXNoU2V0PElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKworI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCmluZGV4IDYyNmMzMmUuLmZhODQ2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzA1OSwyMyAr
MzA1OSwyMyBAQCBlbmFibGU/KElOREVYRURfREFUQUJBU0UpIHsKICAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCQW55LmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFj
a3MuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIFwKLSAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCBcCisgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCBcCiAgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBcCiAgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmggXAotICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCBcCiAgICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIFwKICAgICAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFcnJvci5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkV2ZW50RGlzcGF0Y2hlci5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5oIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgg
XAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQi5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkhpc3RvZ3JhbXMuaCBcCiAg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmggXAogICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXkuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdl
LmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIFwKLSAgICAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKyAgICAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERC
LmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmggXAogICAgICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSW5kZXhlZERCLmgKQEAgLTMwODgsMTkgKzMwODgsMTkgQEAgZW5hYmxlPyhJTkRFWEVE
X0RBVEFCQVNFKSB7CiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZS5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIFwKICAg
ICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBcCi0gICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwIFwKICAgICAgICAgTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwIFwKICAgICAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwIFwKICAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuY3BwIFwKLSAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4LmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAgXAog
ICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAgXAogICAgICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgXAotICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCisgICAgICAgIE1vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgXAogICAgICAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL1Bh
Z2VHcm91cEluZGV4ZWREYXRhYmFzZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggZTNmNWVjYy4uZTY1NmE0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC02NzQxLDE3
ICs2NzQxLDE3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRk
YlxET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCQW55LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkN1cnNvci5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxsZXZl
bGRiXElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcbGV2
ZWxkYlxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnkuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxl
dmVsZGJcSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQklu
ZGV4LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRi
XElEQktleS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxJREJLZXlSYW5nZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1
bGVzXGluZGV4ZWRkYlxJREJPYmplY3RTdG9yZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxldmVsZGJc
SURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJSZXF1ZXN0LmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQlRyYW5zYWN0aW9uLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXFBhZ2VHcm91cElu
ZGV4ZWREYXRhYmFzZS5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjU0ZGQ1OS4uNmRhMzdiMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY0Myw3
ICsxNjQzLDEzIEBACiAJCTUxMUVGMkNGMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQkFueUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFF
RjJDQzE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJBbnlDdXN0b20uY3BwICovOyB9OwogCQk1MTFF
RjJEMDE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjJDRDE3RjBGREYxMDBF
NEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgKi87IH07CiAJCTUxMUVGMkQxMTdGMEZE
RjEwMEU0RkExNiAvKiBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVGMkNFMTdGMEZERjEwMEU0RkExNiAv
KiBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCAqLzsgfTsKLQkJNTExRUYzMjkxN0YwRkYwMzAw
RTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjMyODE3RjBGRjAzMDBFNEZBMTYgLyogSURCQmFja2lu
Z1N0b3JlLmNwcCAqLzsgfTsKKwkJNTExRUYzMzkxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkJhY2tp
bmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTExRUYzMkIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZUxldmVs
REIuY3BwICovOyB9OworCQk1MTFFRjMzQTE3RjIzQjczMDBFNEZBMTYgLyogSURCQ3Vyc29yQmFj
a2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTExRUYzMkQxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkN1cnNvckJhY2tlbmRMZXZlbERC
LmNwcCAqLzsgfTsKKwkJNTExRUYzM0IxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTExRUYzMkYxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFja2VuZExldmVs
REIuY3BwICovOyB9OworCQk1MTFFRjMzQzE3RjIzQjczMDBFNEZBMTYgLyogSURCRmFjdG9yeUJh
Y2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMUVGMzMxMTdGMjNCNjkwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExldmVs
REIuY3BwICovOyB9OworCQk1MTFFRjMzRDE3RjIzQjczMDBFNEZBMTYgLyogSURCTGV2ZWxEQkNv
ZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTFFRjMzMzE3RjIzQjY5MDBFNEZBMTYgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgKi87IH07CisJ
CTUxMUVGMzNFMTdGMjNCNzMwMEU0RkExNiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERC
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVG
MzM1MTdGMjNCNjkwMEU0RkExNiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcCAq
LzsgfTsKKwkJNTExRUYzM0YxN0YyM0I3MzAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTExRUYzMzcxN0YyM0I2OTAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIuY3BwICovOyB9OwogCQk1MTFGMjMxOTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVh
ZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFG
MjMxNTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5jcHAgKi87IH07CiAJCTUxMUYy
MzFBMERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGMjMxNjBEQzE2MERBMDA0RjAwMzIgLyog
U3RvcmFnZVRocmVhZC5oICovOyB9OwogCQk1MTI2RTZCQjBBMkUzQjEyMDA1QzI5RkEgLyogSWNv
bkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMjZFNkI5MEEyRTNCMTIwMDVDMjlGQSAvKiBJY29uRGF0YWJhc2UuY3BwICovOyB9OwpA
QCAtMTcyNyw2ICsxNzMzLDcgQEAKIAkJNTFDODFCODkwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERp
cmVjdG9yeVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmNw
cCAqLzsgfTsKIAkJNTFDODFCOEEwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDODFC
ODgwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNlci5oICovOyB9OwogCQk1MUNC
RkM5OTBEMTBFNDgzMDAyREJGNTEgLyogQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0JGQzk4MEQxMEU0ODMw
MDJEQkY1MSAvKiBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxQ0VGQjJCMTdGMjQ5MjkwMEFDQUExOCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUNFRkIyOTE3RjI0OTIxMDBBQ0FBMTggLyog
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwICovOyB9OwogCQk1MUQwQzUxNjBE
QUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBK
U1N0b3JhZ2VDdXN0b20uY3BwICovOyB9OwogCQk1MURDRTgwMjBDQUM5RjFDMDA0ODgzNTggLyog
SlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRENFODAxMENBQzlGMUMwMDQ4ODM1OCAvKiBKU1NRTFJl
c3VsdFNldFJvd0xpc3RDdXN0b20uY3BwICovOyB9OwogCQk1MURGNkQ3RTBCOTJBMTZEMDBDMkRD
ODUgLyogVGhyZWFkQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxREY2RDdEMEI5MkExNkQwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMTE4LDE2ICsz
MTI1LDExIEBACiAJCTk3MTJBNUFEMTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVk
RGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1NTQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5j
cHAgKi87IH07CiAJCTk3MTJBNUFFMTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVk
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNTU1MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCAq
LzsgfTsKIAkJOTcxMkE1QjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTgxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkFueS5oICovOyB9OwotCQk5NzEyQTVCMzE1MDA0RURBMDA0OEFGMTAgLyogSURC
QmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU1QTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggKi87IH07
CiAJCTk3MTJBNUI0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVCMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDYWxsYmFja3MuaCAqLzsgfTsKIAkJOTcxMkE1QjYxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1NUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5oICovOyB9OwotCQk5
NzEyQTVCODE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUYxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1Qjkx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2MDE1MDA0RURBMDA0OEFGMTAg
LyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLzsgfTsKIAkJOTcxMkE1QkExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTYxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCTk3MTJBNUJDMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNTYzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRo
VmFsdWUuaCAqLzsgfTsKIAkJOTcxMkE1QkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2
NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCAqLzsgfTsKLQkJOTcxMkE1QzExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjgxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICovOyB9OwotCQk5NzEyQTVDMjE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLzsgfTsKIAkJOTcxMkE1QzMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oICovOyB9OwogCQk5NzEyQTVDNDE1MDA0RURBMDA0OEFG
MTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFz
ZUNhbGxiYWNrcy5oICovOyB9OwogCQk5NzEyQTVDNTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuY3BwICovOyB9OwpAQCAtMzEzNyw4ICszMTM5LDYgQEAKIAkJOTcxMkE1Q0ExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3MTE1MDA0RURBMDA0OEFGMTAgLyog
SURCRGF0YWJhc2VFeGNlcHRpb24uaCAqLzsgfTsKIAkJOTcxMkE1Q0QxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0
Y2hlci5oICovOyB9OwogCQk5NzEyQTVDRjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzYx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCAqLzsgfTsKLQkJOTcxMkE1RDExNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3ODE1MDA0RURBMDA0OEFGMTAgLyog
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RDIxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oICovOyB9OwogCQk5NzEyQTVEMzE1MDA0RURBMDA0OEFGMTAgLyogSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0ExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmNwcCAqLzsgfTsKIAkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU3QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1RDYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkluZGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU3RDE1MDA0RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCAqLzsgfTsKQEAgLTMxNDYs
MTcgKzMxNDYsMTEgQEAKIAkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg2
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggKi87IH07CiAJCTk3MTJBNUUzMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdl
LmggKi87IH07CiAJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTEx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmggKi87IH07Ci0JCTk3MTJBNUVDMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTkzMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RUQx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi87IH07CiAJCTk3MTJBNUVGMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk2MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLzsgfTsKIAkJOTcx
MkE1RjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTk3MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmggKi87IH07CiAJ
CTk3MTJBNUYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5OTE1MDA0RURBMDA0OEFGMTAg
LyogSURCUmVxdWVzdC5oICovOyB9OwogCQk5NzEyQTVGNDE1MDA0RURBMDA0OEFGMTAgLyogSURC
VHJhY2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1OUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCAqLzsgfTsKIAkJOTcxMkE1
RjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAgLyog
SURCVHJhbnNhY3Rpb24uaCAqLzsgfTsKLQkJOTcxMkE1RjgxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OUYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuY3BwICovOyB9OwotCQk5NzEyQTVGOTE1MDA0RURBMDA0OEFGMTAgLyog
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuaCAqLzsgfTsKLQkJOTcxMkE1RkMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwICovOyB9OwotCQk5NzEyQTVGRDE1MDA0RURBMDA0OEFGMTAgLyog
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCAqLzsgfTsKIAkJOTcxMkE1RkUxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzEyQTVBNTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcCAqLzsgfTsKIAkJOTcxMkE1RkYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNp
b25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1QTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5o
ICovOyB9OwogCQk5NzEyQTYwNDE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhlZERh
dGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNUFCMTUwMDRFREEwMDQ4QUYxMCAvKiBQYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3Bw
ICovOyB9OwpAQCAtODIzNSw3ICs4MjI5LDIwIEBACiAJCTUxMUVGMkNDMTdGMEZERjEwMEU0RkEx
NiAvKiBKU0lEQkFueUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0lEQkFueUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MUVGMkNEMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCRGF0YWJhc2VDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFFRjJDRTE3RjBGREYxMDBFNEZBMTYgLyog
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTExRUYzMjgxN0YwRkYwMzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJCYWNraW5nU3RvcmUuY3Bw
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkJhY2tp
bmdTdG9yZUxldmVsREIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9y
ZUxldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMyQzE3RjIz
QjY5MDBFNEZBMTYgLyogSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJ
REJCYWNraW5nU3RvcmVMZXZlbERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTExRUYzMkQxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMyRTE3RjIzQjY5MDBFNEZBMTYgLyogSURC
Q3Vyc29yQmFja2VuZExldmVsREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yQmFja2VuZExl
dmVsREIuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2Vu
ZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkYxN0YyM0I2
OTAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTFFRjMzMDE3RjIzQjY5MDBFNEZBMTYgLyogSURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExl
dmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzExN0YyM0I2OTAw
RTRGQTE2IC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MTFFRjMzMjE3RjIzQjY5MDBFNEZBMTYgLyogSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzMxN0YyM0I2OTAwRTRGQTE2IC8q
IElEQkxldmVsREJDb2RpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCTGV2ZWxEQkNvZGlu
Zy5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2Rpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMzNDE3RjIzQjY5MDBFNEZB
MTYgLyogSURCTGV2ZWxEQkNvZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJMZXZlbERCQ29kaW5n
Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzUxN0YyM0I2OTAwRTRGQTE2IC8q
IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURC
T2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MTFFRjMzNjE3RjIzQjY5MDBFNEZBMTYgLyogSURCT2JqZWN0U3RvcmVC
YWNrZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZl
bERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzcxN0Yy
M0I2OTAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTFFRjMzODE3RjIzQjY5MDBFNEZBMTYgLyog
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTExRjIzMTUwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RvcmFnZVRocmVhZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUYyMzE2MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdl
VGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0b3JhZ2VUaHJlYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyNkU2QjkwQTJFM0IxMjAwNUMyOUZB
IC8qIEljb25EYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSWNvbkRhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgzMjMs
NiArODMzMCw4IEBACiAJCTUxQzgxQjg3MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQ
YXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZUUERpcmVj
dG9yeVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzgxQjg4MEM0
NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZUUERpcmVjdG9yeVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MUNCRkM5ODBEMTBFNDgzMDAyREJGNTEgLyogQ2FjaGVkRnJhbWVQbGF0Zm9y
bURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkRnJhbWVQbGF0
Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFDRUZCMjkxN0YyNDky
MTAwQUNBQTE4IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVs
REIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUNFRkIyQTE3RjI0OTIxMDBB
Q0FBMTggLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFEMEM1MTUwREFBOTBCNzAwM0IzODMxIC8qIEpTU3Rv
cmFnZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0
b3JhZ2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MURDRTgwMTBD
QUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxREY2RDdEMEI5MkExNkQwMEMy
REM4NSAvKiBUaHJlYWRDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
aHJlYWRDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTczMywxOSArOTc0
MiwxNCBAQAogCQk5NzEyQTU1NjE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNl
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NTgxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJBbnku
aDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NzEyQTU1OTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBJREJBbnkuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1NUExNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJCYWNraW5nU3RvcmUuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU1QjE1MDA0RURB
MDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IElEQkNhbGxiYWNrcy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTVEMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vy
c29yLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NUUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCQ3Vyc29yLmlkbDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3
MTJBNTVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJD
dXJzb3JCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJD
dXJzb3JCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NjExNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NzEyQTU2MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0
aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvcldpdGhW
YWx1ZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTY0MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3JXaXRoVmFsdWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkN1cnNvcldp
dGhWYWx1ZS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU2NjE1MDA0RURBMDA0OEFG
MTAgLyogSURCRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
RGF0YWJhc2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTY3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRGF0YWJhc2UuaWRsOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5NzEyQTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU2OTE1MDA0
RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MTJBNTZBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NkIx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzLmg7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NzEyQTU2QzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkRhdGFiYXNl
Q2FsbGJhY2tzSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc1Niw4ICs5
NzYwLDYgQEAKIAkJOTcxMkE1NzQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJFdmVudERpc3BhdGNoZXIu
aDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU3NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFj
dG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5Lmg7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MTJBNTc3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBJREJGYWN0b3J5LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU3
ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU3OTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTdBMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHA7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTdCMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkluZGV4Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc2OCw4ICs5
NzcwLDYgQEAKIAkJOTcxMkE1OEIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJLZXlSYW5nZS5pZGw7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3
MTJBNTkxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcx
MkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5pZGw7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTkz
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTk0MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTcxMkE1OTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlv
bk1vbml0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJQ
ZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTcxMkE1OTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUGVuZGluZ1RyYW5zYWN0
aW9uTW9uaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5OTE1MDA0
RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJSZXF1ZXN0Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Nzc3LDEwICs5Nzc3LDYgQEAKIAkJOTcx
MkE1OUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYWNpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSURCVHJhY2luZy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5RDE1MDA0RURB
MDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCVHJhbnNhY3Rpb24uaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTlFMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURC
VHJhbnNhY3Rpb24uaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU5RjE1MDA0RURBMDA0OEFG
MTAgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJB
NUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNUE0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTcxMkE1QTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VF
dmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1QTYxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5NzEyQTVBNzE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0ODI1LDYgKzE0ODIxLDI5IEBACiAJCQluYW1lID0gYW5p
bWF0aW9uOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTExRUYzMkExN0Yy
MzZFOTAwRTRGQTE2IC8qIGxldmVsZGIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTUxMUVGMzJCMTdGMjNCNjkwMEU0RkExNiAvKiBJREJCYWNraW5nU3Rv
cmVMZXZlbERCLmNwcCAqLywKKwkJCQk1MTFFRjMyQzE3RjIzQjY5MDBFNEZBMTYgLyogSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzJEMTdGMjNCNjkwMEU0RkExNiAvKiBJ
REJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAgKi8sCisJCQkJNTExRUYzMkUxN0YyM0I2OTAwRTRG
QTE2IC8qIElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmggKi8sCisJCQkJNTExRUYzMkYxN0YyM0I2
OTAwRTRGQTE2IC8qIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwICovLAorCQkJCTUxMUVG
MzMwMTdGMjNCNjkwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmggKi8sCisJ
CQkJNTExRUYzMzExN0YyM0I2OTAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5j
cHAgKi8sCisJCQkJNTExRUYzMzIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNrZW5k
TGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzMzMTdGMjNCNjkwMEU0RkExNiAvKiBJREJMZXZlbERC
Q29kaW5nLmNwcCAqLywKKwkJCQk1MTFFRjMzNDE3RjIzQjY5MDBFNEZBMTYgLyogSURCTGV2ZWxE
QkNvZGluZy5oICovLAorCQkJCTUxMUVGMzM1MTdGMjNCNjkwMEU0RkExNiAvKiBJREJPYmplY3RT
dG9yZUJhY2tlbmRMZXZlbERCLmNwcCAqLywKKwkJCQk1MTFFRjMzNjE3RjIzQjY5MDBFNEZBMTYg
LyogSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzM3MTdGMjNC
NjkwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCAqLywKKwkJCQk1
MTFFRjMzODE3RjIzQjY5MDBFNEZBMTYgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5o
ICovLAorCQkJCTUxQ0VGQjI5MTdGMjQ5MjEwMEFDQUExOCAvKiBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yTGV2ZWxEQi5jcHAgKi8sCisJCQkJNTFDRUZCMkExN0YyNDkyMTAwQUNBQTE4IC8qIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGxl
dmVsZGI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1MTI2RTZCNjBBMkUz
QUVGMDA1QzI5RkEgLyogaWNvbiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0xNjcxOSwyMCArMTY3MzgsMTcgQEAKIAkJOTcxMkE1NTMxNTAwNEUzQzAwNDhB
RjEwIC8qIGluZGV4ZWRkYiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJNTExRUYzMkExN0YyMzZFOTAwRTRGQTE2IC8qIGxldmVsZGIgKi8sCiAJCQkJOTcx
MkE1NTQxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgKi8s
CiAJCQkJOTcxMkE1NTUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFz
ZS5oICovLAogCQkJCTk3MTJBNTU2MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVk
RGF0YWJhc2UuaWRsICovLAogCQkJCTUxMUVGMjg4MTdGMEZBNkUwMEU0RkExNiAvKiBJREJBbnku
Y3BwICovLAogCQkJCTk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLywKIAkJ
CQk5NzEyQTU1OTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmlkbCAqLywKLQkJCQk1MTFFRjMy
ODE3RjBGRjAzMDBFNEZBMTYgLyogSURCQmFja2luZ1N0b3JlLmNwcCAqLywKLQkJCQk5NzEyQTU1
QTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJOTcxMkE1NUIx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oICovLAogCQkJCTUxMUVGMjg5MTdGMEZB
NkUwMEU0RkExNiAvKiBJREJDdXJzb3IuY3BwICovLAogCQkJCTk3MTJBNTVEMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3IuaCAqLywKIAkJCQk5NzEyQTU1RTE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yLmlkbCAqLywKLQkJCQk5NzEyQTU1RjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwICovLAotCQkJCTk3MTJBNTYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3JCYWNrZW5kSW1wbC5oICovLAogCQkJCTk3MTJBNTYxMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi8sCiAJCQkJNTExRUYyOEExN0YwRkE2RTAw
RTRGQTE2IC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgKi8sCiAJCQkJOTcxMkE1NjMxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oICovLApAQCAtMTY3NDAsOCArMTY3NTYs
NiBAQAogCQkJCTUxMUVGMjhCMTdGMEZBNkUwMEU0RkExNiAvKiBJREJEYXRhYmFzZS5jcHAgKi8s
CiAJCQkJOTcxMkE1NjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmggKi8sCiAJCQkJ
OTcxMkE1NjcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmlkbCAqLywKLQkJCQk5NzEy
QTU2ODE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgKi8sCi0J
CQkJOTcxMkE1NjkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAq
LywKIAkJCQk5NzEyQTU2QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmggKi8sCiAJCQkJOTcxMkE1NkIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNl
Q2FsbGJhY2tzLmggKi8sCiAJCQkJOTcxMkE1NkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFi
YXNlQ2FsbGJhY2tzSW1wbC5jcHAgKi8sCkBAIC0xNjc1NCw4ICsxNjc2OCw2IEBACiAJCQkJNTEx
RUYyOEQxN0YwRkE2RTAwRTRGQTE2IC8qIElEQkZhY3RvcnkuY3BwICovLAogCQkJCTk3MTJBNTc2
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmggKi8sCiAJCQkJOTcxMkE1NzcxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaWRsICovLAotCQkJCTk3MTJBNTc4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwICovLAotCQkJCTk3MTJBNTc5MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCAqLywKIAkJCQk5NzEyQTU3QTE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovLAogCQkJ
CTk3MTJBNTdCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
ICovLAogCQkJCTUxMUVGMjhFMTdGMEZBNkYwMEU0RkExNiAvKiBJREJIaXN0b2dyYW1zLmggKi8s
CkBAIC0xNjc3Myw4ICsxNjc4NSw2IEBACiAJCQkJNTExRUYyOTMxN0YwRkE2RjAwRTRGQTE2IC8q
IElEQk9iamVjdFN0b3JlLmNwcCAqLywKIAkJCQk5NzEyQTU5MTE1MDA0RURBMDA0OEFGMTAgLyog
SURCT2JqZWN0U3RvcmUuaCAqLywKIAkJCQk5NzEyQTU5MjE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmUuaWRsICovLAotCQkJCTk3MTJBNTkzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk5NzEyQTU5NDE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovLAogCQkJCTUxMUVGMjk0MTdGMEZB
NkYwMEU0RkExNiAvKiBJREJPcGVuREJSZXF1ZXN0LmNwcCAqLywKIAkJCQk1MTFFRjI5NTE3RjBG
QTZGMDBFNEZBMTYgLyogSURCT3BlbkRCUmVxdWVzdC5oICovLAogCQkJCTUxMUVGMjk2MTdGMEZB
NkYwMEU0RkExNiAvKiBJREJPcGVuREJSZXF1ZXN0LmlkbCAqLywKQEAgLTE2Nzg3LDEwICsxNjc5
Nyw2IEBACiAJCQkJNTExRUYyOTgxN0YwRkE2RjAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uLmNw
cCAqLywKIAkJCQk5NzEyQTU5RDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaCAq
LywKIAkJCQk5NzEyQTU5RTE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaWRsICov
LAotCQkJCTk3MTJBNTlGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcCAqLywKLQkJCQk5NzEyQTVBMDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oICovLAotCQkJCTk3MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLywKLQkJCQk5NzEyQTVBNDE1MDA0RURBMDA0OEFG
MTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovLAogCQkJCTk3MTJBNUE1MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICovLAogCQkJCTk3MTJBNUE2
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLywKIAkJCQk5NzEy
QTVBNzE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCAqLywKQEAg
LTIyNzU2LDE1ICsyMjc2MiwxMiBAQAogCQkJCTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJ
Y29uUmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NUJBQzJCMDEzNjBCQkFCMDA1REEyNTgg
LyogSWNvblVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1QjExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkFueS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1QjMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU4NUE2NjMxMUQ0RkFD
NTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
MTJBNUI0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3MTJBNUI2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTk3MTJBNUI5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1QkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUJDMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJB
NUJGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
OTcxMkE1QzIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3MTJBNUMzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUM0MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1
QzYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMjc3Myw3ICsyMjc3Niw2IEBACiAJCQkJOTcxMkE1Q0ExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVD
RDE1MDA0RURBMDA0OEFGMTAgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzEyQTVDRjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJOTcxMkE1RDIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVENjE1MDA0
RURBMDA0OEFGMTAgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNURDMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMjI3ODEsMTMgKzIy
NzgzLDEwIEBACiAJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9i
amVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVFRDE1MDA0RURBMDA0OEFGMTAg
LyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1
RjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3MTJBNUYyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVGNDE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhY2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRy
YW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVGOTE1MDA0RURBMDA0OEFGMTAg
LyogSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1
RkQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdl
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzFENTdDMEYzMzgxOTAwMEY5Q0U0RSAvKiBJ
ZGVudGlmaWVyUmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTEzQTI0MjEzRDQ5RUJBMDBGNUIw
NUMgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTI1Mzg4LDYgKzI1
Mzg3LDcgQEAKIAkJCQk4MkUzRDhERTEyMkVBMEQxMDAzQUU1QkMgLyogQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUExMkRGMERDMDQxNDgwMEM5QUZBRCAv
KiBDU1NSZWZsZWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZEMDYwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1J1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTExRUYzMzkxN0Yy
M0I3MzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTgwRTZEMDkwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTM3MUY1MUEyMEQyNjJGQTAwMEVDRTBENSAvKiBDU1NTZWdtZW50ZWRGb250
RmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNzM0RjBBMTk5Qzc3MDA3RkI4QzUgLyog
Q1NTU2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTQ0Nyw3ICsyNTQ0Nyw2IEBACiAJ
CQkJRkQzMTYwMkQxMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRDMxNjAzMDEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlQcm9jZXNzb3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUNFODNBQzQwQURBRkZEODAwOTM1NEY2IC8qIERlbGV0ZUJ1dHRv
bi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTFFRjMyOTE3RjBGRjAzMDBFNEZBMTYgLyogSURC
QmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDRTgzQUMzMEFEQUZGRDcwMDkz
NTRGNiAvKiBEZWxldGVCdXR0b25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RERFMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkzMzA5REUwMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU4OTQsNiArMjU4OTMsNyBAQAog
CQkJCTkzRjE5QUZEMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBOERGM0ZEMTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM4NjQxMjI4ODNFOTAwQjgxRkY4IC8qIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUVGMzNDMTdGMjNC
NzMwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUQ0RjUxREYxMzI3MjU0ODAwMTZGNTQxIC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291
cmNlcyAqLywKIAkJCQlGNUMwNDFEQTBGRkNBN0NFMDA4MzlENEEgLyogSFRNTERhdGFMaXN0RWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEMzU5RDc4OTEyOUNBMjcxMDAwNkU1RDIgLyog
SFRNTERldGFpbHNFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjYwMDksMTYgKzI2MDA5
LDEwIEBACiAJCQkJNTFFMUVDQzAwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDUwOTlDNDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzU4NUE2NjIxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTcxMkE1QjgxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJB
NUMxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3MTJBNUM1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1QzkxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUQx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUVDMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJB
NUVGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTk3MTJBNUY4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUZDMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3MTJBNUZFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3MUQ1N0IwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZp
ZXJSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTkxM0EyNDExM0Q0OUVCQTAwRjVCMDVDIC8q
IElkZW50aWZpZXJzRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MzU2LDYgKzI2MzUw
LDcgQEAKIAkJCQk0QUQwMTczQzEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBNjBBMUNFOTA1MDBCNDJCMjUgLyogSlNI
VE1MUGFyYWdyYXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBODBBMUNF
OTA1MDBCNDJCMjUgLyogSlNIVE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxMUVGMzNBMTdGMjNCNzMwMEU0RkExNiAvKiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBQTBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MUHJl
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNDIyNkU1QTExNjNENjY3MDA4QjgzOTcg
LyogSlNIVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBRUM3
MEExRDI5N0IwMEI0MkIyNSAvKiBKU0hUTUxRdW90ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yNzE2Niw2ICsyNzE2MSw3IEBACiAJCQkJMjkzRUFFMjExMzU2QjMyRTAwNjdBQ0Y5IC8q
IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4QzZFQTYx
OTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTExRUYzM0QxN0YyM0I3MzAwRTRGQTE2IC8q
IElEQkxldmVsREJDb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNURGRThGNTYwRDE2NDc3
QjAwNzZFOTM3IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTYy
QzdGNDExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOUJEMEJGOTQxMkE0MkJGNTAwNzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNzI5Miw2ICsyNzI4OCw3IEBACiAJCQkJQTFFMTE1NDgxMzAxNUM1
RDAwNTRBQzhDIC8qIFNwb3RMaWdodFNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JD
NkEzRTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBMkU2RTdBMENDNTU2RDUwMDRBMjA2MiAvKiBTUUxpdGVBdXRob3JpemVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxMUVGMzNFMTdGMjNCNzMwMEU0RkExNiAvKiBJREJPYmplY3RTdG9y
ZUJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMjI0NjQ5MENDOThEREIw
MEMwNTI0MCAvKiBTUUxpdGVEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNUE2ODQy
NDBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQTIyNDY0QjBDQzk4RERCMDBDMDUyNDAgLyogU1FMaXRlU3RhdGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMjczOTYsNiArMjczOTMsNyBAQAogCQkJCTA4QjVGMjU1MTNCNUZGRjIw
MDI5NTlFQyAvKiBTVkdBbmltYXRlZFBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDNCOTMz
NkExM0IyNjFCMTAwNDU4NEJGIC8qIFNWR0FuaW1hdGVkUG9pbnRMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQzMUEzMDIxMTNCODlEQ0MwMDc3OTFFNCAvKiBTVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTExRUYzM0YxN0YyM0I3MzAwRTRG
QTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODM2RkJDRUMxNzhDMTE3RjAwQjIxQTE1IC8qIFNWR0FuaW1hdGVkUHJvcGVydHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDMxNDJFN0ExM0IxRTk3NzAwRjFDODcxIC8qIFNWR0FuaW1hdGVk
UmVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0M0E2MjY2NzEzQjNEMTEwMDBBQzk0QjggLyog
U1ZHQW5pbWF0ZWRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzUxOCw2ICsyNzUxNiw3
IEBACiAJCQkJQjIyMjdBOEIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvaW50TGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyN0E4RTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBOTAwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R1BvbHlnb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxQ0VGQjJCMTdGMjQ5Mjkw
MEFDQUExOCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjIyN0E5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUG9seWxpbmVFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NDNCODU3MTdFQjc1OEYwMDNCRTkzQSAvKiBTVkdQ
cm9wZXJ0eUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBOTYwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzU3
OSw2ICsyNzU3OCw3IEBACiAJCQkJOTM0M0NCODExMkYyNUU1MTAwMzNDNUVFIC8qIFRleHRDb2Rl
Y1VURjguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyQjk3QzkxMzEzODk0MzAwOEJFRjRCIC8q
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDODRC
MzEyMzcxMTgwMDAwQzYxNjEgLyogVGV4dERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxMUVGMzNCMTdGMjNCNzMwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM4NDgzMTIzNkZEOTMwMDBDNjE2MSAvKiBUZXh0RG9j
dW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNDYwRDAwNkMxRDAwRUY2
RjI2IC8qIFRleHRFbmNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMTA1REE2MjBGM0FB
NjhGMDAxREQ0NEYgLyogVGV4dEVuY29kaW5nRGV0ZWN0b3JJQ1UuY3BwIGluIFNvdXJjZXMgKi8s
Cg==
</data>
<flag name="commit-queue"
          id="234843"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212605</attachid>
            <date>2013-09-25 11:02:35 -0700</date>
            <delta_ts>2013-09-25 11:02:35 -0700</delta_ts>
            <desc>Landed patch (for ews)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>356711</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNzljNzllNi4uNjY3OTRkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTUsNiArNSw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nYW1lcGFkIgogICAgICIke1dFQkNPUkVfRElSfS9N
b2R1bGVzL2dlb2xvY2F0aW9uIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRk
YiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYiIKICAgICAi
JHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRpZXVpIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1
bGVzL21lZGlhc291cmNlIgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhc3RyZWFt
IgpAQCAtODAzLDMzICs4MDQsMzMgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJBbnkuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAotICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5j
cHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAKICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuY3BwCiAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGgu
Y3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJS
ZXF1ZXN0LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWRE
YXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4
ZWREYXRhYmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUxldmVsREIuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JC
YWNrZW5kTGV2ZWxEQi5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJG
YWN0b3J5QmFja2VuZExldmVsREIuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJMZXZlbERCQ29kaW5nLmNwcAorICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAKKyAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwCisgICAgTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAKIAogICAgIE1vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCiAgICAgTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVlMTMyYjkuLmUyM2NkNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMy0wOS0yNSAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9yZSByZWZhY3RvcmluZyB0byBtYWtlIHRoZSBM
ZXZlbERCIGRlcGVuZGVuY2llcyBvZiBJREIgbW9yZSBvYnZpb3VzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxODgwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgdGhy
ZWUgdGhpbmdzOgorICAgICAgICAxIC0gTW92ZXMgc29tZSBmaWxlcyB0byB0aGUgaW5kZXhlZGRi
L2xldmVsZGIgc3ViZGlyZWN0b3J5LCByZW5hbWluZyB0aGVtIGluIHRoZSBwcm9jZXNzLgorICAg
ICAgICAyIC0gUmVuYW1lcyBzb21lIGNsYXNzZXMuCisgICAgICAgIDMgLSBBZGRzICJVU0UoTEVW
RUxEQikiIGd1YXJkcyBpbiBhZGRpdGlvbiB0byB0aGUgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
IGd1YXJkIGZvciB0aG9zZSBmaWxlcy4KKworICAgICAgICBQcm9qZWN0IGZpbGUgdXBkYXRlczoK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFt
OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6
CisKKyAgICAgICAgRmlsZSByZW5hbWVzLCBjbGFzcyByZW5hbWVzLCBhbmQgVVNFKExFVkVMREIp
IGd1YXJkczoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOjpjcmVhdGUpOiBBZGQgYSBudWxsIHJldHVybiBpZiBVU0UoTEVWRUxEQikgaXMgZGlzYWJs
ZWQgYXMgYSBzdG9wIGdhcCBtZWFzdXJlIHVudGlsCisgICAgICAgICAgdGhlcmUgaXMgYSBub24t
TGV2ZWxEQiBpbXBsLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNw
cC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRM
ZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5oLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJD
b2RpbmcuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxE
QkNvZGluZy5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuaC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAuCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmguCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3JMZXZlbERCLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmguCisKKwogMjAxMy0wOS0yNSAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAo
cjE1NjM1NSkgTGlua3MgLyBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgbmVzdGVkIHRhYmxl
cyBhcmUgdW5jbGlja2FibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNzI5YzdlOS4uOWMyMGRk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE0LDYgKzE0LDcgQEAgd2ViY29yZV9jcHBmbGFn
cyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkIFwKIAkt
SSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYiBcCisJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYiBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRpZXVpIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDIxYjY0
OGQuLmE3YmM4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTg4MywxNyAr
MTg4MywxNyBAQCB3ZWJjb3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQW55LmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmggXAotCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vy
c29yQmFja2VuZExldmVsREIuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yV2l0aFZhbHVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yV2l0aFZhbHVlLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VDYWxsYmFja3MuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBcCkBAIC0xOTA1LDggKzE5MDUsOCBAQCB3ZWJj
b3JlX21vZHVsZXNfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RXZlbnREaXNwYXRjaGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRXZlbnREaXNwYXRjaGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeS5jcHAgXApAQCAtMTkyMyw4ICsxOTIzLDggQEAgd2ViY29yZV9tb2R1
bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZExldmVsREIuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPcGVuREJSZXF1ZXN0LmNwcCBcCkBAIC0xOTM0LDEwICsxOTM0LDEwIEBAIHdlYmNvcmVf
bW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFjaW5nLmgg
XAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmggXAotCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAg
XAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
TGV2ZWxEQi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZWU4
ZDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotICAgIExPR19FUlJPUigiVGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0b3JlOjpvcGVuIGlzIGN1cnJlbnRseSBl
bXB0eSIpOwotICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLX0KLQot
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6b3BlbkluTWVtb3J5
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBMT0dfRVJST1IoIlRoZSBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJhY2tpbmdTdG9yZTo6b3BlbkluTWVtb3J5IGlz
IGN1cnJlbnRseSBlbXB0eSIpOwotICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4oKTsKLX0KLQotYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90
LCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcCopCi17Ci0gICAgTE9HX0VSUk9S
KCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVj
dFN0b3JlcyBpcyBjdXJyZW50bHkgZW1wdHkiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZykKLXsKLSAg
ICBMT0dfRVJST1IoIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjphZHZhbmNlIGlzIGN1cnJlbnRseSBlbXB0eSIpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihj
b25zdCBJREJLZXkqLCBJdGVyYXRvclN0YXRlKQotewotICAgIExPR19FUlJPUigiVGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmNvbnRpbnVlRnVu
Y3Rpb24gaXMgY3VycmVudGx5IGVtcHR5Iik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1JREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmUqIGJh
Y2tpbmdTdG9yZSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLXsKLX0KLQot
dm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCi17Ci0gICAgTE9HX0VS
Uk9SKCJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpiZWdpbiBpcyBjdXJyZW50bHkgZW1wdHkiKTsKLX0KLQotYm9vbCBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQotewotICAgIExPR19FUlJPUigiVGhlIGRlZmF1
bHQgaW1wbGVtZW50YXRpb24gb2YgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0
IGlzIGN1cnJlbnRseSBlbXB0eSIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKLXsKLSAgICBMT0dfRVJST1Io
IlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OnJvbGxiYWNrIGlzIGN1cnJlbnRseSBlbXB0eSIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NzBmZGEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCQmFja2luZ1N0b3JlX2gKLSNkZWZpbmUg
SURCQmFja2luZ1N0b3JlX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5j
bHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJJbmRl
eGVkREIuaCIKLSNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMZXZlbERC
VHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIExldmVsREJDb21wYXJhdG9yOwotY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwot
Y2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCS2V5UmFu
Z2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotY2xhc3Mg
TGV2ZWxEQkZhY3RvcnkgewotcHVibGljOgotICAgIHZpcnR1YWwgfkxldmVsREJGYWN0b3J5KCkg
eyB9Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gb3BlbkxldmVsREIo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGRlc3Ryb3lMZXZlbERCKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpID0g
MDsKLX07Ci0KLWNsYXNzIElEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkJh
Y2tpbmdTdG9yZT4gewotcHVibGljOgotICAgIGNsYXNzIFRyYW5zYWN0aW9uOwotCi0gICAgdmly
dHVhbCB+SURCQmFja2luZ1N0b3JlKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29u
c3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwg
Y29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5Jbk1lbW9yeShTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBvcGVuSW5NZW1vcnkoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7Ci0gICAgV2Vha1B0cjxJREJCYWNraW5nU3Rv
cmU+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIo
KTsgfQotCi0gICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRhYmFzZU5hbWVzKCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJEYXRhYmFzZU1ldGFkYXRhKiwgYm9vbCYgc3VjY2VzcykgV0FSTl9VTlVTRURfUkVUVVJO
OwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0
X3QmIHJvd0lkKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9u
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGlu
dFZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUpOwotCi0gICAgYm9vbCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcCopIFdBUk5fVU5VU0VEX1JFVFVSTjsK
LSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwot
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKLQotICAgIGNsYXNzIFJlY29yZElkZW50aWZpZXIgewotICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRJZGVudGlmaWVyKTsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2
NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1hcnlLZXkpLCBtX3ZlcnNpb24odmVyc2lv
bikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgpKTsgfQotICAgICAgICBSZWNvcmRJZGVu
dGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJzaW9uKC0xKSB7IH0KLQotICAgICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtl
eTsgfQotICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247
IH0KLSAgICAgICAgdm9pZCByZXNldChjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGlu
dDY0X3QgdmVyc2lvbikgeyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OyBtX3ZlcnNpb24gPSB2
ZXJzaW9uOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5
S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29k
ZWQqIHZlcnNpb24gb2YgdGhlIGtleS4KLSAgICAgICAgaW50NjRfdCBtX3ZlcnNpb247Ci0gICAg
fTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBWZWN0b3I8Y2hhcj4mIHJlY29yZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZp
cnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKSBXQVJOX1VOVVNFRF9SRVRV
Uk47Ci0gICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJyZW50TnVtYmVyKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0g
ICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSBXQVJOX1VO
VVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29y
ZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wg
aXNNdWx0aUVudHJ5KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIGRlbGV0
ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSBXQVJOX1VOVVNFRF9SRVRV
Uk47Ci0gICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVjb3JkSWRlbnRpZmll
ciYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWFyeUtleVZp
YUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBS
ZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5
LCBib29sJiBleGlzdHMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIGNsYXNzIEN1cnNvciA6
IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgZW51bSBJ
dGVyYXRvclN0YXRlIHsKLSAgICAgICAgICAgIFJlYWR5ID0gMCwKLSAgICAgICAgICAgIFNlZWsK
LSAgICAgICAgfTsKLQotICAgICAgICBzdHJ1Y3QgQ3Vyc29yT3B0aW9ucyB7Ci0gICAgICAgICAg
ICBpbnQ2NF90IGRhdGFiYXNlSWQ7Ci0gICAgICAgICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQ7
Ci0gICAgICAgICAgICBpbnQ2NF90IGluZGV4SWQ7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
bG93S2V5OwotICAgICAgICAgICAgYm9vbCBsb3dPcGVuOwotICAgICAgICAgICAgVmVjdG9yPGNo
YXI+IGhpZ2hLZXk7Ci0gICAgICAgICAgICBib29sIGhpZ2hPcGVuOwotICAgICAgICAgICAgYm9v
bCBmb3J3YXJkOwotICAgICAgICAgICAgYm9vbCB1bmlxdWU7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleTsg
fQotICAgICAgICBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiA9IDAsIEl0ZXJh
dG9yU3RhdGUgPSBTZWVrKTsKLSAgICAgICAgYm9vbCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcpOwot
ICAgICAgICBib29sIGZpcnN0U2VlaygpOwotCi0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IGNsb25lKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9Ci0gICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3QgPSAwOwotICAgICAgICB2
aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KLSAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkg
eyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpID0gMDsKLQotICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgQ3Vyc29yKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJz
b3JPcHRpb25zKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwbGljaXQgQ3Vyc29y
KGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKiBvdGhlcik7Ci0KLSAgICAgICAgdmlydHVh
bCBWZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElEQktleSYpID0gMDsKLQotICAgICAgICBi
b29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OwotICAgICAgICBib29sIGhhdmVFbnRlcmVkUmFuZ2Uo
KSBjb25zdDsKLQotICAgICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247Ci0g
ICAgICAgIGNvbnN0IEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOwotI2lmIFVTRShMRVZF
TERCKQotICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOwotI2VuZGlm
Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKLSAgICAgICAgSURCQmFja2lu
Z1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIG1fcmVjb3JkSWRlbnRpZmllcjsKLSAgICB9OwotCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vy
c29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5
Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5n
ZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pOwotCi0gICAg
Y2xhc3MgVHJhbnNhY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgVHJhbnNh
Y3Rpb24oSURCQmFja2luZ1N0b3JlKik7Ci0gICAgICAgIHZvaWQgYmVnaW4oKTsKLSAgICAgICAg
Ym9vbCBjb21taXQoKTsKLSAgICAgICAgdm9pZCByb2xsYmFjaygpOwotICAgICAgICB2b2lkIHJl
c2V0KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSAwOwotI2lmIFVT
RShMRVZFTERCKQotICAgICAgICAgICAgbV90cmFuc2FjdGlvbiA9IDA7Ci0jZW5kaWYKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2Fj
dGlvbkZyb20oVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgICAgICB7Ci0jaWYgVVNFKExF
VkVMREIpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHJhbnNhY3Rpb24qPih0cmFu
c2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7Ci0jZWxzZQotICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24pOwotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSURCQmFj
a2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKLSNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgUmVm
UHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKLSNlbmRpZgotICAgIH07Ci0K
LXByb3RlY3RlZDoKLSAgICBJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0
b3I+KTsKLQotICAgIC8vIFNob3VsZCBvbmx5IHVzZWQgZm9yIG1vY2tpbmcuCi0gICAgSURCQmFj
a2luZ1N0b3JlKCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVs
REJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+KTsKLQotICAgIGJvb2wg
ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSwgYm9vbCYgZm91bmQp
OwotICAgIGJvb2wgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXAqKSBXQVJOX1VOVVNFRF9S
RVRVUk47Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwotCi0gICAgT3duUHRyPExldmVsREJE
YXRhYmFzZT4gbV9kYjsKLSAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRv
cjsKLSAgICBXZWFrUHRyRmFjdG9yeTxJREJCYWNraW5nU3RvcmU+IG1fd2Vha0ZhY3Rvcnk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYTNjZjYuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURC
Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1w
bDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kSW1wbD4gY3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24oY3Vyc29yLCBrZXksIGNhbGxiYWNrcykpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci1wcml2YXRlOgotICAgIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9jdXJzb3IoY3Vyc29y
KQotICAgICAgICAsIG1fa2V5KGtleSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3Mp
Ci0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gbV9jdXJz
b3I7Ci0gICAgUmVmUHRyPElEQktleT4gbV9rZXk7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2
YW5jZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Vyc29yQWR2YW5j
ZU9wZXJhdGlvbihjdXJzb3IsIGNvdW50LCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAg
ICBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKLSAgICAgICAgOiBtX2N1cnNvcihjdXJzb3IpCi0gICAgICAgICwgbV9jb3VudChj
b3VudCkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQot
ICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gbV9jdXJzb3I7Ci0gICAgdW5zaWduZWQg
bG9uZyBtX2NvdW50OwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsK
LQotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29y
LCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRp
b25PcGVyYXRpb24oY3Vyc29yLCBudW1iZXJUb0ZldGNoLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJp
dmF0ZToKLSAgICBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKLSAg
ICAgICAgLCBtX251bWJlclRvRmV0Y2gobnVtYmVyVG9GZXRjaCkKLSAgICAgICAgLCBtX2NhbGxi
YWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW1wbD4gbV9jdXJzb3I7Ci0gICAgaW50IG1fbnVtYmVyVG9GZXRjaDsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLUlEQkN1cnNvckJhY2tlbmRJbXBsOjpJ
REJDdXJzb3JCYWNrZW5kSW1wbChQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBj
dXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotICAgIDogbV90YXNrVHlwZSh0
YXNrVHlwZSkKLSAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICwgbV9kYXRhYmFz
ZSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSkKLSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24pCi0gICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAsIG1fY3Vyc29y
KGN1cnNvcikKLSAgICAsIG1fY2xvc2VkKGZhbHNlKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnJl
Z2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKLX0KLQotSURCQ3Vyc29yQmFja2VuZEltcGw6On5JREJD
dXJzb3JCYWNrZW5kSW1wbCgpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rlck9wZW5D
dXJzb3IodGhpcyk7Ci19Ci0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVG
dW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNv
ckJhY2tlbmRJbXBsOjpjb250aW51ZSIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2sobV90
YXNrVHlwZSwgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5LCBjYWxs
YmFja3MpKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6YWR2YW5jZSh1bnNpZ25l
ZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNl
cHRpb25Db2RlJikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZh
bmNlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDdXJzb3JBZHZhbmNlT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgY291bnQsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJh
Y2tlbmRJbXBsOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqKQotewotICAgIElEQl9UUkFDRSgiQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbiIp
OwotICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmFk
dmFuY2UobV9jb3VudCkpIHsKLSAgICAgICAgbV9jdXJzb3ItPm1fY3Vyc29yID0gMDsKLSAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKG1f
Y3Vyc29yLT5rZXkoKSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgbV9jdXJzb3ItPnZhbHVlKCkp
OwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopCi17Ci0gICAgSURCX1RSQUNF
KCJDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNv
ciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKG1fa2V5LmdldCgpKSkg
ewotICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBt
X2N1cnNvci0+cHJpbWFyeUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7Ci19Ci0KLXZvaWQgSURC
Q3Vyc29yQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vy
c29yQmFja2VuZEltcGw6OmRlbGV0ZSIpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2Rl
KCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLSAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6OmNyZWF0ZShtX2N1cnNvci0+cHJpbWFyeUtl
eSgpKTsKLSAgICBtX2RhdGFiYXNlLT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBt
X29iamVjdFN0b3JlSWQsIGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKLX0KLQot
dm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9G
ZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29k
ZSYpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250
aW51ZSIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNr
czsKLSAgICBtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2sobV90YXNrVHlwZSwgQ3Vyc29yUHJl
ZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBudW1iZXJUb0ZldGNoLCBjYWxs
YmFja3MpKTsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJ
dGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopCi17
Ci0gICAgSURCX1RSQUNFKCJDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotCi0g
ICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRLZXlzOwotICAgIFZlY3RvcjxSZWZQdHI8
SURCS2V5PiA+IGZvdW5kUHJpbWFyeUtleXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZm
ZXI+ID4gZm91bmRWYWx1ZXM7Ci0KLSAgICBpZiAobV9jdXJzb3ItPm1fY3Vyc29yKQotICAgICAg
ICBtX2N1cnNvci0+bV9zYXZlZEN1cnNvciA9IG1fY3Vyc29yLT5tX2N1cnNvci0+Y2xvbmUoKTsK
LQotICAgIGNvbnN0IHNpemVfdCBtYXhTaXplRXN0aW1hdGUgPSAxMCAqIDEwMjQgKiAxMDI0Owot
ICAgIHNpemVfdCBzaXplRXN0aW1hdGUgPSAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt
X251bWJlclRvRmV0Y2g7ICsraSkgewotICAgICAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNvciB8
fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKSB7Ci0gICAgICAgICAg
ICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3VuZEtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCkpOwot
ICAgICAgICBmb3VuZFByaW1hcnlLZXlzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1h
cnlLZXkoKSk7Ci0KLSAgICAgICAgc3dpdGNoIChtX2N1cnNvci0+bV9jdXJzb3JUeXBlKSB7Ci0g
ICAgICAgIGNhc2UgSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5OgotICAgICAgICAgICAgZm91bmRW
YWx1ZXMuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZToKLSAgICAgICAgICAg
IHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCktPnNpemUoKTsKLSAg
ICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9j
dXJzb3ItPm1fY3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7Ci0gICAgICAgIHNpemVFc3Rp
bWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7
Ci0KLSAgICAgICAgaWYgKHNpemVFc3RpbWF0ZSA+IG1heFNpemVFc3RpbWF0ZSkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghZm91bmRLZXlzLnNpemUoKSkgewotICAgICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRo
UHJlZmV0Y2goZm91bmRLZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVlcyk7Ci19Ci0K
LXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRj
aGVzLCBpbnQpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0
Y2hSZXNldCIpOwotICAgIG1fY3Vyc29yID0gbV9zYXZlZEN1cnNvcjsKLSAgICBtX3NhdmVkQ3Vy
c29yID0gMDsKLQotICAgIGlmIChtX2Nsb3NlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICht
X2N1cnNvcikgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRQcmVmZXRjaGVzOyAr
K2kpIHsKLSAgICAgICAgICAgIGJvb2wgb2sgPSBtX2N1cnNvci0+Y29udGludWVGdW5jdGlvbigp
OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjbG9zZSgpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y2xvc2UiKTsKLSAgICBtX2Nsb3NlZCA9IHRydWU7Ci0g
ICAgbV9jdXJzb3IuY2xlYXIoKTsKLSAgICBtX3NhdmVkQ3Vyc29yLmNsZWFyKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZTI2YmIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5k
ZWYgSURCQ3Vyc29yQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJDdXJzb3JCYWNrZW5kSW1wbF9o
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdT
dG9yZS5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElE
QkRhdGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJLZXlSYW5nZTsKLQotY2xhc3MgSURCQ3Vy
c29yQmFja2VuZEltcGwgOiBwdWJsaWMgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNyZWF0ZShQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJDdXJzb3JCYWNrZW5kSW1wbChjdXJzb3IsIGN1cnNvclR5cGUsIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQp
KTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjdXJzb3IsIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJDdXJzb3JCYWNrZW5kSW1wbChjdXJzb3IsIGN1cnNvclR5cGUsIHRhc2tUeXBlLCB0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5JREJDdXJzb3JC
YWNrZW5kSW1wbCgpOwotCi0gICAgLy8gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZQotICAgIHZp
cnR1YWwgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVl
KGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMs
IGludCB1bnVzZWRQcmVmZXRjaGVzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5k
bGVyQ2FsbGJhY2soKSB7IH0KLQotICAgIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdCB7
IHJldHVybiBtX2N1cnNvci0+a2V5KCk7IH0KLSAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCk7IH0KLSAgICBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCB7IHJldHVybiAobV9jdXJzb3JUeXBl
ID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgPyAwIDogbV9jdXJzb3ItPnZhbHVlKCk7IH0K
LSAgICB2b2lkIGNsb3NlKCk7Ci0KLXByaXZhdGU6Ci0gICAgSURCQ3Vyc29yQmFja2VuZEltcGwo
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCosIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBjbGFzcyBDdXJzb3JJ
dGVyYXRpb25PcGVyYXRpb247Ci0gICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjsKLSAg
ICBjbGFzcyBDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjsKLQotICAgIElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKLSAgICBJbmRleGVkREI6
OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAgIGNvbnN0IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBtX2N1cnNvcjsgLy8g
TXVzdCBiZSBkZXN0cm95ZWQgYmVmb3JlIG1fdHJhbnNhY3Rpb24uCi0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yPiBtX3NhdmVkQ3Vyc29yOyAvLyBNdXN0IGJlIGRlc3Ryb3llZCBi
ZWZvcmUgbV90cmFuc2FjdGlvbi4KLQotICAgIGJvb2wgbV9jbG9zZWQ7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
I2VuZGlmIC8vIElEQkN1cnNvckJhY2tlbmRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NzQzN2EuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJJ
REJDdXJzb3JCYWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
Ci0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAi
SURCVHJhY2luZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNp
bmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBvYmpl
Y3RTdG9yZU1ldGFkYXRhKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ3JlYXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICAgICAgOiBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFk
YXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFJlZlB0
cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOwotfTsKLQotY2xhc3MgRGVsZXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1l
dGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RT
dG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKLSAgICB9
Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwot
cHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBv
YmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9y
ZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEob2JqZWN0U3RvcmVNZXRhZGF0YSkK
LSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNr
aW5nU3RvcmU7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3Jl
TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hh
bmdlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
biB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGRhdGFiYXNlLCB0cmFuc2FjdGlvbklkLCB2ZXJz
aW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAg
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IGRhdGFiYXNlLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkK
LSAgICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAgICAgICAgLCBtX3Zl
cnNpb24odmVyc2lvbikKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAg
ICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgaW50
NjRfdCBtX3RyYW5zYWN0aW9uSWQ7Ci0gICAgaW50NjRfdCBtX3ZlcnNpb247Ci0gICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotfTsKLQotY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwg
b2JqZWN0U3RvcmVJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIENyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQotICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOwotICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotfTsKLQotY2xhc3MgRGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVPYmplY3RTdG9y
ZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpOwotICAgIH0KLSAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgot
ICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2Jq
ZWN0U3RvcmVNZXRhZGF0YSkKLSAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICAg
ICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKLSAg
ICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVmVyc2lvbkNoYW5nZUFib3J0T3Bl
cmF0aW9uKGRhdGFiYXNlLCBwcmV2aW91c1ZlcnNpb24sIHByZXZpb3VzSW50VmVyc2lvbikpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7Ci1wcml2YXRlOgotICAgIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3Vz
VmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCi0gICAgICAgIDogbV9kYXRhYmFz
ZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX3ByZXZpb3VzVmVyc2lvbihwcmV2aW91c1ZlcnNpb24p
Ci0gICAgICAgICwgbV9wcmV2aW91c0ludFZlcnNpb24ocHJldmlvdXNJbnRWZXJzaW9uKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFz
ZTsKLSAgICBTdHJpbmcgbV9wcmV2aW91c1ZlcnNpb247Ci0gICAgaW50NjRfdCBtX3ByZXZpb3Vz
SW50VmVyc2lvbjsKLX07Ci0KLWNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleE9wZXJhdGlvbihiYWNraW5nU3Rv
cmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBD
cmVhdGVJbmRleE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAg
ICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRh
ZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0
U3RvcmVJZDsKLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKLX07
Ci0KLWNsYXNzIERlbGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBEZWxldGVJbmRleE9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3Jl
SWQsIGluZGV4TWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleE9wZXJh
dGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAg
ICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fb2JqZWN0U3Rv
cmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFk
YXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBt
X2JhY2tpbmdTdG9yZTsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBj
b25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIENyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbihkYXRhYmFzZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpOwotICAgIH0KLSAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRl
OgotICAgIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpCi0gICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0
b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKLSAgICB7
Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0
YWJhc2U7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50
NjRfdCBtX2luZGV4SWQ7Ci19OwotCi1jbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRh
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleEFib3J0T3Bl
cmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKLXBy
aXZhdGU6Ci0gICAgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgICAgIDogbV9kYXRhYmFzZShkYXRh
YmFzZSkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAg
LCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29u
c3QgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Ci0gICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2lu
ZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBHZXRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJEYXRhYmFzZU1ldGFk
YXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vy
c29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgbWV0YWRh
dGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFj
a3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCopOwotcHJpdmF0ZToKLSAgICBHZXRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRh
dGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9iYWNraW5nU3Rv
cmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChtZXRhZGF0YS5pZCkKLSAg
ICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4
SWQoaW5kZXhJZCkKLSAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChvYmplY3RTdG9yZUlkKS5rZXlQYXRoKQotICAgICAgICAsIG1fYXV0b0luY3JlbWVudChtZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9JbmNyZW1lbnQpCi0gICAg
ICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29y
VHlwZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgICAgICBB
U1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAg
ICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkuaWQg
PT0gb2JqZWN0U3RvcmVJZCk7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0g
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2lu
ZGV4SWQ7Ci0gICAgY29uc3QgSURCS2V5UGF0aCBtX2tleVBhdGg7Ci0gICAgY29uc3QgYm9vbCBt
X2F1dG9JbmNyZW1lbnQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdl
OwotICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7Ci0gICAgY29u
c3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBQdXRPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzLCBjb25zdCBWZWN0b3I8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eXM+JiBpbmRleEtleXMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFB1dE9w
ZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotcHJpdmF0
ZToKLSAgICBQdXRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4S2V5cz4mIGluZGV4S2V5cykKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3Rv
cmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmpl
Y3RTdG9yZShvYmplY3RTdG9yZSkKLSAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQotICAgICAgICAs
IG1fa2V5KGtleSkKLSAgICAgICAgLCBtX3B1dE1vZGUocHV0TW9kZSkKLSAgICAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCi0gICAgICAgICwgbV9pbmRleElkcyhpbmRleElkcykKLSAgICAg
ICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNvbnN0IGludDY0X3Qg
bV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RT
dG9yZTsKLSAgICBjb25zdCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3ZhbHVlOwotICAgIGNvbnN0
IFJlZlB0cjxJREJLZXk+IG1fa2V5OwotICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZTo6UHV0TW9kZSBtX3B1dE1vZGU7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7Ci0gICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1faW5kZXhJZHM7Ci0gICAg
Y29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBtX2lu
ZGV4S2V5czsKLX07Ci0KLWNsYXNzIFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KHNpemVfdCBpbmRleENvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBT
ZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oaW5kZXhDb3VudCkpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAg
IFNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKLSAgICAgICAgOiBt
X2luZGV4Q291bnQoaW5kZXhDb3VudCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90
IG1faW5kZXhDb3VudDsKLX07Ci0KLWNsYXNzIE9wZW5DdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0
aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkN1cnNvck9w
ZXJhdGlvbihiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwotcHJpdmF0ZToKLSAgICBPcGVuQ3Vyc29yT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBl
IHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0
YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAg
ICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKLSAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQot
ICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvclR5cGUo
Y3Vyc29yVHlwZSkKLSAgICAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFi
YXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50
NjRfdCBtX2luZGV4SWQ7Ci0gICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKLSAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsK
LSAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwotICAgIGNvbnN0
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKLSAgICBj
b25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIENvdW50
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENvdW50T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
aW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7Ci1wcml2YXRlOgotICAgIENvdW50
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKLSAgICAg
ICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQo
b2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKLSAgICAgICAgLCBt
X2tleVJhbmdlKGtleVJhbmdlKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAg
ICB7Ci0gICAgfQotCi0gICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5n
U3RvcmU7Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRf
dCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7Ci0gICAgY29u
c3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIGNvbnN0IFJlZlB0cjxJREJD
YWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKGJhY2tp
bmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykp
OwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7Ci1wcml2YXRlOgotICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNr
aW5nU3RvcmUpCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwg
bV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlS
YW5nZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwotICAgIGNv
bnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOwotICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKLSAgICBjb25z
dCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIENsZWFyT3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENsZWFyT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKLXByaXZhdGU6Ci0gICAgQ2xlYXJPcGVyYXRpb24oUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotICAgICAgICAsIG1fZGF0
YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9y
ZUlkKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0g
ICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgY29u
c3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1j
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nT3BlbkNhbGwgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdPcGVuQ2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGRhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lv
bikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGVuZGluZ09wZW5DYWxsKGNh
bGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsKLSAg
ICB9Ci0gICAgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1f
Y2FsbGJhY2tzOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJh
c2VDYWxsYmFja3MoKSB7IHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzOyB9Ci0gICAgaW50NjRf
dCB2ZXJzaW9uKCkgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgaW50NjRfdCB0cmFuc2FjdGlv
bklkKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbklkOyB9Ci0KLXByaXZhdGU6Ci0gICAg
UGVuZGluZ09wZW5DYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lvbikKLSAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCi0gICAgICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykK
LSAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKLSAgICAgICAgLCBtX3RyYW5zYWN0aW9uSWQo
dHJhbnNhY3Rpb25JZCkKLSAgICB7Ci0gICAgfQotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNh
bGxiYWNrczsKLSAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fdHJh
bnNhY3Rpb25JZDsKLX07Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdE
ZWxldGVDYWxsIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nRGVsZXRl
Q2FsbD4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBlbmRpbmdEZWxldGVDYWxsKGNhbGxiYWNrcykp
OwotICAgIH0KLSAgICBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1
cm4gbV9jYWxsYmFja3M7IH0KLQotcHJpdmF0ZToKLSAgICBQZW5kaW5nRGVsZXRlQ2FsbChQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgfQotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwotfTsKLQotUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUq
IGRhdGFiYXNlLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYg
dW5pcXVlSWRlbnRpZmllcikKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
YmFja2VuZCA9IGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKG5hbWUsIGRhdGFi
YXNlLCBmYWN0b3J5LCB1bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgaWYgKCFiYWNrZW5kLT5vcGVu
SW50ZXJuYWwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGJhY2tlbmQucmVsZWFz
ZSgpOwotfQotCi1uYW1lc3BhY2UgewotY29uc3QgY2hhciogTm9TdHJpbmdWZXJzaW9uID0gIiI7
Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCRmFjdG9y
eUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCi0g
ICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBtX21ldGFkYXRhKG5hbWUs
IEludmFsaWRJZCwgTm9TdHJpbmdWZXJzaW9uLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZl
cnNpb24sIEludmFsaWRJZCkKLSAgICAsIG1faWRlbnRpZmllcih1bmlxdWVJZGVudGlmaWVyKQot
ICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0gICAgLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6Y3JlYXRlKCkpCi0gICAgLCBtX2Nsb3NpbmdDb25u
ZWN0aW9uKGZhbHNlKQotewotICAgIEFTU0VSVCghbV9tZXRhZGF0YS5uYW1lLmlzTnVsbCgpKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZShjb25zdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgaW50NjRfdCBuZXdNYXhPYmplY3RT
dG9yZUlkKQotewotICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmUuaWQpKTsKLSAgICBpZiAobmV3TWF4T2JqZWN0U3RvcmVJZCAhPSBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEu
bWF4T2JqZWN0U3RvcmVJZCA8IG5ld01heE9iamVjdFN0b3JlSWQpOwotICAgICAgICBtX21ldGFk
YXRhLm1heE9iamVjdFN0b3JlSWQgPSBuZXdNYXhPYmplY3RTdG9yZUlkOwotICAgIH0KLSAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUuaWQsIG9iamVjdFN0b3JlKTsK
LX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZShpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5y
ZW1vdmUob2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
YWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBp
bmRleCwgaW50NjRfdCBuZXdNYXhJbmRleElkKQotewotICAgIEFTU0VSVChtX21ldGFkYXRhLm9i
amVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKTsKLQotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRl
eC5pZCkpOwotICAgIG9iamVjdFN0b3JlLmluZGV4ZXMuc2V0KGluZGV4LmlkLCBpbmRleCk7Ci0g
ICAgaWYgKG5ld01heEluZGV4SWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0g
ICAgICAgIEFTU0VSVChvYmplY3RTdG9yZS5tYXhJbmRleElkIDwgbmV3TWF4SW5kZXhJZCk7Ci0g
ICAgICAgIG9iamVjdFN0b3JlLm1heEluZGV4SWQgPSBuZXdNYXhJbmRleElkOwotICAgIH0KLSAg
ICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJZCwgb2JqZWN0U3RvcmUp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4KGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotewotICAgIEFTU0VSVChtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmpl
Y3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGlu
ZGV4SWQpKTsKLSAgICBvYmplY3RTdG9yZS5pbmRleGVzLnJlbW92ZShpbmRleElkKTsKLSAgICBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVJZCwgb2JqZWN0U3RvcmUpOwot
fQotCi1ib29sIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbCgpCi17Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKG1fbWV0YWRhdGEubmFtZSwgJm1fbWV0YWRhdGEsIHN1Y2Nlc3Mp
OwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc3VjY2VzcyA9PSAobV9tZXRhZGF0YS5pZCAhPSBJ
bnZhbGlkSWQpLCAic3VjY2VzcyA9ICVzLCBtX2lkID0gJWxsZCIsIHN1Y2Nlc3MgPyAidHJ1ZSIg
OiAiZmFsc2UiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1fbWV0YWRhdGEuaWQpKTsKLSAgICBp
ZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAg
IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKG1fbWV0YWRhdGEuaWQsICZt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcyk7Ci0KLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNy
ZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0YS5uYW1lLCBtX21ldGFkYXRhLnZlcnNp
b24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgbV9tZXRhZGF0YS5pZCk7Ci19Ci0KLUlEQkRhdGFi
YXNlQmFja2VuZEltcGw6On5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCkKLXsKLX0KLQotUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmJhY2tpbmdTdG9y
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlOwotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKLXsKLSAgICBJREJfVFJBQ0UoIklE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9u
Q2hhbmdlKTsKLQotICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVN
ZXRhZGF0YShuYW1lLCBvYmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKTsKLQotICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZShtX2Jh
Y2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkKSk7Ci0KLSAgICBhZGRPYmplY3RT
dG9yZShvYmplY3RTdG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uIik7Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5u
YW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRh
LmF1dG9JbmNyZW1lbnQpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0
b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwot
ICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmpl
Y3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsK
LSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3Jl
Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3Rv
cmVNZXRhZGF0YSksICBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotICAgIHJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0
b3JlSWQpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKLXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNyZWF0ZUluZGV4Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYg
KCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0g
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVCghb2JqZWN0U3Rv
cmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRy
eSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9u
OjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpLCBD
cmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCkpOwotCi0gICAgYWRkSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSwgaW5k
ZXhJZCk7Ci19Ci0KLXZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJDcmVhdGVJ
bmRleE9wZXJhdGlvbiIpOwotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCB0cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQsIG1faW5kZXhN
ZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwgbV9pbmRleE1ldGFkYXRhLnVu
aXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRv
IGNyZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkp
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgQ3JlYXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikK
LXsKLSAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOwotICAgIG1fZGF0YWJhc2UtPnJl
bW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKTsKLX0KLQotdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotewotICAgIElEQl9UUkFDRSgiSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRy
YW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2Up
OwotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0
b3JlSWQpKTsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0g
bV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJU
KG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwotICAgIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBvYmplY3RTdG9yZS5pbmRleGVzLmdldChpbmRl
eElkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlSW5kZXhPcGVyYXRp
b246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSks
IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSk7Ci0KLSAgICByZW1vdmVJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleElk
KTsKLX0KLQotdm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4
T3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLmlkKTsKLSAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBT
dHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgaW5kZXggJyVzJy4iLCBtX2lu
ZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5h
Ym9ydChlcnJvcik7Ci0gICAgfQotfQotCi12b2lkIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246
OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAg
SURCX1RSQUNFKCJEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIik7Ci0gICAgQVNTRVJUX1VOVVNF
RCh0cmFuc2FjdGlvbiwgIXRyYW5zYWN0aW9uKTsKLSAgICBtX2RhdGFiYXNlLT5hZGRJbmRleCht
X29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxp
ZElkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjb21taXQoaW50NjRfdCB0
cmFuc2FjdGlvbklkKQotewotICAgIC8vIFRoZSBmcm9udGVuZCBzdWdnZXN0cyB0aGF0IHdlIGNv
bW1pdCwgYnV0IHdlIG1heSBoYXZlIHByZXZpb3VzbHkgaW5pdGlhdGVkIGFuIGFib3J0LCBhbmQg
c28gaGF2ZSBkaXNwb3NlZCBvZiB0aGUgdHJhbnNhY3Rpb24uIG9uQWJvcnQgaGFzIGFscmVhZHkg
YmVlbiBkaXNwYXRjaGVkIHRvIHRoZSBmcm9udGVuZCwgc28gaXQgd2lsbCBmaW5kIG91dCBhYm91
dCB0aGF0IGFzeW5jaHJvbm91c2x5LgotICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0
cmFuc2FjdGlvbklkKSkKLSAgICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQp
LT5jb21taXQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphYm9ydChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25v
d24sIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9y
ZSB0aGlzIGNhbGwgc28gaXQgaXMgc2FmZSB0byBpZ25vcmUgaXQuCi0gICAgaWYgKG1fdHJhbnNh
Y3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCktPmFib3J0KCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yKQotewotICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyB1bmtub3duLCB0
aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUgYmFja2VuZCBiZWZvcmUgdGhp
cyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgotICAgIGlmIChtX3RyYW5zYWN0aW9u
cy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Z2V0KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBib29sIGtl
eU9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBt
X21ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IElu
ZGV4ZWREQjo6Q3Vyc29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIGNh
bGxiYWNrcykpOwotfQotCi12b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkdldE9wZXJhdGlv
biIpOwotCi0gICAgUmVmUHRyPElEQktleT4ga2V5OwotCi0gICAgaWYgKG1fa2V5UmFuZ2UtPmlz
T25seUtleSgpKQotICAgICAgICBrZXkgPSBtX2tleVJhbmdlLT5sb3dlcigpOwotICAgIGVsc2Ug
ewotICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1
cnNvcjsKLSAgICAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJz
b3JLZXlPbmx5KTsKLSAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRp
b24KLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVu
T2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fY3Vy
c29yVHlwZSA9PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpCi0gICAgICAgICAgICAgICAgLy8g
SW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgICAgIGJhY2tpbmdT
dG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBW
YWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXk7Ci0gICAgYm9vbCBvazsKLSAgICBpZiAobV9pbmRleElk
ID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICAvLyBPYmplY3QgU3Rv
cmUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAg
ICAgIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICprZXksIHZh
bHVlKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQYXRoLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6
YWRvcHRWZWN0b3IodmFsdWUpLCBrZXksIG1fa2V5UGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZl
cjo6YWRvcHRWZWN0b3IodmFsdWUpKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgfQotCi0gICAg
Ly8gRnJvbSBoZXJlIHdlIGFyZSBkZWFsaW5nIG9ubHkgd2l0aCBpbmRleGVzLgotICAgIG9rID0g
bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhJZCwgKmtleSwgcHJpbWFyeUtleSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFByaW1hcnlLZXlWaWFJbmRl
eC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFwcmltYXJ5S2V5KSB7Ci0g
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgewotICAg
ICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MocHJpbWFyeUtleS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAg
ICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3Jk
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3Jk
LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051bGwoKSkgewot
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3Io
dmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1
ZSkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnB1dChpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJ
ZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCi17Ci0gICAgSURCX1RSQUNF
KCJJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwdXQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
LSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKLQotICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmpl
Y3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKLQotICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUs
IGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNr
cywgaW5kZXhJZHMsIGluZGV4S2V5cykpOwotfQotCi12b2lkIFB1dE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJB
Q0UoIlB1dE9wZXJhdGlvbiIpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0gICAgQVNTRVJUKG1faW5kZXhJZHMuc2l6
ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7Ci0gICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBm
YWxzZTsKLQotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLSAgICBpZiAobV9wdXRNb2RlICE9IElE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIG1fb2JqZWN0U3RvcmUu
YXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0lu
Y0tleSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KG1fYmFja2luZ1N0
b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKLSAgICAg
ICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiTWF4aW11
bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIGtleSA9IGF1dG9JbmNLZXk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGtleSA9IG1fa2V5OwotCi0gICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7Ci0KLSAg
ICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAg
ICBpZiAobV9wdXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSkg
ewotICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCAmcmVj
b3JkSWRlbnRpZmllciwgZm91bmQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlz
dGVuY2UuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChm
b3VuZCkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJLZXkgYWxy
ZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKLSAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOwotICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOwotICAgIGJvb2wgYmFj
a2luZ1N0b3JlU3VjY2VzcyA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om1ha2VJbmRleFdy
aXRlcnModHJhbnNhY3Rpb24sIG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmUsIGtleSwga2V5V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRzLCBtX2luZGV4S2V5
cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7Ci0gICAg
aWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgg
a2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFvYmV5c0NvbnN0cmFp
bnRzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2Up
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBk
b24ndCBkbyBhbnkgbXV0YXRpb24uIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFu
c2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgotICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2Jh
Y2tpbmdTdG9yZS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsICZyZWNv
cmRJZGVudGlmaWVyKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBl
cnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXIqIGluZGV4V3JpdGVy
ID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwotICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRl
eEtleXMocmVjb3JkSWRlbnRpZmllciwgKm1fYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9k
ZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5
cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKLSAgICAgICAgYm9vbCBvayA9IElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnVwZGF0ZUtleUdlbmVyYXRvcihtX2JhY2tpbmdTdG9yZSwgdHJh
bnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwga2V5LmdldCgpLCAha2V5
V2FzR2VuZXJhdGVkKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgbV9jYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGluZyBrZXkgZ2VuZXJhdG9yLiIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyIp
OwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5
ID0gcHJwUHJpbWFyeUtleTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBzdG9yZSA9IGJh
Y2tpbmdTdG9yZSgpOwotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBiZSBhc3luY2hy
b25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhlIGV4dHJhIGNv
bXBsZXhpdHkuCi0gICAgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIHJlY29yZElk
ZW50aWZpZXI7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGJvb2wgb2sgPSBzdG9yZS0+
a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksICZyZWNvcmRJ
ZGVudGlmaWVyLCBmb3VuZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICB0cmFuc2FjdGlvbi0+
YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBz
ZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBzdG9yZS4iKSk7Ci0gICAgICAgIHRyYW5zYWN0
aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgVmVjdG9yPE93blB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleFdyaXRlcj4g
PiBpbmRleFdyaXRlcnM7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBib29sIG9iZXlz
Q29uc3RyYWludHMgPSBmYWxzZTsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMu
Y29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgc3RvcmUuZ2V0KCks
IGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywg
aW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRz
KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcg
aW5kZXgga2V5cy4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFvYmV5c0Nv
bnN0cmFpbnRzKSB7Ci0gICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNz
YWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0
KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVy
LCAqc3RvcmUuZ2V0KCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBp
ZCgpLCBvYmplY3RTdG9yZUlkKTsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6c2V0SW5kZXhlc1JlYWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSIpOwotCi0gICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rp
b25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVt
cHRpdmVUYXNrLCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZShpbmRleElkcy5zaXpl
KCkpKTsKLX0KLQotdm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJTZXRJ
bmRleGVzUmVhZHlPcGVyYXRpb24iKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5k
ZXhDb3VudDsgKytpKQotICAgICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZl
RXZlbnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RSQUNFKCJJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0g
ICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUs
IGlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGtleU9u
bHkgPyBJbmRleGVkREI6OkN1cnNvcktleU9ubHkgOiBJbmRleGVkREI6OkN1cnNvcktleUFuZFZh
bHVlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgT3BlbkN1cnNvck9wZXJhdGlv
bjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBJREJfVFJBQ0UoIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKLQotICAgIC8vIFRoZSBmcm9udGVu
ZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFuc2FjdGlvbgotICAg
IC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4ndCBoYXBwZW4gYW55
IGVhcmxpZXIKLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc3dpdGNoIHRvIGVhcmx5
IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQotICAgIC8vIGluZGV4ZXMgYXJlIGJlaW5nIGNyZWF0ZWQg
aW4gYSByb3csIHdpdGggcHV0KCkncyBpbiBiZXR3ZWVuLgotICAgIGlmIChtX3Rhc2tUeXBlID09
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2spCi0gICAgICAgIHRy
YW5zYWN0aW9uLT5hZGRQcmVlbXB0aXZlRXZlbnQoKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwotICAgIGlmIChtX2luZGV4SWQgPT0g
SURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnNvclR5
cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBB
U1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRh
c2spOwotICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25s
eSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVu
SW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
ZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCks
IG1fZGlyZWN0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgIH0KLQotICAgIGlmICgh
YmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3Rh
dGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNf
Y2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPihtX3Rhc2tUeXBlKSk7
Ci0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQoKSwgbV9jdXJzb3JUeXBlLCB0
YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgbV9jYWxsYmFja3Mt
Pm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBj
dXJzb3ItPnZhbHVlKCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNvdW50
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y291bnQiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
biA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soQ291bnRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgaWQoKSwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIENvdW50T3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQot
ewotICAgIElEQl9UUkFDRSgiQ291bnRPcGVyYXRpb24iKTsKLSAgICB1aW50MzJfdCBjb3VudCA9
IDA7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJz
b3I7Ci0KLSAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkK
LSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RT
dG9yZUtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6
Q3Vyc29yTmV4dCk7Ci0gICAgZWxzZQotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBt
X2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwotICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZG8gewotICAgICAgICArK2NvdW50OwotICAg
IH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpkZWxldGVSYW5nZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlm
ICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwotCi0gICAgdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2lu
Z1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0K
LXZvaWQgRGVsZXRlUmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJEZWxldGVSYW5nZU9wZXJhdGlv
biIpOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgaWYgKGJhY2tp
bmdTdG9yZUN1cnNvcikgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5kZWxldGVSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJl
Y29yZElkZW50aWZpZXIoKSkpIHsKLSAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkVycm9yIGRlbGV0aW5nIGRhdGEgaW4gcmFuZ2UiKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJz
b3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotICAgIH0KLQotICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbGVhcihpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNsZWFyIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlv
bikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKENsZWFyT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVj
dFN0b3JlSWQsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQotewotICAgIElEQl9UUkFD
RSgiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiIpOwotICAgIGlmICghbV9iYWNraW5nU3RvcmUt
PmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkVycm9yIGNsZWFyaW5nIG9iamVjdCBzdG9yZSIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci19Ci0KLXZvaWQgRGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiIpOwotICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLT5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOwotICAgIGlmICghb2spIHsK
LSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9y
bWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVj
dFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydChlcnJvcik7Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNFKCJWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
Iik7Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkID0gbV9kYXRhYmFzZS0+aWQoKTsKLSAgICBpbnQ2
NF90IG9sZFZlcnNpb24gPSBtX2RhdGFiYXNlLT5tX21ldGFkYXRhLmludFZlcnNpb247Ci0gICAg
QVNTRVJUKG1fdmVyc2lvbiA+IG9sZFZlcnNpb24pOwotICAgIG1fZGF0YWJhc2UtPm1fbWV0YWRh
dGEuaW50VmVyc2lvbiA9IG1fdmVyc2lvbjsKLSAgICBpZiAoIW1fZGF0YWJhc2UtPm1fYmFja2lu
Z1N0b3JlLT51cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24odHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50
VmVyc2lvbikpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
ICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ugd2hlbiB1cGRhdGluZyB2ZXJz
aW9uLiIpOwotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNT
RVJUKCFtX2RhdGFiYXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3Blbik7Ci0gICAgbV9kYXRhYmFz
ZS0+bV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gPSBQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShtX2Nh
bGxiYWNrcywgbV9kYXRhYmFzZUNhbGxiYWNrcywgbV90cmFuc2FjdGlvbklkLCBtX3ZlcnNpb24p
OwotICAgIG1fY2FsbGJhY2tzLT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgbV9kYXRhYmFz
ZSwgbV9kYXRhYmFzZS0+bWV0YWRhdGEoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gcHJwVHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247Ci0gICAgaWYgKHRyYW5zYWN0aW9u
LT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsKLSAgICAg
ICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgICAgICBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICB9Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uKQotewotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5z
YWN0aW9uOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+
aWQoKSkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24tPmlkKCkp
ID09IHRyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNh
Y3Rpb24tPmlkKCkpOwotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7Ci0gICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5n
ZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAg
ICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0
RmlyZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBwcnBUcmFuc2FjdGlv
bikKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24g
PSBwcnBUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgewotICAgICAgICAvLyBJZiB0aGlzIHdhcyBh
biBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSB3aWxsIGJlIGEgInNlY29uZAotICAgICAg
ICAvLyBoYWxmIiBvcGVuIGNhbGwgd2FpdGluZyBmb3IgdXMgaW4gcHJvY2Vzc1BlbmRpbmdDYWxs
cy4KLSAgICAgICAgLy8gRklYTUU6IFdoZW4gd2Ugbm8gbG9uZ2VyIHN1cHBvcnQgc2V0VmVyc2lv
biwgYXNzZXJ0IHN1Y2ggYSB0aGluZy4KLSAgICAgICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuKSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCkt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpB
Ym9ydEVycm9yLCAiVmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24gd2FzIGFib3J0ZWQgaW4gdXBn
cmFkZW5lZWRlZCBldmVudCBoYW5kbGVyLiIpKTsKLSAgICAgICAgICAgIG1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgICAgICBwcm9jZXNzUGVuZGluZ0Nh
bGxzKCk7Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnRyYW5zYWN0
aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247Ci0gICAgaWYgKHRyYW5zYWN0
aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpCi0gICAg
ICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLX0KLQotc2l6ZV90IElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNvbm5lY3Rpb25Db3VudCgpCi17Ci0gICAgLy8gVGhpcyBkb2VzIG5vdCBpbmNsdWRl
IHBlbmRpbmcgb3BlbiBjYWxscywgYXMgdGhvc2Ugc2hvdWxkIG5vdCBibG9jayB2ZXJzaW9uIGNo
YW5nZXMgYW5kIGRlbGV0ZXMuCi0gICAgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6
ZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2Fs
bHMoKQotewotICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgewotICAgICAgICBBU1NF
UlQobV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPnZlcnNpb24oKSA9PSBtX21ldGFkYXRhLmludFZl
cnNpb24pOwotICAgICAgICBBU1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJbnZhbGlkSWQpOwotICAg
ICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uU3VjY2Vzcyh0aGlz
LCB0aGlzLT5tZXRhZGF0YSgpKTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVs
ZWFzZSgpOwotICAgICAgICAvLyBGYWxsIHRocm91Z2ggd2hlbiBjb21wbGV0ZSwgYXMgcGVuZGlu
ZyBkZWxldGVzIG1heSBiZSAocGFydGlhbGx5KSB1bmJsb2NrZWQuCi0gICAgfQotCi0gICAgLy8g
Tm90ZSB0aGF0IHRoaXMgY2hlY2sgaXMgb25seSBhbiBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIHF1
ZXVlLWNodXJuIGFuZAotICAgIC8vIG5vdCBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzOyBkZWxl
dGVEYXRhYmFzZSBhbmQgb3BlbkNvbm5lY3Rpb24gd2lsbAotICAgIC8vIHJlcXVldWUgdGhlaXIg
Y2FsbHMgaWYgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGVuZGlu
Z0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSAmJiBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgd2hpbGUgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9
IG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOwotICAgICAgICBkZWxldGVEYXRhYmFz
ZUZpbmFsKHBlbmRpbmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7Ci0gICAgfQotICAgIC8vIGRl
bGV0ZURhdGFiYXNlRmluYWwgc2hvdWxkIG5ldmVyIHJlLXF1ZXVlIGNhbGxzLgotICAgIEFTU0VS
VChtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOwotCi0gICAgLy8gVGhpcyBjaGVjayBp
cyBhbHNvIG5vdCByZWFsbHkgbmVlZGVkLCBvcGVuQ29ubmVjdGlvbiB3b3VsZCBqdXN0IHJlcXVl
dWUgaXRzIGNhbGxzLgotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9wZW4gY2FsbHMgY2FuIGJlIHJlcXVldWVkIGlm
IGFuIG9wZW4gY2FsbCBzdGFydGVkIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uCi0gICAg
RGVxdWU8T3duUHRyPFBlbmRpbmdPcGVuQ2FsbD4gPiBwZW5kaW5nT3BlbkNhbGxzOwotICAgIG1f
cGVuZGluZ09wZW5DYWxscy5zd2FwKHBlbmRpbmdPcGVuQ2FsbHMpOwotICAgIHdoaWxlICghcGVu
ZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKLSAgICAgICAgT3duUHRyPFBlbmRpbmdPcGVuQ2Fs
bD4gcGVuZGluZ09wZW5DYWxsID0gcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKLSAgICAg
ICAgb3BlbkNvbm5lY3Rpb24ocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ09w
ZW5DYWxsLT5kYXRhYmFzZUNhbGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPnRyYW5zYWN0aW9u
SWQoKSwgcGVuZGluZ09wZW5DYWxsLT52ZXJzaW9uKCkpOwotICAgIH0KLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkKLXsKLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUodHJhbnNhY3Rpb25JZCwgY2FsbGJhY2tzLCBvYmpl
Y3RTdG9yZUlkcywgc3RhdGljX2Nhc3Q8SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU+KG1vZGUp
LCB0aGlzKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
SWQpKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb25JZCwgdHJhbnNhY3Rpb24u
Z2V0KCkpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3QgdmVyc2lvbikKLXsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUuZ2V0KCkp
OwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAg
ICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0
YWJhc2VDYWxsYmFja3M7Ci0KLSAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHko
KSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAgbV9wZW5k
aW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIGRh
dGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAobV9tZXRhZGF0YS5pZCA9PSBJbnZhbGlkSWQpIHsKLSAgICAg
ICAgLy8gVGhlIGRhdGFiYXNlIHdhcyBkZWxldGVkIHRoZW4gaW1tZWRpYXRlbHkgcmUtb3BlbmVk
OyBvcGVuSW50ZXJuYWwoKSByZWNyZWF0ZXMgaXQgaW4gdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAg
ICAgIGlmIChvcGVuSW50ZXJuYWwoKSkKLSAgICAgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmlu
dFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICAgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvcjsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IElEQkRh
dGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0g
IkludGVybmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2ZXJzaW9uIHNwZWNpZmll
ZC4iOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6
OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIHZlcnNpb24gJWxs
ZCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmVyc2lvbikpOwotICAgICAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCBtZXNzYWdlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBXZSBpbmZlciB0aGF0IHRoZSBkYXRhYmFzZSBkaWRuJ3QgZXhp
c3QgZnJvbSBpdHMgbGFjayBvZiBlaXRoZXIgdHlwZSBvZiB2ZXJzaW9uLgotICAgIGJvb2wgaXNO
ZXdEYXRhYmFzZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBOb1N0cmluZ1ZlcnNpb24gJiYgbV9t
ZXRhZGF0YS5pbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsK
LQotICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJz
aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGNvbW1lbnRzIHdhcyByZWxhdGVkIHRvIENo
cm9taXVtIGNvZGUuIEl0IG1heSBiZSBpbmNvcnJlY3QKLSAgICAgICAgLy8gRm9yIHVuaXQgdGVz
dHMgb25seSAtIHNraXAgdXBncmFkZSBzdGVwcy4gQ2FsbGluZyBmcm9tIHNjcmlwdCB3aXRoIERl
ZmF1bHRJbnRWZXJzaW9uIHRocm93cyBleGNlcHRpb24uCi0gICAgICAgIEFTU0VSVChpc05ld0Rh
dGFiYXNlKTsKLSAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxs
YmFja3MpOwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0
YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh2ZXJzaW9uID09IElEQkRh
dGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikgewotICAgICAgICBpZiAoIWlzTmV3RGF0YWJh
c2UpIHsKLSAgICAgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4oZGF0YWJhc2VDYWxsYmFja3MpKTsKLSAgICAgICAgICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNwZWMgc2F5czogSWYgbm8gdmVyc2lvbiBpcyBz
cGVjaWZpZWQgYW5kIG5vIGRhdGFiYXNlIGV4aXN0cywgc2V0IGRhdGFiYXNlIHZlcnNpb24gdG8g
MS4KLSAgICAgICAgdmVyc2lvbiA9IDE7Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24gPiBtX21l
dGFkYXRhLmludFZlcnNpb24pIHsKLSAgICAgICAgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh2ZXJzaW9uIDwgbV9tZXRhZGF0YS5p
bnRWZXJzaW9uKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpmb3Jt
YXQoIlRoZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJWxsZCkgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGlu
ZyB2ZXJzaW9uICglbGxkKS4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZlcnNpb24pLCBzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KG1fbWV0YWRhdGEuaW50VmVyc2lvbikpKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKHZlcnNpb24gPT0gbV9tZXRhZGF0YS5pbnRWZXJzaW9u
KTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0g
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci19Ci0KLXZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKLXsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJhY2tzOwotICAgIEFTU0VS
VChjYWxsYmFja3MpOwotICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNl
Q2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVz
IHRoZSBldmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVu
ZGluZyBzZXQuCi0gICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgICAg
ICAgICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgcmVxdWVz
dGVkVmVyc2lvbik7Ci0gICAgfQotICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50
aWwgYWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCi0gICAgLy8gZGVsaXZlcmVkIGFu
ZCB0aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGlu
ZwotICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3Vs
ZCBiZSBjb25zaXN0ZW50IHdpdGggaG93Ci0gICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNv
cnJlY3RseSkgZGlkIGl0LgotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNhbGwgdG8gb25CbG9j
a2VkIGFuZCBpbnN0ZWFkIHdhaXQgdW50aWwgdGhlIGZyb250ZW5kCi0gICAgLy8gdGVsbHMgdXMg
dGhhdCBhbGwgdGhlIGJsb2NrZWQgZXZlbnRzIGhhdmUgYmVlbiBkZWxpdmVyZWQuIFNlZQotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAotICAgIGlm
IChjb25uZWN0aW9uQ291bnQoKSkKLSAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRh
ZGF0YS5pbnRWZXJzaW9uKTsKLSAgICAvLyBGSVhNRTogQWRkIHRlc3QgZm9yIG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbi4KLSAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uIHx8IGNvbm5lY3Rpb25Db3VudCgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ09wZW5D
YWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCBkYXRhYmFzZUNh
bGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwotICAgIGNy
ZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RT
dG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwotICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3Rl
ZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEu
aW50VmVyc2lvbikpOwotCi0gICAgQVNTRVJUKCFtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbik7Ci0g
ICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOwotfQotCi12
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCi17Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgp
KSB7Ci0gICAgICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJlcyB0
aGUgZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBlbmRp
bmcgc2V0LgotICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRhLmlu
dFZlcnNpb24sIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4g
Y29ubmVjdGlvbnMgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJl
IHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCi0gICAgICAgIGNhbGxiYWNrcy0+
b25CbG9ja2VkKG1fbWV0YWRhdGEuaW50VmVyc2lvbik7Ci0gICAgICAgIG1fcGVuZGluZ0RlbGV0
ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcy5yZWxlYXNl
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkZWxldGVEYXRhYmFzZUZpbmFsKGNh
bGxiYWNrcy5yZWxlYXNlKCkpOwotfQotCi1ib29sIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Omlz
RGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkKLXsKLSAgICByZXR1cm4gY29ubmVjdGlvbkNvdW50KCk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2VGaW5hbChQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIEFTU0VSVCghaXNEZWxl
dGVEYXRhYmFzZUJsb2NrZWQoKSk7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShtX21ldGFkYXRhLm5hbWUpKSB7Ci0g
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGRlbGV0aW5nIGRh
dGFiYXNlLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX21ldGFkYXRhLnZlcnNp
b24gPSBOb1N0cmluZ1ZlcnNpb247Ci0gICAgbV9tZXRhZGF0YS5pZCA9IEludmFsaWRJZDsKLSAg
ICBtX21ldGFkYXRhLmludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNp
b247Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKLSAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcygpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3NlKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBB
U1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxsYmFja3MpKTsKLQotICAg
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNrcyk7Ci0gICAgaWYgKG1fcGVu
ZGluZ1NlY29uZEhhbGZPcGVuICYmIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5kYXRhYmFzZUNh
bGxiYWNrcygpID09IGNhbGxiYWNrcykgewotICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3Bl
bi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZC4iKSk7
Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAg
ICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBw
cm9jZXNzUGVuZGluZ0NhbGxzIGFsbG93cyB0aGUgaW5zcGVjdG9yIHRvIHByb2Nlc3MgYSBwZW5k
aW5nIG9wZW4gY2FsbAotICAgIC8vIGFuZCBjYWxsIGNsb3NlLCByZWVudGVyaW5nIElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNsb3NlLiBUaGVuIHRoZQotICAgIC8vIGJhY2tlbmQgd291bGQgYmUg
cmVtb3ZlZCBib3RoIGJ5IHRoZSBpbnNwZWN0b3IgY2xvc2luZyBpdHMgY29ubmVjdGlvbiwgYW5k
Ci0gICAgLy8gYnkgdGhlIGNvbm5lY3Rpb24gdGhhdCBmaXJzdCBjYWxsZWQgY2xvc2UuCi0gICAg
Ly8gVG8gYXZvaWQgdGhhdCBzaXR1YXRpb24sIGRvbid0IHByb2NlZWQgaW4gY2FzZSBvZiByZWVu
dHJhbmN5LgotICAgIGlmIChtX2Nsb3NpbmdDb25uZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0g
ICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNsb3NpbmdDb25uZWN0aW9uKG1fY2xvc2luZ0Nvbm5l
Y3Rpb24sIHRydWUpOwotICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLQotICAgIC8vIEZJWE1F
OiBBZGQgYSB0ZXN0IGZvciB0aGUgbV9wZW5kaW5nT3BlbkNhbGxzIGNhc2VzIGJlbG93LgotICAg
IGlmICghY29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5zaXplKCkgJiYg
IW1fcGVuZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgewotICAgICAgICBUcmFuc2FjdGlvbk1hcCB0
cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOwotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKLSAgICAgICAgZm9y
IChUcmFuc2FjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBpdCA9IHRyYW5zYWN0aW9u
cy52YWx1ZXMoKS5iZWdpbigpLCBlbmQgPSB0cmFuc2FjdGlvbnMudmFsdWVzKCkuZW5kKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICgqaXQpLT5hYm9ydChlcnJvcik7Ci0KLSAgICAg
ICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgbV9iYWNraW5n
U3RvcmUuY2xlYXIoKTsKLQotICAgICAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBvbmx5IGJlIGZh
bHNlIGluIHVuaXQgdGVzdHMuCi0gICAgICAgIEFTU0VSVChtX2ZhY3RvcnkpOwotICAgICAgICBp
ZiAobV9mYWN0b3J5KQotICAgICAgICAgICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJh
Y2tlbmQobV9pZGVudGlmaWVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVB
Ym9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24i
KTsKLSAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOwotICAgIG1f
ZGF0YWJhc2UtPnJlbW92ZU9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVJZCk7Ci19Ci0KLXZvaWQg
RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBJREJfVFJBQ0UoIkRlbGV0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb24iKTsKLSAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJh
bnNhY3Rpb24pOwotICAgIG1fZGF0YWJhc2UtPmFkZE9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVN
ZXRhZGF0YSwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RS
QUNFKCJWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24iKTsKLSAgICBBU1NFUlRfVU5VU0VEKHRy
YW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOwotICAgIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEudmVy
c2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOwotICAgIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50
VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUzYmZhMC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbF9oCi0jZGVmaW5lIElEQkRhdGFiYXNlQmFja2VuZEltcGxfaAotCi0jaW5j
bHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLSNpbmNsdWRl
IDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3Jl
OwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7Ci1jbGFz
cyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOwotY2xhc3MgSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG9yZSogZGF0YWJhc2UsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5p
cXVlSWRlbnRpZmllcik7Ci0gICAgdmlydHVhbCB+SURCRGF0YWJhc2VCYWNrZW5kSW1wbCgpOwot
Ci0gICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSgpIGNvbnN0Owot
Ci0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gMDsKLSAgICBpbnQ2NF90IGlk
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YS5pZDsgfQotICAgIHZvaWQgYWRkT2JqZWN0U3Rv
cmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4T2JqZWN0U3Rv
cmVJZCk7Ci0gICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQp
OwotICAgIHZvaWQgYWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhJbmRleElkKTsKLSAgICB2b2lkIHJlbW92ZUluZGV4
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLQotICAgIHZvaWQgb3Bl
bkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24pOwot
ICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBj
b25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YWRhdGE7IH0KLQotICAgIC8vIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZQotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBhdXRvSW5jcmVtZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3Jl
SWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbW1pdChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChpbnQ2NF90IHRy
YW5zYWN0aW9uSWQpOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRl
eChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkKTsKLQotICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7
IH0KLSAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+KTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVk
QW5kQ29tcGxldGVGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsK
LSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwotCi0gICAgdmlydHVhbCB2b2lkIGdldChpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJz
b3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBPVkVSUklERTsK
LQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29u
c3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKLQotICAgIGJvb2wgb3BlbkludGVybmFsKCk7
Ci0gICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOwotICAgIHNpemVfdCBjb25uZWN0
aW9uQ291bnQoKTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLQotICAgIGJvb2wg
aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKTsKLSAgICB2b2lkIGRlbGV0ZURhdGFiYXNlRmluYWwo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLQotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VPcGVy
YXRpb247Ci0KLSAgICAvLyBXaGVuIGEgInZlcnNpb25jaGFuZ2UiIHRyYW5zYWN0aW9uIGFib3J0
cywgdGhlc2UgcmVzdG9yZSB0aGUgYmFjay1lbmQgb2JqZWN0IGhpZXJhcmNoeS4KLSAgICBjbGFz
cyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb247Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7
Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwotICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQg
dG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZhY3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRo
ZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29y
cnkuCi0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwotCi0gICAg
T3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gbV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqPiBUcmFuc2FjdGlvbk1hcDsKLSAgICBUcmFuc2FjdGlvbk1h
cCBtX3RyYW5zYWN0aW9uczsKLQotICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKLSAgICBEZXF1
ZTxPd25QdHI8UGVuZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKLSAgICBPd25Q
dHI8UGVuZGluZ09wZW5DYWxsPiBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbjsKLQotICAgIGNsYXNz
IFBlbmRpbmdEZWxldGVDYWxsOwotICAgIERlcXVlPE93blB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4g
PiBtX3BlbmRpbmdEZWxldGVDYWxsczsKLQotICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiA+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OwotICAgIERhdGFi
YXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7Ci0KLSAgICBib29sIG1fY2xv
c2luZ0Nvbm5lY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhlMTk3Yy4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0KLSNpbmNsdWRlICJET01TdHJpbmdMaXN0
LmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVk
ZSAiSURCVHJhY2luZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIK
LSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5h
bWUgTT4KLXN0YXRpYyB2b2lkIGNsZWFuV2Vha01hcChIYXNoTWFwPEssIFdlYWtQdHI8TT4gPiYg
bWFwKQotewotICAgIEhhc2hNYXA8SywgV2Vha1B0cjxNPiA+IG90aGVyOwotICAgIG90aGVyLnN3
YXAobWFwKTsKLQotICAgIHR5cGVuYW1lIEhhc2hNYXA8SywgV2Vha1B0cjxNPiA+Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gb3RoZXIuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXRlciAhPSBvdGhlci5l
bmQoKSkgewotICAgICAgICBpZiAoaXRlci0+dmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICBtYXAu
c2V0KGl0ZXItPmtleSwgaXRlci0+dmFsdWUpOwotICAgICAgICArK2l0ZXI7Ci0gICAgfQotfQot
Ci1zdGF0aWMgU3RyaW5nIGNvbXB1dGVGaWxlSWRlbnRpZmllcihTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4pCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgbGV2ZWxEQkZpbGVTdWZmaXhb
XSA9ICJAMSI7Ci0gICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSArIGxldmVsREJGaWxlU3VmZml4OwotfQotCi1zdGF0aWMgU3RyaW5nIGNvbXB1dGVVbmlxdWVJ
ZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKQotewotICAgIHJldHVybiBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4p
ICsgbmFtZTsKLX0KLQotSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpJREJGYWN0b3J5QmFja2VuZElt
cGwoKQotewotfQotCi1JREJGYWN0b3J5QmFja2VuZEltcGw6On5JREJGYWN0b3J5QmFja2VuZElt
cGwoKQotewotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCRGF0YWJh
c2VCYWNrZW5kKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQo
bV9kYXRhYmFzZUJhY2tlbmRNYXAuY29udGFpbnModW5pcXVlSWRlbnRpZmllcikpOwotICAgIG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJZGVudGlmaWVyKTsKLX0KLQotdm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rvcnkp
Ci17Ci0gICAgSURCX1RSQUNFKCJJREJGYWN0b3J5QmFja2VuZEltcGw6OmdldERhdGFiYXNlTmFt
ZXMiKTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFj
a2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLSAgICBpZiAoIWJhY2tp
bmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
ciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9yIGluZGV4ZWREQi53ZWJraXRHZXREYXRhYmFzZU5h
bWVzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxET01TdHJpbmdM
aXN0PiBkYXRhYmFzZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPiBmb3VuZE5hbWVzID0gYmFja2luZ1N0b3JlLT5nZXREYXRhYmFzZU5hbWVzKCk7
Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmb3VuZE5hbWVz
LmJlZ2luKCk7IGl0ICE9IGZvdW5kTmFtZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRhdGFiYXNl
TmFtZXMtPmFwcGVuZCgqaXQpOwotCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoZGF0YWJhc2VO
YW1lcy5yZWxlYXNlKCkpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UiKTsKLSAgICBj
b25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5h
bWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLQotICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIp
OwotICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICAv
LyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkg
ZGVsZXRlIHRoZQotICAgICAgICAvLyBkYXRhYmFzZS4KLSAgICAgICAgaXQtPnZhbHVlLT5kZWxl
dGVEYXRhYmFzZShjYWxsYmFja3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
RklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0
aHJlYWQuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJh
Y2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7Ci0gICAgaWYgKCFiYWNr
aW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3Igb3BlbmluZyBiYWNraW5nIHN0b3JlIGZvciBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UuIikp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShu
YW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIGlm
IChkYXRhYmFzZUJhY2tlbmQpIHsKLSAgICAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVu
aXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7Ci0gICAgICAgIGRhdGFiYXNl
QmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKLSAgICAgICAgbV9kYXRhYmFzZUJh
Y2tlbmRNYXAucmVtb3ZlKHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIH0gZWxzZQotICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBkYXRhYmFzZSBi
YWNrZW5kIGZvciBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UuIikpOwotfQotCi1QYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3Jl
KFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXJlY3RvcnkpCi17Ci0gICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gY29t
cHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKLSAgICBjb25zdCBib29s
IG9wZW5Jbk1lbW9yeSA9IGRhdGFEaXJlY3RvcnkuaXNFbXB0eSgpOwotCi0gICAgSURCQmFja2lu
Z1N0b3JlTWFwOjppdGVyYXRvciBpdDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVu
dGlmaWVyKTsKLSAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpICYmIGl0Mi0+
dmFsdWUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBpdDItPnZhbHVlLmdldCgpOwotCi0gICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOwotICAgIGlmIChvcGVuSW5NZW1vcnkp
Ci0gICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbkluTWVtb3J5KHNl
Y3VyaXR5T3JpZ2luLmdldCgpLCBmaWxlSWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAgICAgICBi
YWNraW5nU3RvcmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCks
IGRhdGFEaXJlY3RvcnksIGZpbGVJZGVudGlmaWVyKTsKLQotICAgIGlmIChiYWNraW5nU3RvcmUp
IHsKLSAgICAgICAgY2xlYW5XZWFrTWFwKG1fYmFja2luZ1N0b3JlTWFwKTsKLSAgICAgICAgbV9i
YWNraW5nU3RvcmVNYXAuc2V0KGZpbGVJZGVudGlmaWVyLCBiYWNraW5nU3RvcmUtPmNyZWF0ZVdl
YWtQdHIoKSk7Ci0gICAgICAgIC8vIElmIGFuIGluLW1lbW9yeSBkYXRhYmFzZSwgYmluZCBsaWZl
dGltZSB0byB0aGlzIGZhY3RvcnkgaW5zdGFuY2UuCi0gICAgICAgIGlmIChvcGVuSW5NZW1vcnkp
Ci0gICAgICAgICAgICBtX3Nlc3Npb25Pbmx5QmFja2luZ1N0b3Jlcy5hZGQoYmFja2luZ1N0b3Jl
KTsKLQotICAgICAgICAvLyBBbGwgYmFja2luZyBzdG9yZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
ZmFjdG9yeSBzaG91bGQgYmUgb2YgdGhlIHNhbWUgdHlwZS4KLSAgICAgICAgQVNTRVJUKG1fc2Vz
c2lvbk9ubHlCYWNraW5nU3RvcmVzLmlzRW1wdHkoKSB8fCBvcGVuSW5NZW1vcnkpOwotCi0gICAg
ICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiAw
OwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIGludDY0X3QgdmVyc2lvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBk
YXRhYmFzZUNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwU2VjdXJpdHlP
cmlnaW4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rv
cnkpCi17Ci0gICAgSURCX1RSQUNFKCJJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4iKTsKLSAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gcHJwU2VjdXJpdHlPcmln
aW47Ci0gICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRl
bnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7Ci0KLSAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kOwotICAgIElEQkRhdGFiYXNlQmFja2Vu
ZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50
aWZpZXIpOwotICAgIGlmIChpdCA9PSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAg
ICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0
b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKLSAgICAgICAgaWYgKCFiYWNraW5n
U3RvcmUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yIG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLm9wZW4uIikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhp
cywgdW5pcXVlSWRlbnRpZmllcik7Ci0gICAgICAgIGlmIChkYXRhYmFzZUJhY2tlbmQpCi0gICAg
ICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJh
c2VCYWNrZW5kLmdldCgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBkYXRhYmFzZSBiYWNrZW5kIGZv
ciBpbmRleGVkZGIub3Blbi4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UKLSAgICAgICAgZGF0YWJhc2VCYWNrZW5kID0gaXQtPnZhbHVlOwotCi0gICAgZGF0
YWJhc2VCYWNrZW5kLT5vcGVuQ29ubmVjdGlvbihjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tz
LCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWE2ODIwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyAvZGV2
L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
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
IE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCi0j
ZGVmaW5lIElEQkZhY3RvcnlCYWNrZW5kSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNl
Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERPTVN0cmluZ0xpc3Q7Ci0KLWNsYXNzIElEQkJh
Y2tpbmdTdG9yZTsKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci0KLWNsYXNzIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBjcmVh
dGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5QmFja2Vu
ZEltcGwoKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwot
Ci0gICAgLy8gTm90aWZpY2F0aW9ucyBmcm9tIHdlYWsgcG9pbnRlcnMuCi0gICAgdmlydHVhbCB2
b2lkIHJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZp
ZXIpOwotCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29u
c3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7Ci0KLXByb3RlY3RlZDoKLSAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotCi1wcml2
YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tl
bmRJbXBsPiA+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKLSAgICBJREJEYXRhYmFzZUJhY2tlbmRN
YXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBX
ZWFrUHRyPElEQkJhY2tpbmdTdG9yZT4gPiBJREJCYWNraW5nU3RvcmVNYXA7Ci0gICAgSURCQmFj
a2luZ1N0b3JlTWFwIG1fYmFja2luZ1N0b3JlTWFwOwotCi0gICAgSGFzaFNldDxSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiA+IG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVzOwotCi0gICAgLy8gT25s
eSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0IGF0IGFueSBnaXZlbiB0
aW1lLgotICAgIHN0YXRpYyBJREJGYWN0b3J5QmFja2VuZEltcGwqIGlkYkZhY3RvcnlCYWNrZW5k
SW1wbDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAv
LyBJREJGYWN0b3J5QmFja2VuZEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCmlu
ZGV4IDk5NWU4M2QuLjk2MzQ0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAKQEAg
LTI4LDE1ICsyOCwyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwu
aCIKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaWYgVVNFKExFVkVMREIpCisj
aW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpjcmVhdGUoKTsKKyAgICAvLyBGSVhNRTogTmVlZCBhIGJldHRlciBwbGF0
Zm9ybSBhYnN0cmFjdGlvbiBoZXJlLCBidXQgdGhpcyBzdG9wIGdhcCB3aWxsIHdvcmsgZm9yIG5v
dy4KKyNpZiBVU0UoTEVWRUxEQikKKyAgICByZXR1cm4gSURCRmFjdG9yeUJhY2tlbmRMZXZlbERC
OjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWM1ZWQwYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCQmluZGlu
Z1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkN1
cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgot
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0j
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVk
ZSAiSURCVHJhY2luZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIK
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJv
b2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhXcml0ZXI6OnZlcmlmeUluZGV4S2V5
cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtleXMsIGNvbnN0IElEQktleSogcHJp
bWFyeUtleSwgU3RyaW5nKiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgY2FuQWRkS2V5cyA9
IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgYm9vbCBvayA9IGFkZGluZ0tleUFsbG93ZWQoYmFja2luZ1N0b3JlLCB0
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKG1faW5kZXhL
ZXlzKVtpXS5nZXQoKSwgcHJpbWFyeUtleSwgY2FuQWRkS2V5cyk7Ci0gICAgICAgIGlmICghb2sp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghY2FuQWRkS2V5cykgewot
ICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAgICAgICAqZXJyb3JNZXNz
YWdlID0gU3RyaW5nOjpmb3JtYXQoIlVuYWJsZSB0byBhZGQga2V5IHRvIGluZGV4ICclcyc6IGF0
IGxlYXN0IG9uZSBrZXkgZG9lcyBub3Qgc2F0aXNmeSB0aGUgdW5pcXVlbmVzcyByZXF1aXJlbWVu
dHMuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYW5BZGRLZXlzID0gdHJ1ZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRl
eFdyaXRlcjo6d3JpdGVJbmRleEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVu
dGlmaWVyJiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwg
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25zdAotewotICAgIGludDY0X3QgaW5kZXhJ
ZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5k
ZXhLZXlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUucHV0
SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcmVjb3JkSWRlbnRpZmllcik7Ci0g
ICAgICAgIC8vIFRoaXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHZlcmlmaWVkIGFzIGEgdmFs
aWQgd3JpdGUgZHVyaW5nIHZlcmlmeUluZGV4S2V5cy4KLSAgICAgICAgQVNTRVJUX1VOVVNFRChv
aywgb2spOwotICAgIH0KLX0KLQotYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRl
eFdyaXRlcjo6YWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwg
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29u
c3QKLXsKLSAgICBhbGxvd2VkID0gZmFsc2U7Ci0gICAgaWYgKCFtX2luZGV4TWV0YWRhdGEudW5p
cXVlKSB7Ci0gICAgICAgIGFsbG93ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBmb3VuZFByaW1hcnlLZXk7Ci0gICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwotICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5
LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFmb3VuZCB8fCAocHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXkt
PmlzRXF1YWwocHJpbWFyeUtleSkpKQotICAgICAgICBhbGxvd2VkID0gdHJ1ZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjptYWtlSW5kZXhX
cml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24s
IElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSwgYm9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
aW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
S2V5cz4mIGluZGV4S2V5cywgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0
ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2FnZSwgYm9vbCYgY29tcGxldGVkKQotewotICAgIEFTU0VS
VChpbmRleElkcy5zaXplKCkgPT0gaW5kZXhLZXlzLnNpemUoKSk7Ci0gICAgY29tcGxldGVkID0g
ZmFsc2U7Ci0KLSAgICBIYXNoTWFwPGludDY0X3QsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZTo6SW5kZXhLZXlzPiBpbmRleEtleU1hcDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4SWRzLnNpemUoKTsgKytpKQotICAgICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhJZHNbaV0s
IGluZGV4S2V5c1tpXSk7Ci0KLSAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLmluZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gb2JqZWN0U3RvcmUuaW5kZXhlcy5lbmQoKTsgKytpdCkgewotCi0gICAgICAgIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmIGluZGV4ID0gaXQtPnZhbHVlOwotCi0gICAgICAgIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzIGtleXMgPSBpbmRleEtleU1hcC5nZXQoaXQtPmtl
eSk7Ci0gICAgICAgIC8vIElmIHRoZSBvYmplY3RTdG9yZSBpcyB1c2luZyBhdXRvSW5jcmVtZW50
LCB0aGVuIGFueSBpbmRleGVzIHdpdGggYW4gaWRlbnRpY2FsIGtleVBhdGggbmVlZCB0byBhbHNv
IHVzZSB0aGUgcHJpbWFyeSAoZ2VuZXJhdGVkKSBrZXkgYXMgYSBrZXkuCi0gICAgICAgIGlmIChr
ZXlXYXNHZW5lcmF0ZWQgJiYgKGluZGV4LmtleVBhdGggPT0gb2JqZWN0U3RvcmUua2V5UGF0aCkp
Ci0gICAgICAgICAgICBrZXlzLmFwcGVuZChwcmltYXJ5S2V5KTsKLQotICAgICAgICBPd25QdHI8
SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVyKGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleCwg
a2V5cykpKTsKLSAgICAgICAgYm9vbCBjYW5BZGRLZXlzID0gZmFsc2U7Ci0gICAgICAgIGJvb2wg
YmFja2luZ1N0b3JlU3VjY2VzcyA9IGluZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMoKmJhY2tp
bmdTdG9yZSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2FuQWRkS2V5cywgcHJpbWFyeUtleS5nZXQo
KSwgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWNhbkFkZEtleXMpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpbmRleFdyaXRlcnMtPmFwcGVuZChpbmRleFdy
aXRlci5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIGNvbXBsZXRlZCA9IHRydWU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBjb25zdCBpbnQ2
NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGlu
dGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCi0gICAgaW50NjRfdCBjdXJyZW50
TnVtYmVyOwotICAgIGJvb2wgb2sgPSBiYWNraW5nU3RvcmUtPmdldEtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGN1cnJlbnROdW1iZXIpOwotICAgIGlmICghb2spIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciIpOwot
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7Ci0gICAgfQotICAgIGlmIChj
dXJyZW50TnVtYmVyIDwgMCB8fCBjdXJyZW50TnVtYmVyID4gbWF4R2VuZXJhdG9yVmFsdWUpCi0g
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKLQotICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcihjdXJyZW50TnVtYmVyKTsKLX0KLQotYm9vbCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjp1cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSoga2V5LCBib29sIGNoZWNrQ3VycmVudCkKLXsKLSAgICBBU1NFUlQoa2V5ICYm
IGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdT
dG9yZS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBzdGF0
aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGNiMTQzLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsX2gKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURC
TWV0YWRhdGEuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci1jbGFzcyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOwotc3RydWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGE7Ci0K
LS8vIEZJWE1FOiB0aGlzIG5hbWVzcGFjZSBpcyB0ZW1wb3JhcnkgdW50aWwgd2UgbW92ZSBpdHMg
Y29udGVudHMgb3V0IHRvIHRoZWlyIG93biBob21lLgotbmFtZXNwYWNlIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwgewotCi0gICAgY2xhc3MgSW5kZXhXcml0ZXIgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgZXhwbGljaXQgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSkKLSAgICAgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0g
ICAgICAgIHsgfQotCi0gICAgICAgIEluZGV4V3JpdGVyKGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0YWRhdGEsIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzJiBpbmRleEtleXMpCi0gICAgICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFk
YXRhKQotICAgICAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCi0gICAgICAgIHsgfQot
Ci0gICAgICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkq
IHByaW1hcnlLZXkgPSAwLCBTdHJpbmcqIGVycm9yTWVzc2FnZSA9IDApIGNvbnN0IFdBUk5fVU5V
U0VEX1JFVFVSTjsKLQotICAgICAgICB2b2lkIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYsIElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGFkZGluZ0tleUFsbG93
ZWQoSURCQmFja2luZ1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgYm9vbCYgYWxs
b3dlZCkgY29uc3QgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotICAgICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2U6OkluZGV4S2V5cyBtX2luZGV4S2V5czsKLSAgICB9OwotCi0gICAgYm9vbCBtYWtlSW5k
ZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIElEQkJhY2tp
bmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+
ID4qIGluZGV4V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkg
V0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwot
ICAgIGJvb2wgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50
KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjY2YyNmUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgiCi0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1
ZGUgIklEQkN1cnNvckJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURC
RGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJUcmFjaW5nLmgiCi0jaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6Y3JlYXRlKGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJh
c2UpCi17Ci0gICAgSGFzaFNldDxpbnQ2NF90PiBvYmplY3RTdG9yZUhhc2hTZXQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTdG9yZUlkcy5zaXplKCk7ICsraSkKLSAgICAgICAg
b2JqZWN0U3RvcmVIYXNoU2V0LmFkZChvYmplY3RTdG9yZUlkc1tpXSk7Ci0KLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaWQsIGNhbGxiYWNrcywgb2Jq
ZWN0U3RvcmVIYXNoU2V0LCBtb2RlLCBkYXRhYmFzZSkpOwotfQotCi1JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGludDY0X3QgaWQsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90
PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQotICAgIDogbV9pZChpZCkKLSAgICAsIG1fb2Jq
ZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJZHMpCi0gICAgLCBtX21vZGUobW9kZSkKLSAgICAsIG1f
c3RhdGUoVW51c2VkKQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQotICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAsIG1fdHJh
bnNhY3Rpb24oZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLmdldCgpKQotICAgICwgbV90YXNrVGlt
ZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKQotICAg
ICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQotewotICAgIC8vIFdlIHBhc3MgYSByZWZl
cmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgotICAgIHJlbGF4
QWRvcHRpb25SZXF1aXJlbWVudCgpOwotCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKLX0KLQotSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKQotewotICAgIC8vIEl0
IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50
aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KLSAgICBBU1NFUlQobV9zdGF0ZSA9
PSBGaW5pc2hlZCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1
bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdHlwZSwgUGFzc093
blB0cjxPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8T3BlcmF0aW9uPiBhYm9ydFRhc2spCi17
Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICh0eXBlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaykKLSAgICAg
ICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOwotICAgIGVsc2UKLSAgICAgICAgbV9wcmVlbXB0
aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKLQotICAgIGlmIChhYm9ydFRhc2spCi0gICAgICAg
IG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2spOwotCi0gICAgaWYgKG1fc3RhdGUg
PT0gVW51c2VkKQotICAgICAgICBzdGFydCgpOwotICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gUnVu
bmluZyAmJiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV90YXNrVGltZXIuc3Rh
cnRPbmVTaG90KDApOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0
KCkKLXsKLSAgICBhYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yICh1bmtub3duIGNhdXNlKSIpKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydChQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6YWJvcnQiKTsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYm9vbCB3YXNSdW5uaW5nID0gbV9zdGF0ZSA9PSBSdW5uaW5nOwot
Ci0gICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IG1heSBiZSByZWxlYXNl
ZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQotICAgIC8vIGFib3J0IHN0ZXBzIGJlbG93LiBXZSB0aGVy
ZWZvcmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxp
dmUgd2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKLSAg
ICBtX3Rhc2tUaW1lci5zdG9wKCk7Ci0KLSAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAgbV90
cmFuc2FjdGlvbi5yb2xsYmFjaygpOwotCi0gICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYg
YW55LgotICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
T3duUHRyPE9wZXJhdGlvbj4gdGFzayhtX2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKLSAg
ICAgICAgdGFzay0+cGVyZm9ybSgwKTsKLSAgICB9Ci0KLSAgICAvLyBCYWNraW5nIHN0b3JlIHJl
c291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0
IGNhbGxiYWNrcwotICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5
IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICAvLyBp
dHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRlciBpcyBjcml0aWNhbC4KLSAgICBjbG9zZU9w
ZW5DdXJzb3JzKCk7Ci0gICAgbV90cmFuc2FjdGlvbi5yZXNldCgpOwotCi0gICAgLy8gVHJhbnNh
Y3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQt
ZW5kIGlzIG5vdGlmaWVkLCBhcwotICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVu
YmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgotICAgIG1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7
Ci0gICAgQVNTRVJUKCFtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0
aXZlKHRoaXMpKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwot
Ci0gICAgaWYgKG1fY2FsbGJhY2tzKQotICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChtX2lk
LCBlcnJvcik7Ci0KLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRG
aXJlZCh0aGlzKTsKLQotICAgIG1fZGF0YWJhc2UgPSAwOwotfQotCi1ib29sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmlzVGFza1F1ZXVlRW1wdHkoKSBjb25zdAotewotICAgIHJldHVybiBt
X3ByZWVtcHRpdmVUYXNrUXVldWUuaXNFbXB0eSgpICYmIG1fdGFza1F1ZXVlLmlzRW1wdHkoKTsK
LX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpoYXNQZW5kaW5nVGFza3MoKSBj
b25zdAotewotICAgIHJldHVybiBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzIHx8ICFpc1Rhc2tR
dWV1ZUVtcHR5KCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6cmVnaXN0
ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKiBjdXJzb3IpCi17Ci0gICAgbV9vcGVu
Q3Vyc29ycy5hZGQoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Ojp1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCogY3Vyc29yKQotewot
ICAgIG1fb3BlbkN1cnNvcnMucmVtb3ZlKGN1cnNvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6cnVuKCkKLXsKLSAgICAvLyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhh
cyBzdGFydGVkIHRoaXMgdHJhbnNhY3Rpb24uIFNjaGVkdWxlIGEgdGltZXIKLSAgICAvLyB0byBw
cm9jZXNzIHRoZSBmaXJzdCB0YXNrLgotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGlu
ZyB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOwotICAgIEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3Rp
dmUoKSk7Ci0KLSAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c3RhcnQoKQotewotICAgIEFTU0VSVChtX3N0YXRlID09
IFVudXNlZCk7Ci0KLSAgICBtX3N0YXRlID0gU3RhcnRQZW5kaW5nOwotICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkU3RhcnRUcmFuc2FjdGlvbih0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvblN0YXJ0ZWQodGhpcyk7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKLXsKLSAgICBJREJfVFJBQ0UoIklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCIpOwotCi0gICAgLy8gSW4gbXVsdGlwcm9jZXNzIHBv
cnRzLCBmcm9udC1lbmQgbWF5IGhhdmUgcmVxdWVzdGVkIGEgY29tbWl0IGJ1dCBhbiBhYm9ydCBo
YXMgYWxyZWFkeQotICAgIC8vIGJlZW4gaW5pdGlhdGVkIGFzeW5jaHJvbm91c2x5IGJ5IHRoZSBi
YWNrLWVuZC4KLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkIHx8IG1fc3RhdGUgPT0gUnVubmluZyk7Ci0g
ICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLQotICAgIC8vIEZyb250LWVuZCBoYXMgcmVxdWVz
dGVkIGEgY29tbWl0LCBidXQgdGhlcmUgbWF5IGJlIHRhc2tzIGxpa2UgY3JlYXRlSW5kZXggd2hp
Y2gKLSAgICAvLyBhcmUgY29uc2lkZXJlZCBzeW5jaHJvbm91cyBieSB0aGUgZnJvbnQtZW5kIGJ1
dCBhcmUgcHJvY2Vzc2VkIGFzeW5jaHJvbm91c2x5LgotICAgIGlmIChoYXNQZW5kaW5nVGFza3Mo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMg
b2JqZWN0IG1heSBiZSByZWxlYXNlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZQotICAgIC8vIGNvbW1p
dCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5jZSB0byBrZWVw
IG91cnNlbHZlcwotICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1ldGhvZC4KLSAg
ICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBi
b29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOwotICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsK
LQotICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fdHJhbnNhY3Rpb24uY29tbWl0KCk7
Ci0KLSAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVz
dCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcwotICAgIC8vIGFyZSBmaXJlZCwg
YXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cg
dGhlIGJhY2tpbmcgc3RvcmUKLSAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBvcmRl
ciBpcyBjcml0aWNhbC4KLSAgICBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0gICAgbV90cmFuc2FjdGlv
bi5yZXNldCgpOwotCi0gICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQgYXMg
Y29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcwotICAgIC8vIHRo
ZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5n
IGNvbm5lY3Rpb25zLgotICAgIGlmICghdW51c2VkKQotICAgICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7Ci0KLSAgICBpZiAoY29tbWl0dGVk
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKG1faWQpOwotICAgICAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChtX2lkLCBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOwotICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLSAgICB9Ci0KLSAgICBtX2Rh
dGFiYXNlID0gMDsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGlt
ZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopCi17Ci0gICAgSURCX1RS
QUNFKCJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCIpOwotICAgIEFT
U0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKLQotICAgIGlmIChtX3N0YXRlID09IFN0YXJ0UGVu
ZGluZykgewotICAgICAgICBtX3RyYW5zYWN0aW9uLmJlZ2luKCk7Ci0gICAgICAgIG1fc3RhdGUg
PSBSdW5uaW5nOwotICAgIH0KLQotICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKLSAgICAvLyB0YXNrcy4g
VGFrZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCB0aGlzIG9iamVjdCBhbGl2ZSBzbyB0
aGF0Ci0gICAgLy8gdGhlIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9ucyBjYW4gYmUgY2hlY2tl
ZC4KLSAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJvdGVjdCgqdGhpcyk7Ci0K
LSAgICBUYXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPyAm
bV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwotICAgIHdoaWxlICghdGFza1F1
ZXVlLT5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewotICAgICAgICBBU1NFUlQo
bV9zdGF0ZSA9PSBSdW5uaW5nKTsKLSAgICAgICAgT3duUHRyPE9wZXJhdGlvbj4gdGFzayh0YXNr
UXVldWUtPnRha2VGaXJzdCgpKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybSh0aGlzKTsKLQotICAg
ICAgICAvLyBFdmVudCBpdHNlbGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1ZSBzaG91bGQgYmUgcHJv
Y2Vzc2VkIG5leHQuCi0gICAgICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVu
dHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwotICAgIH0KLQotICAg
IC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRhc2tzLCB3ZSBoYXZlbid0IGFscmVhZHkgY29t
bWl0dGVkL2Fib3J0ZWQsCi0gICAgLy8gYW5kIHRoZSBmcm9udC1lbmQgcmVxdWVzdGVkIGEgY29t
bWl0LCBpdCBpcyBub3cgc2FmZSB0byBkbyBzby4KLSAgICBpZiAoIWhhc1BlbmRpbmdUYXNrcygp
ICYmIG1fc3RhdGUgIT0gRmluaXNoZWQgJiYgbV9jb21taXRQZW5kaW5nKQotICAgICAgICBjb21t
aXQoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjbG9zZU9wZW5DdXJz
b3JzKCkKLXsKLSAgICBmb3IgKEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPjo6aXRlcmF0
b3IgaSA9IG1fb3BlbkN1cnNvcnMuYmVnaW4oKTsgaSAhPSBtX29wZW5DdXJzb3JzLmVuZCgpOyAr
K2kpCi0gICAgICAgICgqaSktPmNsb3NlKCk7Ci0gICAgbV9vcGVuQ3Vyc29ycy5jbGVhcigpOwot
fQotCi19OwotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MThmYTAuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGxfaAotI2RlZmluZSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAi
SURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0j
aW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDsKLWNsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOwotY2xhc3MgSURCRGF0
YWJhc2VDYWxsYmFja3M7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlLCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgp
OwotCi0gICAgdmlydHVhbCB2b2lkIGFib3J0KCk7Ci0gICAgdm9pZCBjb21taXQoKTsKLQotICAg
IGNsYXNzIE9wZXJhdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5PcGVyYXRp
b24oKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCopID0gMDsKLSAgICB9OwotCi0gICAgdm9pZCBhYm9ydChQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+KTsKLSAgICB2b2lkIHJ1bigpOwotICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICBjb25zdCBIYXNoU2V0
PGludDY0X3Q+JiBzY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KLSAg
ICB2b2lkIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPE9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0
cjxPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQotICAg
IHZvaWQgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUs
IFBhc3NPd25QdHI8T3BlcmF0aW9uPiwgUGFzc093blB0cjxPcGVyYXRpb24+IGFib3J0VGFzayA9
IG51bGxwdHIpOwotICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJ
bXBsKik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1w
bCopOwotICAgIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzKys7IH0KLSAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3Bl
bmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
ID49IDApOyB9Ci0gICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSB7IHJldHVybiAmbV90cmFuc2FjdGlvbjsgfQotICAgIGludDY0X3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBk
YXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KLQotcHJpdmF0ZToK
LSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsK
LQotICAgIGVudW0gU3RhdGUgewotICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0
YXNrcyB5ZXQuCi0gICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBi
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KLSAgICAgICAgUnVubmlu
ZywgLy8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlz
aGVkLgotICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgot
ICAgIH07Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0KLSAgICBib29sIGlzVGFza1F1ZXVlRW1wdHko
KSBjb25zdDsKLSAgICBib29sIGhhc1BlbmRpbmdUYXNrcygpIGNvbnN0OwotCi0gICAgdm9pZCB0
YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiopOwotICAgIHZv
aWQgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAgY29uc3QgaW50NjRfdCBtX2lkOwotICAgIGNv
bnN0IEhhc2hTZXQ8aW50NjRfdD4gbV9vYmplY3RTdG9yZUlkczsKLSAgICBjb25zdCBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSBtX21vZGU7Ci0KLSAgICBTdGF0ZSBtX3N0YXRlOwotICAgIGJv
b2wgbV9jb21taXRQZW5kaW5nOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7
Ci0KLSAgICB0eXBlZGVmIERlcXVlPE93blB0cjxPcGVyYXRpb24+ID4gVGFza1F1ZXVlOwotICAg
IFRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKLSAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1
ZXVlOwotICAgIFRhc2tRdWV1ZSBtX2Fib3J0VGFza1F1ZXVlOwotCi0gICAgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiBtX3RyYW5zYWN0aW9uOwotCi0gICAgLy8gRklYTUU6IGRlbGV0ZSB0
aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KLSAgICBUaW1lcjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKLSAgICBpbnQgbV9wZW5kaW5nUHJlZW1w
dGl2ZUV2ZW50czsKLQotICAgIEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPiBtX29wZW5D
dXJzb3JzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGE2ZmNkOGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpjcmVhdGUo
KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigp
KTsKLX0KLQotSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6SURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpCi17Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCkKLXsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpk
aWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlv
bikKLXsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7
Ci0gICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbik7Ci19Ci0K
LXZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQobV90cmFu
c2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLQotICAgIG1fcXVldWVkVHJhbnNhY3Rp
b25zLmFkZCh0cmFuc2FjdGlvbik7Ci0gICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRGaW5pc2hUcmFuc2FjdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLQotICAgIGlmIChtX3F1ZXVl
ZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKLSAgICAgICAgQVNTRVJUKCFt
X3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLSAgICAgICAgbV9x
dWV1ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLSAgICB9IGVsc2UgaWYgKG1f
c3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCi0gICAgICAgIG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotCi0gICAgbV90cmFuc2FjdGlv
bnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKLQotICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25z
KCk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi0vLyBWZXJpZmllcyBpbnRlcm5hbCBjb25zaXN0aWVu
Y3kgd2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCi1ib29sIElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I6OmlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQotewotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBpZiAobV9xdWV1
ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKQotICAgICAgICBmb3VuZCA9IHRy
dWU7Ci0gICAgaWYgKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
IHsKLSAgICAgICAgQVNTRVJUKCFmb3VuZCk7Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICB9
Ci0gICAgQVNTRVJUKGZvdW5kID09IG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9u
KSk7Ci0gICAgcmV0dXJuIGZvdW5kOwotfQotI2VuZGlmCi0KLXZvaWQgSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6cHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKQotewotICAgIGlmIChtX3F1
ZXVlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpIHx8ICgqbV9zdGFydGVkVHJhbnNhY3Rp
b25zLmJlZ2luKCkpLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFu
Z2UpOwotCi0gICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcXVldWVkVHJhbnNhY3Rpb25zLmJlZ2luKCk7Ci0gICAgd2hpbGUg
KGl0ICE9IG1fcXVldWVkVHJhbnNhY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uID0gKml0OwotICAgICAgICArK2l0OwotICAgICAg
ICBpZiAoY2FuUnVuVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pKSB7Ci0gICAgICAgICAgICBtX3F1
ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotICAgICAgICAgICAgbV9zdGFy
dGVkVHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7Ci0gICAgICAgICAgICB0cmFuc2FjdGlv
bi0+cnVuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGRvU2NvcGVzT3Zl
cmxhcChjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBzY29wZTEsIGNvbnN0IEhhc2hTZXQ8aW50NjRf
dD4mIHNjb3BlMikKLXsKLSAgICBmb3IgKEhhc2hTZXQ8aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gc2NvcGUxLmJlZ2luKCk7IGl0ICE9IHNjb3BlMS5lbmQoKTsgKytpdCkgewotICAgICAg
ICBpZiAoc2NvcGUyLmNvbnRhaW5zKCppdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I6OmNhblJ1blRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uKQotewotICAgIEFTU0VSVChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbikpOwotICAgIHN3aXRjaCAodHJhbnNhY3Rpb24tPm1vZGUoKSkgewotICAgIGNhc2UgSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2U6Ci0gICAgICAgIEFTU0VSVChtX3F1ZXVl
ZFRyYW5zYWN0aW9ucy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVChtX3N0YXJ0ZWRUcmFu
c2FjdGlvbnMuaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkV3JpdGU6Ci0gICAgICAgIGZvciAoSGFz
aFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9z
dGFydGVkVHJhbnNhY3Rpb25zLmJlZ2luKCk7IGl0ICE9IG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5l
bmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKCgqaXQpLT5tb2RlKCkgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvblJlYWRXcml0ZSAmJiBkb1Njb3Blc092ZXJsYXAodHJhbnNhY3Rpb24tPnNj
b3BlKCksICgqaXQpLT5zY29wZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yIChMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsg
Kml0ICE9IHRyYW5zYWN0aW9uOyArK2l0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXQgIT0gbV9x
dWV1ZWRUcmFuc2FjdGlvbnMuZW5kKCkpOwotICAgICAgICAgICAgaWYgKCgqaXQpLT5tb2RlKCkg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRXcml0ZSAmJiBkb1Njb3Blc092ZXJsYXAodHJh
bnNhY3Rpb24tPnNjb3BlKCksICgqaXQpLT5zY29wZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfTsKLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTRjZmZiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAorKysg
L2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3JfaAotI2RlZmluZSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDsKLWNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7Ci0KLS8vIFRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0
ZWQgaW4gdGhlIG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQuCi1jbGFzcyBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCk7Ci0KLSAgICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQg
YW5kIGZpbmlzaC4KLSAgICB2b2lkIGRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqKTsKLSAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOwotICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgaXNBY3RpdmUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcigpOwotCi0gICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5z
YWN0aW9ucygpOwotICAgIGJvb2wgY2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCopOwotCi0gICAgLy8gVGhpcyBpcyBqdXN0IGFuIGVmZmljaWVudCB3YXkgdG8ga2Vl
cCByZWZlcmVuY2VzIHRvIGFsbCB0cmFuc2FjdGlvbnMuCi0gICAgSGFzaE1hcDxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+ID4gbV90
cmFuc2FjdGlvbnM7Ci0gICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZlcmVudCBzdGF0ZXMgYXJl
IGdyb3VwZWQgYmVsb3cuCi0gICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCo+IG1fcXVldWVkVHJhbnNhY3Rpb25zOwotICAgIEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCo+IG1fc3RhcnRlZFRyYW5zYWN0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8g
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZl
bERCLmNwcAppbmRleCA0OGUwZDMxLi41MjUwNTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0
b3JlTGV2ZWxEQi5jcHAKQEAgLTI0LDkgKzI0LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlTGV2ZWxEQi5oIgogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQogCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIkhpc3RvZ3JhbVN1cHBvcnQuaCIKQEAgLTE5OTMsNCArMTk5Myw0IEBA
IHZvaWQgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjExNjAxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaApAQCAtMCwwICsxLDIyMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSURCQmFja2luZ1N0b3JlTGV2ZWxEQl9oCisjZGVmaW5lIElEQkJh
Y2tpbmdTdG9yZUxldmVsREJfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVT
RShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCTWV0YWRhdGEu
aCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExldmVsREJDb21wYXJhdG9yOworY2xhc3Mg
TGV2ZWxEQkRhdGFiYXNlOworY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOworY2xhc3MgSURCS2V5
OworY2xhc3MgSURCS2V5UmFuZ2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNoYXJl
ZEJ1ZmZlcjsKKworY2xhc3MgTGV2ZWxEQkZhY3RvcnkgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkxldmVsREJGYWN0b3J5KCkgeyB9CisgICAgdmlydHVhbCBQYXNzT3duUHRyPExldmVsREJEYXRh
YmFzZT4gb3BlbkxldmVsREIoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgTGV2ZWxEQkNv
bXBhcmF0b3IqKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlc3Ryb3lMZXZlbERCKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUpID0gMDsKK307CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZT4geworcHVibGljOgorICAgIGNsYXNzIFRyYW5z
YWN0aW9uOworCisgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2ZWxEQkZh
Y3RvcnkqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW5Jbk1l
bW9yeShTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuSW5NZW1vcnkoU2VjdXJpdHlPcmln
aW4qLCBjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7CisgICAgV2Vh
a1B0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0
b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXRE
YXRhYmFzZU5hbWVzKCk7CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiwgYm9vbCYgc3VjY2Vzcykg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBy
b3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgYm9vbCBnZXRPYmplY3RTdG9yZXMoaW50
NjRfdCBkYXRhYmFzZUlkLCBJREJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcCopIFdB
Uk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVPYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKworICAgIGNsYXNzIFJlY29yZElkZW50
aWZpZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRJZGVudGlmaWVyKTsK
KyAgICBwdWJsaWM6CisgICAgICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNoYXI+
JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1hcnlLZXkp
LCBtX3ZlcnNpb24odmVyc2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgpKTsgfQor
ICAgICAgICBSZWNvcmRJZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJzaW9uKC0x
KSB7IH0KKworICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICAgICAgdm9pZCByZXNldChjb25zdCBWZWN0b3I8Y2hh
cj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgeyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5
S2V5OyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0
b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQg
dGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2YgdGhlIGtleS4KKyAgICAgICAgaW50NjRf
dCBtX3ZlcnNpb247CisgICAgfTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRSZWNvcmQoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIHJlY29yZCkgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFJlY29yZElkZW50
aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGNsZWFyT2JqZWN0
U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBi
b29sIGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIm
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJyZW50TnVtYmVyKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hl
Y2tDdXJyZW50KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0
c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVu
dGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIsIGJvb2wmIGZvdW5kKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAg
dmlydHVhbCBib29sIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJl
Y29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29u
c3QgUmVjb3JkSWRlbnRpZmllciYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmLCBSZWZQdHI8SURCS2V5PiYgcHJpbWFyeUtleSkgV0FSTl9VTlVTRURf
UkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5
PiYgZm91bmRQcmltYXJ5S2V5LCBib29sJiBleGlzdHMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKwor
ICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgZW51bSBJdGVyYXRvclN0YXRlIHsKKyAgICAgICAgICAgIFJlYWR5ID0gMCwK
KyAgICAgICAgICAgIFNlZWsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgQ3Vyc29yT3B0
aW9ucyB7CisgICAgICAgICAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAgICAgICAgICBpbnQ2
NF90IG9iamVjdFN0b3JlSWQ7CisgICAgICAgICAgICBpbnQ2NF90IGluZGV4SWQ7CisgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gbG93S2V5OworICAgICAgICAgICAgYm9vbCBsb3dPcGVuOworICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7CisgICAgICAgICAgICBib29sIGhpZ2hPcGVu
OworICAgICAgICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICAgICAgYm9vbCB1bmlxdWU7Cisg
ICAgICAgIH07CisKKyAgICAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fY3VycmVudEtleTsgfQorICAgICAgICBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3Qg
SURCS2V5KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVrKTsKKyAgICAgICAgYm9vbCBhZHZhbmNl
KHVuc2lnbmVkIGxvbmcpOworICAgICAgICBib29sIGZpcnN0U2VlaygpOworCisgICAgICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IGNsb25lKCkgPSAwOworICAgICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5
OyB9CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29u
c3QgPSAwOworICAgICAgICB2aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZpZXImIHJlY29yZElk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KKyAgICAgICAg
dmlydHVhbCB+Q3Vyc29yKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJv
dygpID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ3Vyc29yKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisg
ICAgICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICAgICAsIG1f
Y3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgZXhwbGljaXQgQ3Vyc29yKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKiBvdGhlcik7
CisKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElEQktleSYp
ID0gMDsKKworICAgICAgICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OworICAgICAgICBib29s
IGhhdmVFbnRlcmVkUmFuZ2UoKSBjb25zdDsKKworICAgICAgICBMZXZlbERCVHJhbnNhY3Rpb24q
IG1fdHJhbnNhY3Rpb247CisgICAgICAgIGNvbnN0IEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRp
b25zOworI2lmIFVTRShMRVZFTERCKQorICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBt
X2l0ZXJhdG9yOworI2VuZGlmCisgICAgICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsK
KyAgICAgICAgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIG1fcmVjb3JkSWRlbnRp
ZmllcjsKKyAgICB9OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVj
dFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1
cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24pOworCisgICAgY2xhc3MgVHJhbnNhY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAg
ICAgZXhwbGljaXQgVHJhbnNhY3Rpb24oSURCQmFja2luZ1N0b3JlKik7CisgICAgICAgIHZvaWQg
YmVnaW4oKTsKKyAgICAgICAgYm9vbCBjb21taXQoKTsKKyAgICAgICAgdm9pZCByb2xsYmFjaygp
OworICAgICAgICB2b2lkIHJlc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNraW5n
U3RvcmUgPSAwOworI2lmIFVTRShMRVZFTERCKQorICAgICAgICAgICAgbV90cmFuc2FjdGlvbiA9
IDA7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAg
ICAgICB7CisjaWYgVVNFKExFVkVMREIpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisjZWxzZQor
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24pOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgSURCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyNpZiBVU0UoTEVW
RUxEQikKKyAgICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsK
KyNlbmRpZgorICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBJREJCYWNraW5nU3RvcmUoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25Q
dHI8TGV2ZWxEQkNvbXBhcmF0b3I+KTsKKworICAgIC8vIFNob3VsZCBvbmx5IHVzZWQgZm9yIG1v
Y2tpbmcuCisgICAgSURCQmFja2luZ1N0b3JlKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0
b3I+KTsKKworICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFy
eUtleSwgYm9vbCYgZm91bmQpOworICAgIGJvb2wgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhN
YXAqKSBXQVJOX1VOVVNFRF9SRVRVUk47CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworCisg
ICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsKKyAgICBPd25QdHI8TGV2ZWxEQkNvbXBh
cmF0b3I+IG1fY29tcGFyYXRvcjsKKyAgICBXZWFrUHRyRmFjdG9yeTxJREJCYWNraW5nU3RvcmU+
IG1fd2Vha0ZhY3Rvcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNlbmRpZiAvLyBJ
REJCYWNraW5nU3RvcmVMZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjNjdkNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
Q3Vyc29yQmFja2VuZExldmVsREIuY3BwCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRMZXZlbERCLmgiCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNpbmNsdWRlICJJ
REJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXJyb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklE
QktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6Q3Vyc29y
SXRlcmF0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6
Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kTGV2ZWxEQj4gY3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24oY3Vyc29yLCBrZXksIGNhbGxiYWNrcykpOwor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKik7Citwcml2YXRlOgorICAgIEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jdXJzb3Io
Y3Vyc29yKQorICAgICAgICAsIG1fa2V5KGtleSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qj4gbV9jdXJzb3I7CisgICAgUmVmUHRyPElEQktleT4gbV9rZXk7CisgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qjo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZExldmVsREI+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbihjdXJzb3IsIGNvdW50LCBjYWxsYmFja3Mp
KTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZExldmVsREI+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2N1cnNvcihj
dXJzb3IpCisgICAgICAgICwgbV9jb3VudChjb3VudCkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kTGV2
ZWxEQj4gbV9jdXJzb3I7CisgICAgdW5zaWduZWQgbG9uZyBtX2NvdW50OworICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgSURCQ3Vyc29yQmFja2VuZExl
dmVsREI6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQj4gY3Vyc29yLCBpbnQgbnVtYmVyVG9G
ZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24oY3Vy
c29yLCBudW1iZXJUb0ZldGNoLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBD
dXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRMZXZlbERCPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKKyAgICAgICAgLCBt
X251bWJlclRvRmV0Y2gobnVtYmVyVG9GZXRjaCkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qj4gbV9jdXJzb3I7CisgICAgaW50IG1fbnVtYmVyVG9GZXRjaDsKKyAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK0lEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpJREJD
dXJzb3JCYWNrZW5kTGV2ZWxEQihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBj
dXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorICAgIDogbV90YXNrVHlw
ZSh0YXNrVHlwZSkKKyAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQorICAgICwgbV9kYXRh
YmFzZSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSkKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24pCisgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAsIG1fY3Vy
c29yKGN1cnNvcikKKyAgICAsIG1fY2xvc2VkKGZhbHNlKQoreworICAgIG1fdHJhbnNhY3Rpb24t
PnJlZ2lzdGVyT3BlbkN1cnNvcih0aGlzKTsKK30KKworSURCQ3Vyc29yQmFja2VuZExldmVsREI6
On5JREJDdXJzb3JCYWNrZW5kTGV2ZWxEQigpCit7CisgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdp
c3Rlck9wZW5DdXJzb3IodGhpcyk7Cit9CisKKwordm9pZCBJREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBJREJfVFJB
Q0UoIklEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpjb250aW51ZSIpOworICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBtX3RyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2sobV90YXNrVHlwZSwgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywga2V5LCBjYWxsYmFja3MpKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kTGV2ZWxE
Qjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNv
ckJhY2tlbmRMZXZlbERCOjphZHZhbmNlIik7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhD
dXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgY291bnQsIGNhbGxiYWNrcykpOwor
fQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKQoreworICAgIElEQl9UUkFD
RSgiQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbiIpOworICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29y
IHx8ICFtX2N1cnNvci0+bV9jdXJzb3ItPmFkdmFuY2UobV9jb3VudCkpIHsKKyAgICAgICAgbV9j
dXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0
aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKG1fY3Vyc29yLT5rZXkoKSwgbV9jdXJzb3ItPnByaW1h
cnlLZXkoKSwgbV9jdXJzb3ItPnZhbHVlKCkpOworfQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRM
ZXZlbERCOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQiopCit7CisgICAgSURCX1RSQUNFKCJDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b24iKTsKKyAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNvciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29y
LT5jb250aW51ZUZ1bmN0aW9uKG1fa2V5LmdldCgpKSkgeworICAgICAgICBtX2N1cnNvci0+bV9j
dXJzb3IgPSAwOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNo
YXJlZEJ1ZmZlcio+KDApKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBt
X2N1cnNvci0+dmFsdWUoKSk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZExldmVsREI6OmRl
bGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2Vw
dGlvbkNvZGUmKQoreworICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZExldmVsREI6OmRl
bGV0ZSIpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblJlYWRPbmx5KTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0g
SURCS2V5UmFuZ2U6OmNyZWF0ZShtX2N1cnNvci0+cHJpbWFyeUtleSgpKTsKKyAgICBtX2RhdGFi
YXNlLT5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0b3JlSWQsIGtl
eVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNr
ZW5kTGV2ZWxEQjo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgSURC
X1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6cHJlZmV0Y2hDb250aW51ZSIpOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBtX3Ry
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2sobV90YXNrVHlwZSwgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRp
b25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBudW1iZXJUb0ZldGNoLCBjYWxsYmFja3MpKTsKK30K
Kwordm9pZCBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25P
cGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopCit7CisgICAg
SURCX1RSQUNFKCJDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbiIpOworCisgICAgVmVj
dG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRLZXlzOworICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5
PiA+IGZvdW5kUHJpbWFyeUtleXM7CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+ID4g
Zm91bmRWYWx1ZXM7CisKKyAgICBpZiAobV9jdXJzb3ItPm1fY3Vyc29yKQorICAgICAgICBtX2N1
cnNvci0+bV9zYXZlZEN1cnNvciA9IG1fY3Vyc29yLT5tX2N1cnNvci0+Y2xvbmUoKTsKKworICAg
IGNvbnN0IHNpemVfdCBtYXhTaXplRXN0aW1hdGUgPSAxMCAqIDEwMjQgKiAxMDI0OworICAgIHNp
emVfdCBzaXplRXN0aW1hdGUgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bWJl
clRvRmV0Y2g7ICsraSkgeworICAgICAgICBpZiAoIW1fY3Vyc29yLT5tX2N1cnNvciB8fCAhbV9j
dXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKSB7CisgICAgICAgICAgICBtX2N1
cnNvci0+bV9jdXJzb3IgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBmb3VuZEtleXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCkpOworICAgICAg
ICBmb3VuZFByaW1hcnlLZXlzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXko
KSk7CisKKyAgICAgICAgc3dpdGNoIChtX2N1cnNvci0+bV9jdXJzb3JUeXBlKSB7CisgICAgICAg
IGNhc2UgSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5OgorICAgICAgICAgICAgZm91bmRWYWx1ZXMu
YXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW5kZXhlZERCOjpDdXJzb3JLZXlBbmRWYWx1ZToKKyAgICAgICAgICAgIHNpemVF
c3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCktPnNpemUoKTsKKyAgICAgICAg
ICAgIGZvdW5kVmFsdWVzLmFwcGVuZChtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3It
Pm1fY3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7CisgICAgICAgIHNpemVFc3RpbWF0ZSAr
PSBtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7CisKKyAg
ICAgICAgaWYgKHNpemVFc3RpbWF0ZSA+IG1heFNpemVFc3RpbWF0ZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGlmICghZm91bmRLZXlzLnNpemUoKSkgeworICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRoUHJlZmV0
Y2goZm91bmRLZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVlcyk7Cit9CisKK3ZvaWQg
SURCQ3Vyc29yQmFja2VuZExldmVsREI6OnByZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVz
LCBpbnQpCit7CisgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6cHJlZmV0
Y2hSZXNldCIpOworICAgIG1fY3Vyc29yID0gbV9zYXZlZEN1cnNvcjsKKyAgICBtX3NhdmVkQ3Vy
c29yID0gMDsKKworICAgIGlmIChtX2Nsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X2N1cnNvcikgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRQcmVmZXRjaGVzOyAr
K2kpIHsKKyAgICAgICAgICAgIGJvb2wgb2sgPSBtX2N1cnNvci0+Y29udGludWVGdW5jdGlvbigp
OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIElEQkN1cnNvckJhY2tlbmRMZXZlbERCOjpjbG9zZSgpCit7CisgICAgSURCX1RS
QUNFKCJJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQjo6Y2xvc2UiKTsKKyAgICBtX2Nsb3NlZCA9IHRy
dWU7CisgICAgbV9jdXJzb3IuY2xlYXIoKTsKKyAgICBtX3NhdmVkQ3Vyc29yLmNsZWFyKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQ3Vyc29yQmFja2VuZExldmVsREIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmM3NzE5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJDdXJz
b3JCYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgSURC
Q3Vyc29yQmFja2VuZExldmVsREJfaAorI2RlZmluZSBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQl9o
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjsKK2NsYXNz
IElEQktleVJhbmdlOworCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQiA6IHB1YmxpYyBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNvckJhY2tl
bmRMZXZlbERCKGN1cnNvciwgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
OjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCkpOworICAgIH0KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
IGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5
cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkN1cnNv
ckJhY2tlbmRMZXZlbERCKGN1cnNvciwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIHRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZUlkKSk7CisgICAgfQorICAgIHZpcnR1YWwgfklEQkN1cnNvckJhY2tlbmRM
ZXZlbERCKCk7CisKKyAgICAvLyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlCisgICAgdmlydHVh
bCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHByZWZldGNoQ29udGludWUoaW50
IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50
IHVudXNlZFByZWZldGNoZXMpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJD
YWxsYmFjaygpIHsgfQorCisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fY3Vyc29yLT5rZXkoKTsgfQorICAgIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsgfQorICAgIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIChtX2N1cnNvclR5cGUgPT0g
SW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSA/IDAgOiBtX2N1cnNvci0+dmFsdWUoKTsgfQorICAg
IHZvaWQgY2xvc2UoKTsKKworcHJpdmF0ZToKKyAgICBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQihQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCKiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKworICAgIGNsYXNzIEN1cnNv
ckl0ZXJhdGlvbk9wZXJhdGlvbjsKKyAgICBjbGFzcyBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOwor
ICAgIGNsYXNzIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOworCisgICAgSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworICAgIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgY29uc3QgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZExldmVsREI+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI+IG1fdHJhbnNhY3Rpb247CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSWQ7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fY3Vy
c29yOyAvLyBNdXN0IGJlIGRlc3Ryb3llZCBiZWZvcmUgbV90cmFuc2FjdGlvbi4KKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IG1fc2F2ZWRDdXJzb3I7IC8vIE11c3QgYmUgZGVz
dHJveWVkIGJlZm9yZSBtX3RyYW5zYWN0aW9uLgorCisgICAgYm9vbCBtX2Nsb3NlZDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2VuZGlmIC8vIElEQkN1cnNvckJhY2tlbmRMZXZlbERC
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTlkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExl
dmVsREIuY3BwCkBAIC0wLDAgKzEsMTM4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmgiCisKKyNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmVMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZExldmVsREIuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5k
TGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvckxldmVsREIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihiYWNraW5nU3RvcmUsIG9iamVjdFN0b3Jl
TWV0YWRhdGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlTWV0YWRhdGEo
b2JqZWN0U3RvcmVNZXRhZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Cit9OworCitjbGFzcyBEZWxldGVPYmplY3RT
dG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVy
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOworICAg
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
Kik7Citwcml2YXRlOgorICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2lu
Z1N0b3JlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1ldGFk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBt
X2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fb2JqZWN0
U3RvcmVNZXRhZGF0YTsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZl
cnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oZGF0YWJhc2UsIHRy
YW5zYWN0aW9uSWQsIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiopOworcHJpdmF0ZToKKyAgICBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICAgICAg
OiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2Fj
dGlvbklkKQorICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICAgICAsIG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKKyAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2Fs
bGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQj4gbV9kYXRhYmFzZTsKKyAgICBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKKyAgICBpbnQ2
NF90IG1fdmVyc2lvbjsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAg
ICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7Cit9Owor
CitjbGFzcyBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFzZSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkKSk7CisgICAg
fQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIq
KTsKK3ByaXZhdGU6CisgICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX29iamVj
dFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IG1fZGF0YWJhc2U7CisgICAgY29uc3QgaW50NjRf
dCBtX29iamVjdFN0b3JlSWQ7Cit9OworCitjbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCPiBkYXRhYmFzZSwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6Cisg
ICAgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZExldmVsREI+IGRhdGFiYXNlLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBv
YmplY3RTdG9yZU1ldGFkYXRhKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAg
ICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTWV0YWRhdGEpCisgICAgewor
ICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBtX2RhdGFiYXNl
OworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZU1ldGFkYXRhOworfTsK
KworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6VmVyc2lvbkNoYW5nZUFib3J0T3Bl
cmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJl
dmlvdXNJbnRWZXJzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWZXJz
aW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIHByZXZpb3VzVmVyc2lvbiwgcHJldmlv
dXNJbnRWZXJzaW9uKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgVmVyc2lvbkNoYW5nZUFib3J0
T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2Us
IGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lv
bikKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fcHJldmlvdXNW
ZXJzaW9uKHByZXZpb3VzVmVyc2lvbikKKyAgICAgICAgLCBtX3ByZXZpb3VzSW50VmVyc2lvbihw
cmV2aW91c0ludFZlcnNpb24pCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCPiBtX2RhdGFiYXNlOworICAgIFN0cmluZyBtX3ByZXZpb3VzVmVyc2lv
bjsKKyAgICBpbnQ2NF90IG1fcHJldmlvdXNJbnRWZXJzaW9uOworfTsKKworY2xhc3MgQ3JlYXRl
SW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3Bl
cmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENyZWF0ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhN
ZXRhZGF0YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgOiBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9i
amVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisg
ICAgeworICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsKKworY2xhc3MgRGVsZXRlSW5kZXhP
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0
ZUluZGV4T3BlcmF0aW9uKGJhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0
YSkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIERlbGV0ZUluZGV4T3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICAgICAgOiBtX2JhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0
b3JlSWQpCisgICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgewor
ICAgIH0KKworICAgIGNvbnN0IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3Jl
OworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOworfTsKKworY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0
aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6
CisgICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI+IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4g
bV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25z
dCBpbnQ2NF90IG1faW5kZXhJZDsKK307CisKK2NsYXNzIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERC
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+
IGRhdGFiYXNlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0
ZUluZGV4QWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRh
dGEpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiopOworcHJpdmF0ZToKKyAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2UsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAgICAg
ICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmpl
Y3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4g
bV9kYXRhYmFzZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25z
dCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKK307CisKK2NsYXNzIEdldE9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRP
cGVyYXRpb24oYmFja2luZ1N0b3JlLCBtZXRhZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxiYWNrcykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAg
IEdldE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBj
b25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRl
eGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgICAg
ICwgbV9kYXRhYmFzZUlkKG1ldGFkYXRhLmlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChv
YmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1f
a2V5UGF0aChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmtleVBhdGgp
CisgICAgICAgICwgbV9hdXRvSW5jcmVtZW50KG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCkuYXV0b0luY3JlbWVudCkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdl
KQorICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQorICAgICAgICAsIG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIEFTU0VSVChtZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgICAgICBBU1NFUlQobWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5pZCA9PSBvYmplY3RTdG9yZUlkKTsKKyAgICB9
CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAg
ICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0
U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBJREJLZXlQ
YXRoIG1fa2V5UGF0aDsKKyAgICBjb25zdCBib29sIG1fYXV0b0luY3JlbWVudDsKKyAgICBjb25z
dCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3QgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKK307CisKK2NsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3Rv
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHV0T3BlcmF0aW9uKGJhY2tpbmdTdG9y
ZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNr
cywgaW5kZXhJZHMsIGluZGV4S2V5cykpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKik7Citwcml2YXRlOgorICAgIFB1dE9wZXJh
dGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJE
YXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzKQorICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBt
X2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0
b3JlKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9rZXkoa2V5KQorICAg
ICAgICAsIG1fcHV0TW9kZShwdXRNb2RlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKKyAgICAgICAgLCBtX2luZGV4SWRzKGluZGV4SWRzKQorICAgICAgICAsIG1faW5kZXhLZXlz
KGluZGV4S2V5cykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gbV9iYWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Cisg
ICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOworICAgIGNvbnN0
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fdmFsdWU7CisgICAgY29uc3QgUmVmUHRyPElEQktleT4g
bV9rZXk7CisgICAgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIG1f
cHV0TW9kZTsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAg
ICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9pbmRleElkczsKKyAgICBjb25zdCBWZWN0b3I8SURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IG1faW5kZXhLZXlzOworfTsKKwor
Y2xhc3MgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREI6Ok9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0aW9uPiBjcmVhdGUoc2l6ZV90IGlu
ZGV4Q291bnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbihpbmRleENvdW50KSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgU2V0SW5k
ZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQorICAgICAgICA6IG1faW5kZXhD
b3VudChpbmRleENvdW50KQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBzaXplX3QgbV9pbmRl
eENvdW50OworfTsKKworY2xhc3MgT3BlbkN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rp
b24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPcGVuQ3Vyc29yT3Bl
cmF0aW9uKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKik7Citwcml2YXRlOgorICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAg
IDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2Up
CisgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIG1fY3Vyc29yVHlw
ZShjdXJzb3JUeXBlKQorICAgICAgICAsIG1fdGFza1R5cGUodGFza1R5cGUpCisgICAgICAgICwg
bV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0
YWJhc2VJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBp
bnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBtX2tl
eVJhbmdlOworICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIG1fZGlyZWN0aW9u
OworICAgIGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBtX2N1cnNvclR5cGU7CisgICAgY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOworICAg
IGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKworY2xhc3MgQ291
bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6T3BlcmF0
aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ291bnRPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6
CisgICAgQ291bnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0
b3JlKQorICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQor
ICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2Fs
bGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBj
b25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJ
ZDsKKyAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgY29uc3Qg
UmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitjbGFzcyBEZWxldGVSYW5n
ZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRp
b24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREI6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlUmFu
Z2VPcGVyYXRpb24oYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXlS
YW5nZSwgY2FsbGJhY2tzKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKK3ByaXZhdGU6CisgICAgRGVsZXRlUmFuZ2VPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0
YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAg
ICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9i
YWNraW5nU3RvcmU7CisgICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBt
X2tleVJhbmdlOworICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwor
fTsKKworY2xhc3MgQ2xlYXJPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xlYXJPcGVyYXRpb24oYmFja2luZ1N0b3Jl
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKKyAgICB9CisgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiopOworcHJpdmF0
ZToKKyAgICBDbGVhck9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2JhY2tpbmdTdG9yZShi
YWNraW5nU3RvcmUpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisgICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9jYWxsYmFja3Mo
Y2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAg
ICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZExldmVs
REI6OlBlbmRpbmdPcGVuQ2FsbCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UGVu
ZGluZ09wZW5DYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGludDY0
X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBQZW5kaW5nT3BlbkNhbGwoY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNr
cywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbikpOworICAgIH0KKyAgICBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7IH0KKyAgICBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1f
ZGF0YWJhc2VDYWxsYmFja3M7IH0KKyAgICBpbnQ2NF90IHZlcnNpb24oKSB7IHJldHVybiBtX3Zl
cnNpb247IH0KKyAgICBpbnQ2NF90IHRyYW5zYWN0aW9uSWQoKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zYWN0aW9uSWQ7IH0KKworcHJpdmF0ZToKKyAgICBQZW5kaW5nT3BlbkNhbGwoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4gZGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJz
aW9uKQorICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICAgICAgLCBtX2RhdGFi
YXNlQ2FsbGJhY2tzKGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICAsIG1fdmVyc2lvbih2ZXJz
aW9uKQorICAgICAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQorICAgIHsKKyAg
ICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOworICAgIGludDY0X3QgbV92
ZXJzaW9uOworICAgIGNvbnN0IGludDY0X3QgbV90cmFuc2FjdGlvbklkOworfTsKKworY2xhc3Mg
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6UGVuZGluZ0RlbGV0ZUNhbGwgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitw
cml2YXRlOgorICAgIFBlbmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCitQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZExldmVsREI+IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQkZh
Y3RvcnlCYWNrZW5kTGV2ZWxEQiogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlm
aWVyKQoreworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBiYWNrZW5kID0g
YWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZExldmVsREIobmFtZSwgZGF0YWJhc2UsIGZh
Y3RvcnksIHVuaXF1ZUlkZW50aWZpZXIpKTsKKyAgICBpZiAoIWJhY2tlbmQtPm9wZW5JbnRlcm5h
bCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYmFja2VuZC5yZWxlYXNlKCk7Cit9
CisKK25hbWVzcGFjZSB7Citjb25zdCBjaGFyKiBOb1N0cmluZ1ZlcnNpb24gPSAiIjsKK30KKwor
SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6SURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQihjb25z
dCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBJREJGYWN0b3J5
QmFja2VuZExldmVsREIqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikK
KyAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAsIG1fbWV0YWRhdGEobmFt
ZSwgSW52YWxpZElkLCBOb1N0cmluZ1ZlcnNpb24sIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50
VmVyc2lvbiwgSW52YWxpZElkKQorICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIp
CisgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKKyAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cihJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQjo6Y3JlYXRlKCkpCisgICAgLCBtX2Ns
b3NpbmdDb25uZWN0aW9uKGZhbHNlKQoreworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5uYW1lLmlz
TnVsbCgpKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjphZGRPYmplY3RT
dG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgaW50NjRfdCBu
ZXdNYXhPYmplY3RTdG9yZUlkKQoreworICAgIEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmUuaWQpKTsKKyAgICBpZiAobmV3TWF4T2JqZWN0U3RvcmVJ
ZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJU
KG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA8IG5ld01heE9iamVjdFN0b3JlSWQpOworICAg
ICAgICBtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBuZXdNYXhPYmplY3RTdG9yZUlkOwor
ICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUuaWQsIG9i
amVjdFN0b3JlKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpyZW1vdmVP
YmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUKG1fbWV0YWRh
dGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBtX21ldGFkYXRh
Lm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7Cit9CisKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQjo6YWRkSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBpbmRleCwgaW50NjRfdCBuZXdNYXhJbmRleElkKQoreworICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Cisg
ICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0
U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5k
ZXhlcy5jb250YWlucyhpbmRleC5pZCkpOworICAgIG9iamVjdFN0b3JlLmluZGV4ZXMuc2V0KGlu
ZGV4LmlkLCBpbmRleCk7CisgICAgaWYgKG5ld01heEluZGV4SWQgIT0gSURCSW5kZXhNZXRhZGF0
YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZS5tYXhJbmRleElkIDwg
bmV3TWF4SW5kZXhJZCk7CisgICAgICAgIG9iamVjdFN0b3JlLm1heEluZGV4SWQgPSBuZXdNYXhJ
bmRleElkOworICAgIH0KKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3Rv
cmVJZCwgb2JqZWN0U3RvcmUpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
OnJlbW92ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQorewor
ICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlk
KSk7CisgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9y
ZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKKyAgICBvYmplY3RTdG9yZS5pbmRleGVzLnJl
bW92ZShpbmRleElkKTsKKyAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3Rv
cmVJZCwgb2JqZWN0U3RvcmUpOworfQorCitib29sIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6
Om9wZW5JbnRlcm5hbCgpCit7CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgYm9vbCBv
ayA9IG1fYmFja2luZ1N0b3JlLT5nZXRJREJEYXRhYmFzZU1ldGFEYXRhKG1fbWV0YWRhdGEubmFt
ZSwgJm1fbWV0YWRhdGEsIHN1Y2Nlc3MpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc3VjY2Vz
cyA9PSAobV9tZXRhZGF0YS5pZCAhPSBJbnZhbGlkSWQpLCAic3VjY2VzcyA9ICVzLCBtX2lkID0g
JWxsZCIsIHN1Y2Nlc3MgPyAidHJ1ZSIgOiAiZmFsc2UiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+
KG1fbWV0YWRhdGEuaWQpKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0
U3RvcmVzKG1fbWV0YWRhdGEuaWQsICZtX21ldGFkYXRhLm9iamVjdFN0b3Jlcyk7CisKKyAgICBy
ZXR1cm4gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEobV9tZXRhZGF0
YS5uYW1lLCBtX21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgbV9tZXRh
ZGF0YS5pZCk7Cit9CisKK0lEQkRhdGFiYXNlQmFja2VuZExldmVsREI6On5JREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCKCkKK3sKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OmJhY2tpbmdTdG9yZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYmFja2luZ1N0b3JlOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNy
ZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVs
REI6OmNyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAg
aWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAg
IEFTU0VSVCghbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkp
OworICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YShuYW1lLCBv
YmplY3RTdG9yZUlkLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U6Ok1pbmltdW1JbmRleElkKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2Jq
ZWN0U3RvcmVNZXRhZGF0YSksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZUlkKSk7CisKKyAgICBhZGRPYmplY3RTdG9yZShvYmplY3RTdG9y
ZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKK30KKwordm9pZCBDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlv
bikKK3sKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5pZCgpLCBtX29i
amVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLCBtX29iamVj
dFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1l
bnQpKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJp
bmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwg
bV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB0cmFu
c2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVPYmplY3RTdG9yZShp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBJREJf
VFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlIik7Cisg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKworICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdl
dChvYmplY3RTdG9yZUlkKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRl
T2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmVN
ZXRhZGF0YSksICBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
b2JqZWN0U3RvcmVNZXRhZGF0YSkpOworICAgIHJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3Jl
SWQpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNyZWF0ZUluZGV4KGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFj
a2VuZExldmVsREI6OmNyZWF0ZUluZGV4Iik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Cisg
ICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKKwor
ICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlk
KSk7CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVCghb2Jq
ZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CisgICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVs
dGlFbnRyeSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3Bl
cmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRh
dGEpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCkpOworCisgICAgYWRkSW5kZXgob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0
YSwgaW5kZXhJZCk7Cit9CisKK3ZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNF
KCJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOworICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmNyZWF0
ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCB0cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS0+aWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQs
IG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwgbV9pbmRleE1l
dGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7CisgICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHdoZW4g
dHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0Zjgo
KS5kYXRhKCkpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ3JlYXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0
cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24i
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOworICAgIG1f
ZGF0YWJhc2UtPnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKTsKK30KKwor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVJbmRleChpbnQ2NF90IHRyYW5z
YWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQoreworICAg
IElEQl9UUkFDRSgiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlSW5kZXgiKTsKKyAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFu
c2FjdGlvblZlcnNpb25DaGFuZ2UpOworCisgICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG9iamVjdFN0b3JlID0gbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0
b3JlSWQpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZGV4ZXMuY29udGFpbnMoaW5kZXhJ
ZCkpOworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBvYmplY3RT
dG9yZS5pbmRleGVzLmdldChpbmRleElkKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhNZXRhZGF0YSksIERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7CisKKyAgICByZW1vdmVJbmRleChv
YmplY3RTdG9yZUlkLCBpbmRleElkKTsKK30KKwordm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAg
ICBJREJfVFJBQ0UoIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7CisgICAgYm9vbCBvayA9IG1fYmFj
a2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCktPmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleE1ldGFkYXRhLmlkKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFJlZlB0cjxJREJEYXRh
YmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgZGVs
ZXRpbmcgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7
CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CisgICAgfQorfQorCit2b2lkIERl
bGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJEZWxldGVJbmRleEFib3J0T3Bl
cmF0aW9uIik7CisgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgIXRyYW5zYWN0aW9uKTsK
KyAgICBtX2RhdGFiYXNlLT5hZGRJbmRleChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0
YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjpjb21taXQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQoreworICAgIC8vIFRo
ZSBmcm9udGVuZCBzdWdnZXN0cyB0aGF0IHdlIGNvbW1pdCwgYnV0IHdlIG1heSBoYXZlIHByZXZp
b3VzbHkgaW5pdGlhdGVkIGFuIGFib3J0LCBhbmQgc28gaGF2ZSBkaXNwb3NlZCBvZiB0aGUgdHJh
bnNhY3Rpb24uIG9uQWJvcnQgaGFzIGFscmVhZHkgYmVlbiBkaXNwYXRjaGVkIHRvIHRoZSBmcm9u
dGVuZCwgc28gaXQgd2lsbCBmaW5kIG91dCBhYm91dCB0aGF0IGFzeW5jaHJvbm91c2x5LgorICAg
IGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKKyAgICAgICAgbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5jb21taXQoKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjphYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCit7Cisg
ICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlzIHVua25vd24sIHRoZW4gaXQgaGFzIGFscmVhZHkg
YmVlbiBhYm9ydGVkIGJ5IHRoZSBiYWNrZW5kIGJlZm9yZSB0aGlzIGNhbGwgc28gaXQgaXMgc2Fm
ZSB0byBpZ25vcmUgaXQuCisgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uSWQpKQorICAgICAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmFib3J0
KCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6YWJvcnQoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQoreworICAg
IC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJl
ZW4gYWJvcnRlZCBieSB0aGUgYmFja2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUg
dG8gaWdub3JlIGl0LgorICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bklkKSkKKyAgICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChl
cnJvcik7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Z2V0KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBib29sIGtleU9ubHksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjpnZXQiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKKyAgICBpZiAo
IXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKEdldE9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBtX21ldGFkYXRhLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwga2V5T25seSA/IEluZGV4ZWREQjo6Q3Vy
c29yS2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yS2V5QW5kVmFsdWUsIGNhbGxiYWNrcykpOwor
fQorCit2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkdldE9wZXJhdGlvbiIpOworCisg
ICAgUmVmUHRyPElEQktleT4ga2V5OworCisgICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgp
KQorICAgICAgICBrZXkgPSBtX2tleVJhbmdlLT5sb3dlcigpOworICAgIGVsc2UgeworICAgICAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAg
ICAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5
KTsKKyAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAg
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3Rv
cmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNv
ck5leHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fY3Vyc29yVHlwZSA9
PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpCisgICAgICAgICAgICAgICAgLy8gSW5kZXggVmFs
dWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2lu
ZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRy
aWV2YWwgT3BlcmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9i
YWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9r
ZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBr
ZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOworICAgIH0KKworICAgIFJlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXk7CisgICAgYm9vbCBvazsKKyAgICBpZiAobV9pbmRleElkID09IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICAvLyBPYmplY3QgU3RvcmUgUmV0cmll
dmFsIE9wZXJhdGlvbgorICAgICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CisgICAgICAgIG9rID0g
bV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICprZXksIHZhbHVlKTsKKyAg
ICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1fYXV0b0luY3JlbWVudCAmJiAhbV9rZXlQYXRoLmlzTnVsbCgpKSB7Cisg
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0
b3IodmFsdWUpLCBrZXksIG1fa2V5UGF0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRW
ZWN0b3IodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgfQorCisgICAgLy8gRnJvbSBo
ZXJlIHdlIGFyZSBkZWFsaW5nIG9ubHkgd2l0aCBpbmRleGVzLgorICAgIG9rID0gbV9iYWNraW5n
U3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgKmtl
eSwgcHJpbWFyeUtleSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFByaW1hcnlLZXlWaWFJbmRleC4iKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFwcmltYXJ5S2V5KSB7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
bV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgeworICAgICAgICAvLyBJ
bmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MocHJpbWFyeUtleS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICBWZWN0b3I8
Y2hhcj4gdmFsdWU7CisgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051bGwoKSkgeworICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBw
cmltYXJ5S2V5LCBtX2tleVBhdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOworfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OnB1dChpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCit7CisgICAgSURCX1RSQUNFKCJJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpwdXQiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHRyYW5z
YWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKKworICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKKworICAgIEFTU0VSVChvYmpl
Y3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKKworICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUs
IGlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNr
cywgaW5kZXhJZHMsIGluZGV4S2V5cykpOworfQorCit2b2lkIFB1dE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJf
VFJBQ0UoIlB1dE9wZXJhdGlvbiIpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7CisgICAgQVNTRVJUKG1faW5kZXhJZHMu
c2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7CisgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQg
PSBmYWxzZTsKKworICAgIFJlZlB0cjxJREJLZXk+IGtleTsKKyAgICBpZiAobV9wdXRNb2RlICE9
IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVXBkYXRlICYmIG1fb2JqZWN0U3Rv
cmUuYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gYXV0
b0luY0tleSA9IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OmdlbmVyYXRlS2V5KG1fYmFj
a2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsK
KyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAi
TWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CisgICAgfSBlbHNlCisg
ICAgICAgIGtleSA9IG1fa2V5OworCisgICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7
CisKKyAgICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmll
cjsKKyAgICBpZiAobV9wdXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6QWRk
T25seSkgeworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvb2wgb2sgPSBt
X2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5
LCAmcmVjb3JkSWRlbnRpZmllciwgZm91bmQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtl
eSBleGlzdGVuY2UuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmIChmb3VuZCkgeworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJL
ZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBWZWN0b3I8T3duUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREI6OkluZGV4V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKKyAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNlOworICAg
IGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6
Om1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rpb24sIG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUsIGtleSwga2V5V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRz
LCBtX2luZGV4S2V5cywgJmluZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJh
aW50cyk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG1fY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBk
YXRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFv
YmV5c0NvbnN0cmFpbnRzKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBl
cnJvck1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEJlZm9yZSB0
aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxi
YWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgorICAgIGJhY2tpbmdTdG9yZVN1
Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1f
dmFsdWUsICZyZWNvcmRJZGVudGlmaWVyKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3Mp
IHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFj
a2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6SW5kZXhXcml0
ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOworICAgICAgICBpbmRleFdy
aXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgKm1fYmFja2luZ1N0b3JlLCB0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29i
amVjdFN0b3JlLmlkKTsKKyAgICB9CisKKyAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRvSW5jcmVt
ZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVw
ZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKKyAgICAgICAgYm9v
bCBvayA9IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREI6OnVwZGF0ZUtleUdlbmVyYXRvciht
X2JhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5p
ZCwga2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKCFvaykgeworICAg
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGlu
ZyBrZXkgZ2VuZXJhdG9yLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJp
bWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mIGluZGV4S2V5cykKK3sKKyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2Vu
ZExldmVsREI6OnNldEluZGV4S2V5cyIpOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAg
IGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rp
b24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAg
ICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKKyAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBzdG9yZSA9IGJhY2tpbmdTdG9yZSgpOworICAgIC8vIEZJWE1FOiBU
aGlzIG1ldGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRl
IGlmIGl0J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCisgICAgSURCQmFja2luZ1N0b3Jl
OjpSZWNvcmRJZGVudGlmaWVyIHJlY29yZElkZW50aWZpZXI7CisgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgIGJvb2wgb2sgPSBzdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3Rv
cmVJZCwgKnByaW1hcnlLZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAgaWYgKCFv
aykgeworICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0
aW5nIGluZGV4IGtleXMuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZm91
bmQpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBz
dG9yZS4iKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPE93blB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRlcnM7CisgICAgU3RyaW5n
IGVycm9yTWVzc2FnZTsKKyAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKKyAgICBB
U1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwor
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7CisgICAgYm9vbCBiYWNr
aW5nU3RvcmVTdWNjZXNzID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6bWFrZUluZGV4
V3JpdGVycyh0cmFuc2FjdGlvbiwgc3RvcmUuZ2V0KCksIGlkKCksIG9iamVjdFN0b3JlTWV0YWRh
dGEsIHByaW1hcnlLZXksIGZhbHNlLCBpbmRleElkcywgaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJz
LCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9y
ZVN1Y2Nlc3MpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7CisgICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRl
ciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7CisgICAgICAgIGluZGV4V3Jp
dGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqc3RvcmUuZ2V0KCksIHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpZCgpLCBvYmplY3RTdG9yZUlkKTsK
KyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6c2V0SW5kZXhlc1Jl
YWR5KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZExldmVs
REI6OnNldEluZGV4ZXNSZWFkeSIpOworCisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAg
aWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLCBT
ZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZShpbmRleElkcy5zaXplKCkpKTsKK30KKwor
dm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJTZXRJbmRleGVzUmVh
ZHlPcGVyYXRpb24iKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhDb3VudDsg
KytpKQorICAgICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsK
K30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpvcGVuQ3Vyc29yKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
biBkaXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAgSURCX1RSQUNFKCJJREJEYXRhYmFzZUJh
Y2tlbmRMZXZlbERCOjpvcGVuQ3Vyc29yIik7CisgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Cisg
ICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUs
IGlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGtleU9u
bHkgPyBJbmRleGVkREI6OkN1cnNvcktleU9ubHkgOiBJbmRleGVkREI6OkN1cnNvcktleUFuZFZh
bHVlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgT3BlbkN1cnNvck9wZXJhdGlv
bjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sK
KyAgICBJREJfVFJBQ0UoIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKKworICAgIC8vIFRoZSBmcm9u
dGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFuc2FjdGlvbgor
ICAgIC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4ndCBoYXBwZW4g
YW55IGVhcmxpZXIKKyAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc3dpdGNoIHRvIGVh
cmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQorICAgIC8vIGluZGV4ZXMgYXJlIGJlaW5nIGNyZWF0
ZWQgaW4gYSByb3csIHdpdGggcHV0KCkncyBpbiBiZXR3ZWVuLgorICAgIGlmIChtX3Rhc2tUeXBl
ID09IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2spCisgICAgICAg
IHRyYW5zYWN0aW9uLT5hZGRQcmVlbXB0aXZlRXZlbnQoKTsKKworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgIGlmIChtX2luZGV4SWQg
PT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAgIEFTU0VSVChtX2N1cnNv
clR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsKKyAgICAgICAgYmFja2luZ1N0b3Jl
Q3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3Jl
SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBBU1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1h
bFRhc2spOworICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5
T25seSkKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5v
cGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0
KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFja2luZ1N0b3Jl
Q3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1f
aW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAgIH0KKworICAgIGlm
ICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
c3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0
aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlPihtX3Rhc2tUeXBl
KSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRMZXZlbERCPiBjdXJzb3IgPSBJREJDdXJz
b3JCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQoKSwgbV9jdXJz
b3JUeXBlLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24sIG1fb2JqZWN0U3RvcmVJZCk7CisgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFy
eUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExl
dmVsREI6OmNvdW50KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIElEQl9UUkFDRSgiSURCRGF0
YWJhc2VCYWNrZW5kTGV2ZWxEQjo6Y291bnQiKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsK
KyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOworICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soQ291bnRPcGVyYXRpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9y
ZSwgaWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwor
fQorCit2b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiQ291bnRPcGVyYXRpb24iKTsK
KyAgICB1aW50MzJfdCBjb3VudCA9IDA7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBiYWNraW5nU3RvcmVDdXJzb3I7CisKKyAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCkKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNr
aW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgZWxzZQorICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5l
eHQpOworICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIG1fY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoY291bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG8gewor
ICAgICAgICArK2NvdW50OworICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGlu
dWVGdW5jdGlvbigwKSk7CisKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKK30K
Kwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVSYW5nZShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCit7CisgICAg
SURCX1RSQUNFKCJJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpkZWxldGVSYW5nZSIpOworICAg
IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWQpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uUmVhZE9ubHkpOworCisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhEZWxldGVS
YW5nZU9wZXJhdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLCBpZCgpLCBvYmplY3RTdG9yZUlk
LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Cit9CisKK3ZvaWQgRGVsZXRlUmFuZ2VPcGVyYXRpb246
OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7Cisg
ICAgSURCX1RSQUNFKCJEZWxldGVSYW5nZU9wZXJhdGlvbiIpOworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9w
ZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4
ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgeworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVSZWNvcmQodHJh
bnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSkpIHsKKyAg
ICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGRlbGV0aW5nIGRh
dGEgaW4gcmFuZ2UiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkp
OworICAgIH0KKworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRMZXZlbERCOjpjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNsZWFyIik7CisgICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JZCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25SZWFkT25seSk7CisKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENsZWFyT3Bl
cmF0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUsIGlkKCksIG9iamVjdFN0b3JlSWQsIGNhbGxi
YWNrcykpOworfQorCit2b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIElEQl9UUkFDRSgiT2JqZWN0U3Rv
cmVDbGVhck9wZXJhdGlvbiIpOworICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0
U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJ
ZCwgbV9vYmplY3RTdG9yZUlkKSkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IkVycm9yIGNsZWFyaW5nIG9iamVjdCBzdG9yZSIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNh
Y3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwor
ICAgIGJvb2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLT5p
ZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOworICAgIGlmICghb2spIHsKKyAgICAgICAg
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRl
cm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChl
cnJvcik7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiog
dHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIik7
CisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gbV9kYXRhYmFzZS0+aWQoKTsKKyAgICBpbnQ2NF90
IG9sZFZlcnNpb24gPSBtX2RhdGFiYXNlLT5tX21ldGFkYXRhLmludFZlcnNpb247CisgICAgQVNT
RVJUKG1fdmVyc2lvbiA+IG9sZFZlcnNpb24pOworICAgIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEu
aW50VmVyc2lvbiA9IG1fdmVyc2lvbjsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm1fYmFja2luZ1N0
b3JlLT51cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24odHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50VmVy
c2lvbikpIHsKKyAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJF
cnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ugd2hlbiB1cGRhdGluZyB2ZXJzaW9u
LiIpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7CisgICAgICAgIHRyYW5z
YWN0aW9uLT5hYm9ydChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJU
KCFtX2RhdGFiYXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3Blbik7CisgICAgbV9kYXRhYmFzZS0+
bV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gPSBQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShtX2NhbGxi
YWNrcywgbV9kYXRhYmFzZUNhbGxiYWNrcywgbV90cmFuc2FjdGlvbklkLCBtX3ZlcnNpb24pOwor
ICAgIG1fY2FsbGJhY2tzLT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgbV9kYXRhYmFzZSwg
bV9kYXRhYmFzZS0+bWV0YWRhdGEoKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQjo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQj4gcHJwVHJhbnNhY3Rpb24pCit7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREI+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5z
YWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpIHsK
KyAgICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOworICAg
ICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKKyAg
ICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rpb25GaW5p
c2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHBycFRyYW5zYWN0
aW9uKQoreworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiB0cmFuc2Fj
dGlvbiA9IHBycFRyYW5zYWN0aW9uOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlu
cyh0cmFuc2FjdGlvbi0+aWQoKSkpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX3RyYW5zYWN0aW9u
cy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOworICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgp
ID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKSB7CisgICAgICAgIEFTU0VS
VCh0cmFuc2FjdGlvbi5nZXQoKSA9PSBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24u
Z2V0KCkpOworICAgICAgICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uY2xlYXIo
KTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6dHJhbnNhY3Rp
b25GaW5pc2hlZEFuZEFib3J0RmlyZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCPiBwcnBUcmFuc2FjdGlvbikKK3sKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBwcnBUcmFuc2FjdGlvbjsKKyAgICBpZiAodHJhbnNh
Y3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uVmVyc2lvbkNoYW5nZSkgewor
ICAgICAgICAvLyBJZiB0aGlzIHdhcyBhbiBvcGVuLXdpdGgtdmVyc2lvbiBjYWxsLCB0aGVyZSB3
aWxsIGJlIGEgInNlY29uZAorICAgICAgICAvLyBoYWxmIiBvcGVuIGNhbGwgd2FpdGluZyBmb3Ig
dXMgaW4gcHJvY2Vzc1BlbmRpbmdDYWxscy4KKyAgICAgICAgLy8gRklYTUU6IFdoZW4gd2Ugbm8g
bG9uZ2VyIHN1cHBvcnQgc2V0VmVyc2lvbiwgYXNzZXJ0IHN1Y2ggYSB0aGluZy4KKyAgICAgICAg
aWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVmVyc2lvbiBjaGFuZ2UgdHJhbnNh
Y3Rpb24gd2FzIGFib3J0ZWQgaW4gdXBncmFkZW5lZWRlZCBldmVudCBoYW5kbGVyLiIpKTsKKyAg
ICAgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLnJlbGVhc2UoKTsKKyAgICAgICAgfQor
ICAgICAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFi
YXNlQmFja2VuZExldmVsREI6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJwVHJhbnNhY3Rpb24pCit7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uID0g
cHJwVHJhbnNhY3Rpb247CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpCisgICAgICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMo
KTsKK30KKworc2l6ZV90IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNvbm5lY3Rpb25Db3Vu
dCgpCit7CisgICAgLy8gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHBlbmRpbmcgb3BlbiBjYWxscywg
YXMgdGhvc2Ugc2hvdWxkIG5vdCBibG9jayB2ZXJzaW9uIGNoYW5nZXMgYW5kIGRlbGV0ZXMuCisg
ICAgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuc2l6ZSgpOworfQorCit2b2lkIElEQkRh
dGFiYXNlQmFja2VuZExldmVsREI6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQoreworICAgIGlmICht
X3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgeworICAgICAgICBBU1NFUlQobV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW4tPnZlcnNpb24oKSA9PSBtX21ldGFkYXRhLmludFZlcnNpb24pOworICAgICAgICBB
U1NFUlQobV9tZXRhZGF0YS5pZCAhPSBJbnZhbGlkSWQpOworICAgICAgICBtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgp
KTsKKyAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4ucmVsZWFzZSgpOworICAgICAgICAv
LyBGYWxsIHRocm91Z2ggd2hlbiBjb21wbGV0ZSwgYXMgcGVuZGluZyBkZWxldGVzIG1heSBiZSAo
cGFydGlhbGx5KSB1bmJsb2NrZWQuCisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2hl
Y2sgaXMgb25seSBhbiBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIHF1ZXVlLWNodXJuIGFuZAorICAg
IC8vIG5vdCBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzOyBkZWxldGVEYXRhYmFzZSBhbmQgb3Bl
bkNvbm5lY3Rpb24gd2lsbAorICAgIC8vIHJlcXVldWUgdGhlaXIgY2FsbHMgaWYgdGhpcyBjb25k
aXRpb24gaXMgdHJ1ZS4KKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1w
dHkoKSAmJiBpc0RlbGV0ZURhdGFiYXNlQmxvY2tlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
d2hpbGUgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRy
PFBlbmRpbmdEZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IG1fcGVuZGluZ0RlbGV0ZUNh
bGxzLnRha2VGaXJzdCgpOworICAgICAgICBkZWxldGVEYXRhYmFzZUZpbmFsKHBlbmRpbmdEZWxl
dGVDYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorICAgIC8vIGRlbGV0ZURhdGFiYXNlRmluYWwg
c2hvdWxkIG5ldmVyIHJlLXF1ZXVlIGNhbGxzLgorICAgIEFTU0VSVChtX3BlbmRpbmdEZWxldGVD
YWxscy5pc0VtcHR5KCkpOworCisgICAgLy8gVGhpcyBjaGVjayBpcyBhbHNvIG5vdCByZWFsbHkg
bmVlZGVkLCBvcGVuQ29ubmVjdGlvbiB3b3VsZCBqdXN0IHJlcXVldWUgaXRzIGNhbGxzLgorICAg
IGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIE9wZW4gY2FsbHMgY2FuIGJlIHJlcXVldWVkIGlmIGFuIG9wZW4gY2FsbCBzdGFy
dGVkIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uCisgICAgRGVxdWU8T3duUHRyPFBlbmRp
bmdPcGVuQ2FsbD4gPiBwZW5kaW5nT3BlbkNhbGxzOworICAgIG1fcGVuZGluZ09wZW5DYWxscy5z
d2FwKHBlbmRpbmdPcGVuQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGluZ09wZW5DYWxscy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgT3duUHRyPFBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxs
ID0gcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlbkNvbm5lY3Rpb24o
cGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSwgcGVuZGluZ09wZW5DYWxsLT5kYXRhYmFzZUNh
bGxiYWNrcygpLCBwZW5kaW5nT3BlbkNhbGwtPnRyYW5zYWN0aW9uSWQoKSwgcGVuZGluZ09wZW5D
YWxsLT52ZXJzaW9uKCkpOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZl
bERCOjpjcmVhdGVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBv
YmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkKK3sKKyAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCOjpjcmVhdGUodHJhbnNhY3Rpb25JZCwgY2FsbGJhY2tzLCBvYmplY3RTdG9yZUlk
cywgc3RhdGljX2Nhc3Q8SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU+KG1vZGUpLCB0aGlzKTsK
KyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKKyAg
ICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb25JZCwgdHJhbnNhY3Rpb24uZ2V0KCkpOwor
fQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6Om9wZW5Db25uZWN0aW9uKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgdmVyc2lvbikKK3sKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUuZ2V0KCkpOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VD
YWxsYmFja3M7CisKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBt
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgbV9wZW5kaW5nT3Bl
bkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9tZXRhZGF0YS5pZCA9PSBJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8g
VGhlIGRhdGFiYXNlIHdhcyBkZWxldGVkIHRoZW4gaW1tZWRpYXRlbHkgcmUtb3BlbmVkOyBvcGVu
SW50ZXJuYWwoKSByZWNyZWF0ZXMgaXQgaW4gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgICAgIGlm
IChvcGVuSW50ZXJuYWwoKSkKKyAgICAgICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmludFZlcnNp
b24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICAgICAgICAgIFJlZlB0cjxJREJEYXRh
YmFzZUVycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkludGVy
bmFsIGVycm9yIG9wZW5pbmcgZGF0YWJhc2Ugd2l0aCBubyB2ZXJzaW9uIHNwZWNpZmllZC4iOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1h
dCgiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBkYXRhYmFzZSB3aXRoIHZlcnNpb24gJWxsZCIsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4odmVyc2lvbikpOworICAgICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCBtZXNzYWdlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBXZSBpbmZlciB0aGF0IHRoZSBkYXRhYmFzZSBkaWRuJ3QgZXhpc3QgZnJv
bSBpdHMgbGFjayBvZiBlaXRoZXIgdHlwZSBvZiB2ZXJzaW9uLgorICAgIGJvb2wgaXNOZXdEYXRh
YmFzZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBOb1N0cmluZ1ZlcnNpb24gJiYgbV9tZXRhZGF0
YS5pbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbjsKKworICAg
IGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKSB7
CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGNvbW1lbnRzIHdhcyByZWxhdGVkIHRvIENocm9taXVt
IGNvZGUuIEl0IG1heSBiZSBpbmNvcnJlY3QKKyAgICAgICAgLy8gRm9yIHVuaXQgdGVzdHMgb25s
eSAtIHNraXAgdXBncmFkZSBzdGVwcy4gQ2FsbGluZyBmcm9tIHNjcmlwdCB3aXRoIERlZmF1bHRJ
bnRWZXJzaW9uIHRocm93cyBleGNlcHRpb24uCisgICAgICAgIEFTU0VSVChpc05ld0RhdGFiYXNl
KTsKKyAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3Mp
OworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh2ZXJzaW9uID09IElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok5vSW50VmVyc2lvbikgeworICAgICAgICBpZiAoIWlzTmV3RGF0YWJhc2UpIHsK
KyAgICAgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKFJlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4oZGF0YWJhc2VDYWxsYmFja3MpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKHRoaXMsIHRoaXMtPm1ldGFkYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIC8vIFNwZWMgc2F5czogSWYgbm8gdmVyc2lvbiBpcyBzcGVjaWZp
ZWQgYW5kIG5vIGRhdGFiYXNlIGV4aXN0cywgc2V0IGRhdGFiYXNlIHZlcnNpb24gdG8gMS4KKyAg
ICAgICAgdmVyc2lvbiA9IDE7CisgICAgfQorCisgICAgaWYgKHZlcnNpb24gPiBtX21ldGFkYXRh
LmludFZlcnNpb24pIHsKKyAgICAgICAgcnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNh
bGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh2ZXJzaW9uIDwgbV9tZXRhZGF0YS5pbnRWZXJz
aW9uKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlZlcnNpb25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIlRo
ZSByZXF1ZXN0ZWQgdmVyc2lvbiAoJWxsZCkgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJz
aW9uICglbGxkKS4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZlcnNpb24pLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KG1fbWV0YWRhdGEuaW50VmVyc2lvbikpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgQVNTRVJUKHZlcnNpb24gPT0gbV9tZXRhZGF0YS5pbnRWZXJzaW9uKTsKKyAg
ICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7CisgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IHBycERhdGFiYXNlQ2FsbGJhY2tzLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQs
IGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKK3sKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJhY2tzOworICAgIEFTU0VSVChj
YWxsYmFja3MpOworICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2Fs
bGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgIC8vIEZyb250IGVuZCBlbnN1cmVzIHRo
ZSBldmVudCBpcyBub3QgZmlyZWQgYXQgY29ubmVjdGlvbnMgdGhhdCBoYXZlIGNsb3NlUGVuZGlu
ZyBzZXQuCisgICAgICAgIGlmICgqaXQgIT0gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgICAgICAg
ICAoKml0KS0+b25WZXJzaW9uQ2hhbmdlKG1fbWV0YWRhdGEuaW50VmVyc2lvbiwgcmVxdWVzdGVk
VmVyc2lvbik7CisgICAgfQorICAgIC8vIFRoZSBzcGVjIGRpY3RhdGVzIHdlIHdhaXQgdW50aWwg
YWxsIHRoZSB2ZXJzaW9uIGNoYW5nZSBldmVudHMgYXJlCisgICAgLy8gZGVsaXZlcmVkIGFuZCB0
aGVuIGNoZWNrIG1fZGF0YWJhc2VDYWxsYmFja3MuZW1wdHkoKSBiZWZvcmUgcHJvY2VlZGluZwor
ICAgIC8vIG9yIGZpcmluZyBhIGJsb2NrZWQgZXZlbnQsIGJ1dCBpbnN0ZWFkIHdlIHNob3VsZCBi
ZSBjb25zaXN0ZW50IHdpdGggaG93CisgICAgLy8gdGhlIG9sZCBzZXRWZXJzaW9uIChpbmNvcnJl
Y3RseSkgZGlkIGl0LgorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGNhbGwgdG8gb25CbG9ja2Vk
IGFuZCBpbnN0ZWFkIHdhaXQgdW50aWwgdGhlIGZyb250ZW5kCisgICAgLy8gdGVsbHMgdXMgdGhh
dCBhbGwgdGhlIGJsb2NrZWQgZXZlbnRzIGhhdmUgYmVlbiBkZWxpdmVyZWQuIFNlZQorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAorICAgIGlmIChj
b25uZWN0aW9uQ291bnQoKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQobV9tZXRhZGF0
YS5pbnRWZXJzaW9uKTsKKyAgICAvLyBGSVhNRTogQWRkIHRlc3QgZm9yIG1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi4KKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uIHx8IGNvbm5lY3Rpb25Db3VudCgpKSB7CisgICAgICAgIG1fcGVuZGluZ09wZW5DYWxs
cy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxi
YWNrcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOworICAgIGNyZWF0
ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmplY3RTdG9y
ZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOworICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkKTsKKworICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3Rl
ZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBWZXJzaW9uQ2hhbmdlQWJv
cnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEu
aW50VmVyc2lvbikpOworCisgICAgQVNTRVJUKCFtX3BlbmRpbmdTZWNvbmRIYWxmT3Blbik7Cisg
ICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOworfQorCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIGlmIChpc0RlbGV0ZURhdGFiYXNlQmxvY2tl
ZCgpKSB7CisgICAgICAgIGZvciAoRGF0YWJhc2VDYWxsYmFja3NTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigpOyBpdCAhPSBtX2RhdGFiYXNlQ2Fs
bGJhY2tzU2V0LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAvLyBGcm9udCBlbmQgZW5zdXJl
cyB0aGUgZXZlbnQgaXMgbm90IGZpcmVkIGF0IGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBjbG9zZVBl
bmRpbmcgc2V0LgorICAgICAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZShtX21ldGFkYXRh
LmludFZlcnNpb24sIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7CisgICAgICAg
IH0KKyAgICAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9w
ZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCisgICAgICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMg
YXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgICAgIGNhbGxiYWNr
cy0+b25CbG9ja2VkKG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CisgICAgICAgIG1fcGVuZGluZ0Rl
bGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcy5yZWxl
YXNlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZWxldGVEYXRhYmFzZUZpbmFs
KGNhbGxiYWNrcy5yZWxlYXNlKCkpOworfQorCitib29sIElEQkRhdGFiYXNlQmFja2VuZExldmVs
REI6OmlzRGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkKK3sKKyAgICByZXR1cm4gY29ubmVjdGlvbkNv
dW50KCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQjo6ZGVsZXRlRGF0YWJh
c2VGaW5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQoreworICAgIEFTU0VS
VCghaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3Jl
KTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShtX21ldGFkYXRhLm5h
bWUpKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGRl
bGV0aW5nIGRhdGFiYXNlLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX21ldGFk
YXRhLnZlcnNpb24gPSBOb1N0cmluZ1ZlcnNpb247CisgICAgbV9tZXRhZGF0YS5pZCA9IEludmFs
aWRJZDsKKyAgICBtX21ldGFkYXRhLmludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb247CisgICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY2xlYXIoKTsKKyAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcygpOworfQorCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZExldmVs
REI6OmNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykK
K3sKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKKyAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5jb250YWlucyhjYWxsYmFj
a3MpKTsKKworICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQucmVtb3ZlKGNhbGxiYWNrcyk7Cisg
ICAgaWYgKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuICYmIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVu
LT5kYXRhYmFzZUNhbGxiYWNrcygpID09IGNhbGxiYWNrcykgeworICAgICAgICBtX3BlbmRpbmdT
ZWNvbmRIYWxmT3Blbi0+Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yLCAiVGhlIGNvbm5lY3Rpb24gd2Fz
IGNsb3NlZC4iKSk7CisgICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLnJlbGVhc2UoKTsK
KyAgICB9CisKKyAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkgPiAxKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBwcm9jZXNzUGVuZGluZ0NhbGxzIGFsbG93cyB0aGUgaW5zcGVjdG9yIHRvIHBy
b2Nlc3MgYSBwZW5kaW5nIG9wZW4gY2FsbAorICAgIC8vIGFuZCBjYWxsIGNsb3NlLCByZWVudGVy
aW5nIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI6OmNsb3NlLiBUaGVuIHRoZQorICAgIC8vIGJh
Y2tlbmQgd291bGQgYmUgcmVtb3ZlZCBib3RoIGJ5IHRoZSBpbnNwZWN0b3IgY2xvc2luZyBpdHMg
Y29ubmVjdGlvbiwgYW5kCisgICAgLy8gYnkgdGhlIGNvbm5lY3Rpb24gdGhhdCBmaXJzdCBjYWxs
ZWQgY2xvc2UuCisgICAgLy8gVG8gYXZvaWQgdGhhdCBzaXR1YXRpb24sIGRvbid0IHByb2NlZWQg
aW4gY2FzZSBvZiByZWVudHJhbmN5LgorICAgIGlmIChtX2Nsb3NpbmdDb25uZWN0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IGNsb3NpbmdDb25uZWN0aW9u
KG1fY2xvc2luZ0Nvbm5lY3Rpb24sIHRydWUpOworICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsK
KworICAgIC8vIEZJWE1FOiBBZGQgYSB0ZXN0IGZvciB0aGUgbV9wZW5kaW5nT3BlbkNhbGxzIGNh
c2VzIGJlbG93LgorICAgIGlmICghY29ubmVjdGlvbkNvdW50KCkgJiYgIW1fcGVuZGluZ09wZW5D
YWxscy5zaXplKCkgJiYgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLnNpemUoKSkgeworICAgICAgICBU
cmFuc2FjdGlvbk1hcCB0cmFuc2FjdGlvbnMobV90cmFuc2FjdGlvbnMpOworICAgICAgICBSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkNvbm5lY3Rpb24gaXMgY2xvc2luZy4i
KTsKKyAgICAgICAgZm9yIChUcmFuc2FjdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3I6OlZhbHVlcyBp
dCA9IHRyYW5zYWN0aW9ucy52YWx1ZXMoKS5iZWdpbigpLCBlbmQgPSB0cmFuc2FjdGlvbnMudmFs
dWVzKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICgqaXQpLT5hYm9ydChl
cnJvcik7CisKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAg
ICAgICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKKworICAgICAgICAvLyBUaGlzIGNoZWNrIHNo
b3VsZCBvbmx5IGJlIGZhbHNlIGluIHVuaXQgdGVzdHMuCisgICAgICAgIEFTU0VSVChtX2ZhY3Rv
cnkpOworICAgICAgICBpZiAobV9mYWN0b3J5KQorICAgICAgICAgICAgbV9mYWN0b3J5LT5yZW1v
dmVJREJEYXRhYmFzZUJhY2tlbmQobV9pZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJfVFJBQ0UoIkNyZWF0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb24iKTsKKyAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJh
bnNhY3Rpb24pOworICAgIG1fZGF0YWJhc2UtPnJlbW92ZU9iamVjdFN0b3JlKG1fb2JqZWN0U3Rv
cmVJZCk7Cit9CisKK3ZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBJREJf
VFJBQ0UoIkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOworICAgIG1fZGF0YWJhc2UtPmFkZE9iamVj
dFN0b3JlKG1fb2JqZWN0U3RvcmVNZXRhZGF0YSwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52
YWxpZElkKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpWZXJzaW9uQ2hh
bmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiog
dHJhbnNhY3Rpb24pCit7CisgICAgSURCX1RSQUNFKCJWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b24iKTsKKyAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCAhdHJhbnNhY3Rpb24pOworICAg
IG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEudmVyc2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOworICAg
IG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9u
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRGF0YWJhc2VCYWNrZW5k
TGV2ZWxEQi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OGY2NjQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkRhdGFiYXNlQmFja2VuZExldmVsREIuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQl9oCisjZGVmaW5lIElEQkRhdGFiYXNlQmFj
a2VuZExldmVsREJfaAorCisjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURC
TWV0YWRhdGEuaCIKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZTsKK2NsYXNzIElEQkRhdGFiYXNl
OworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOworY2xhc3MgSURCVHJhbnNhY3Rpb25C
YWNrZW5kTGV2ZWxEQjsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOwor
CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCIDogcHVibGljIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0
b3JlKiBkYXRhYmFzZSwgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKiwgY29uc3QgU3RyaW5nJiB1
bmlxdWVJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERC
KCk7CisKKyAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkgY29u
c3Q7CisKKyAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAwOworICAgIGludDY0
X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9CisgICAgdm9pZCBhZGRPYmpl
Y3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgaW50NjRfdCBuZXdNYXhPYmpl
Y3RTdG9yZUlkKTsKKyAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7CisgICAgdm9pZCBhZGRJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QkluZGV4TWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heEluZGV4SWQpOworICAgIHZvaWQgcmVtb3Zl
SW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworCisgICAgdm9p
ZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgdmVyc2lv
bik7CisgICAgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwor
ICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9tZXRhZGF0YTsgfQorCisgICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlCisgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0
U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29t
bWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0
X3QgdHJhbnNhY3Rpb25JZCk7CisgICAgdmlydHVhbCB2b2lkIGFib3J0KGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUluZGV4KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpOworCisgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIqIHRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNo
ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPik7CisgICAgdm9pZCB0
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI+KTsKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9y
dEZpcmVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4pOworCisgICAg
dmlydHVhbCB2b2lkIGdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgYm9vbCBrZXlP
bmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
aW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldEluZGV4ZXNSZWFkeShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcykgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwg
SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVy
KTsKKworICAgIGJvb2wgb3BlbkludGVybmFsKCk7CisgICAgdm9pZCBydW5JbnRWZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3Rl
ZFZlcnNpb24pOworICAgIHNpemVfdCBjb25uZWN0aW9uQ291bnQoKTsKKyAgICB2b2lkIHByb2Nl
c3NQZW5kaW5nQ2FsbHMoKTsKKworICAgIGJvb2wgaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKTsK
KyAgICB2b2lkIGRlbGV0ZURhdGFiYXNlRmluYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
KworICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VPcGVyYXRpb247CisKKyAgICAvLyBXaGVuIGEgInZl
cnNpb25jaGFuZ2UiIHRyYW5zYWN0aW9uIGFib3J0cywgdGhlc2UgcmVzdG9yZSB0aGUgYmFjay1l
bmQgb2JqZWN0IGhpZXJhcmNoeS4KKyAgICBjbGFzcyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b247CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBJ
REJEYXRhYmFzZU1ldGFkYXRhIG1fbWV0YWRhdGE7CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OworICAgIC8vIFRoaXMgbWlnaHQgbm90IG5lZWQgdG8gYmUgYSBSZWZQdHIgc2luY2UgdGhlIGZh
Y3RvcnkncyBsaWZldGltZSBpcyB0aGF0IG9mIHRoZSBwYWdlIGdyb3VwLCBidXQgaXQncyBiZXR0
ZXIgdG8gYmUgY29uc2Vydml0aXZlIHRoYW4gc29ycnkuCisgICAgUmVmUHRyPElEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQj4gbV9mYWN0b3J5OworCisgICAgT3duUHRyPElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3JMZXZlbERCPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKj4gVHJhbnNhY3Rpb25NYXA7CisgICAgVHJhbnNhY3Rpb25NYXAgbV90cmFuc2Fj
dGlvbnM7CisKKyAgICBjbGFzcyBQZW5kaW5nT3BlbkNhbGw7CisgICAgRGVxdWU8T3duUHRyPFBl
bmRpbmdPcGVuQ2FsbD4gPiBtX3BlbmRpbmdPcGVuQ2FsbHM7CisgICAgT3duUHRyPFBlbmRpbmdP
cGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW47CisKKyAgICBjbGFzcyBQZW5kaW5nRGVs
ZXRlQ2FsbDsKKyAgICBEZXF1ZTxPd25QdHI8UGVuZGluZ0RlbGV0ZUNhbGw+ID4gbV9wZW5kaW5n
RGVsZXRlQ2FsbHM7CisKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gPiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKKyAgICBEYXRhYmFzZUNhbGxiYWNr
c1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OworCisgICAgYm9vbCBtX2Nsb3NpbmdDb25uZWN0
aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURCRGF0YWJhc2VC
YWNrZW5kTGV2ZWxEQl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzODEwNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCLmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZExldmVsREIuaCIKKworI2luY2x1ZGUgIkRP
TVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
KworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBNPgorc3RhdGlj
IHZvaWQgY2xlYW5XZWFrTWFwKEhhc2hNYXA8SywgV2Vha1B0cjxNPiA+JiBtYXApCit7CisgICAg
SGFzaE1hcDxLLCBXZWFrUHRyPE0+ID4gb3RoZXI7CisgICAgb3RoZXIuc3dhcChtYXApOworCisg
ICAgdHlwZW5hbWUgSGFzaE1hcDxLLCBXZWFrUHRyPE0+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBvdGhlci5iZWdpbigpOworICAgIHdoaWxlIChpdGVyICE9IG90aGVyLmVuZCgpKSB7CisgICAg
ICAgIGlmIChpdGVyLT52YWx1ZS5nZXQoKSkKKyAgICAgICAgICAgIG1hcC5zZXQoaXRlci0+a2V5
LCBpdGVyLT52YWx1ZSk7CisgICAgICAgICsraXRlcjsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJp
bmcgY29tcHV0ZUZpbGVJZGVudGlmaWVyKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikK
K3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBsZXZlbERCRmlsZVN1ZmZpeFtdID0gIkAxIjsKKyAg
ICByZXR1cm4gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgbGV2ZWxEQkZp
bGVTdWZmaXg7Cit9CisKK3N0YXRpYyBTdHJpbmcgY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBuYW1lLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCit7CisgICAg
cmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbikgKyBuYW1lOworfQor
CitJREJGYWN0b3J5QmFja2VuZExldmVsREI6OklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQigpCit7
Cit9CisKK0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6fklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
QigpCit7Cit9CisKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpyZW1vdmVJREJEYXRh
YmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQoreworICAgIEFTU0VS
VChtX2RhdGFiYXNlQmFja2VuZE1hcC5jb250YWlucyh1bmlxdWVJZGVudGlmaWVyKSk7CisgICAg
bV9kYXRhYmFzZUJhY2tlbmRNYXAucmVtb3ZlKHVuaXF1ZUlkZW50aWZpZXIpOworfQorCit2b2lk
IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6Z2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0
eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVj
dG9yeSkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6Z2V0RGF0
YWJhc2VOYW1lcyIpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgIGlm
ICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLndlYmtpdEdldERh
dGFiYXNlTmFtZXMuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXMgPSBiYWNraW5nU3RvcmUtPmdldERhdGFiYXNl
TmFtZXMoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZv
dW5kTmFtZXMuYmVnaW4oKTsgaXQgIT0gZm91bmROYW1lcy5lbmQoKTsgKytpdCkKKyAgICAgICAg
ZGF0YWJhc2VOYW1lcy0+YXBwZW5kKCppdCk7CisKKyAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyhk
YXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3Jp
Z2luLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5
KQoreworICAgIElEQl9UUkFDRSgiSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRh
YmFzZSIpOworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1
ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworCisgICAgSURCRGF0YWJh
c2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5p
cXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgp
KSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMgdG8gdGhlIGRhdGFi
YXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCisgICAgICAgIC8vIGRhdGFiYXNlLgorICAgICAgICBp
dC0+dmFsdWUtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9u
ZSBvbiBhbm90aGVyIHRocmVhZC4KKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsK
KyAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
ICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9yIGluZGV4ZWREQi5kZWxl
dGVEYXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kTGV2ZWxEQj4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQjo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgdGhpcywgdW5pcXVl
SWRlbnRpZmllcik7CisgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkgeworICAgICAgICBtX2RhdGFi
YXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgp
KTsKKyAgICAgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwor
ICAgICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Cisg
ICAgfSBlbHNlCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGNyZWF0aW5nIGRhdGFiYXNlIGJhY2tlbmQgZm9yIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZS4i
KSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZExl
dmVsREI6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3sKKyAgICBjb25zdCBTdHJp
bmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4u
Z2V0KCkpOworICAgIGNvbnN0IGJvb2wgb3BlbkluTWVtb3J5ID0gZGF0YURpcmVjdG9yeS5pc0Vt
cHR5KCk7CisKKyAgICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2lu
Z1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZpZXIpOworICAgIGlmIChpdDIgIT0gbV9iYWNraW5n
U3RvcmVNYXAuZW5kKCkgJiYgaXQyLT52YWx1ZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGl0Mi0+
dmFsdWUuZ2V0KCk7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7
CisgICAgaWYgKG9wZW5Jbk1lbW9yeSkKKyAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2lu
Z1N0b3JlOjpvcGVuSW5NZW1vcnkoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGZpbGVJZGVudGlmaWVy
KTsKKyAgICBlbHNlCisgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3Bl
bihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIpOwor
CisgICAgaWYgKGJhY2tpbmdTdG9yZSkgeworICAgICAgICBjbGVhbldlYWtNYXAobV9iYWNraW5n
U3RvcmVNYXApOworICAgICAgICBtX2JhY2tpbmdTdG9yZU1hcC5zZXQoZmlsZUlkZW50aWZpZXIs
IGJhY2tpbmdTdG9yZS0+Y3JlYXRlV2Vha1B0cigpKTsKKyAgICAgICAgLy8gSWYgYW4gaW4tbWVt
b3J5IGRhdGFiYXNlLCBiaW5kIGxpZmV0aW1lIHRvIHRoaXMgZmFjdG9yeSBpbnN0YW5jZS4KKyAg
ICAgICAgaWYgKG9wZW5Jbk1lbW9yeSkKKyAgICAgICAgICAgIG1fc2Vzc2lvbk9ubHlCYWNraW5n
U3RvcmVzLmFkZChiYWNraW5nU3RvcmUpOworCisgICAgICAgIC8vIEFsbCBiYWNraW5nIHN0b3Jl
cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0b3J5IHNob3VsZCBiZSBvZiB0aGUgc2FtZSB0eXBl
LgorICAgICAgICBBU1NFUlQobV9zZXNzaW9uT25seUJhY2tpbmdTdG9yZXMuaXNFbXB0eSgpIHx8
IG9wZW5Jbk1lbW9yeSk7CisKKyAgICAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50NjRfdCB2ZXJzaW9uLCBpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQjo6b3BlbiIpOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVl
SWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2lu
LmdldCgpKTsKKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCPiBkYXRhYmFz
ZUJhY2tlbmQ7CisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0
YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ID09IG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXJlY3RvcnkpOworICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Igb3BlbmluZyBiYWNraW5nIHN0b3Jl
IGZvciBpbmRleGVkREIub3Blbi4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCOjpj
cmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsK
KyAgICAgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGNyZWF0aW5nIGRhdGFiYXNlIGJhY2tlbmQgZm9yIGluZGV4ZWRkYi5vcGVuLiIpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBkYXRh
YmFzZUJhY2tlbmQgPSBpdC0+dmFsdWU7CisKKyAgICBkYXRhYmFzZUJhY2tlbmQtPm9wZW5Db25u
ZWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNp
b24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2Vu
ZExldmVsREIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmQ5MTBmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
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
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgSURC
RmFjdG9yeUJhY2tlbmRMZXZlbERCX2gKKyNkZWZpbmUgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERC
X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2lu
Y2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgi
CisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CisKK2NsYXNzIElEQkJhY2tpbmdTdG9yZTsK
K2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZExldmVsREI7CisKK2NsYXNzIElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQiA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJGYWN0b3J5QmFja2VuZExl
dmVsREIoKSk7CisgICAgfQorICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQigp
OworCisgICAgLy8gTm90aWZpY2F0aW9ucyBmcm9tIHdlYWsgcG9pbnRlcnMuCisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50
aWZpZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIG9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CisKK3Byb3RlY3RlZDoKKyAgICBJREJGYWN0b3J5QmFja2VuZExldmVsREIo
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0
b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwor
Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCPiA+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKKyAgICBJREJEYXRhYmFz
ZUJhY2tlbmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBXZWFrUHRyPElEQkJhY2tpbmdTdG9yZT4gPiBJREJCYWNraW5nU3RvcmVNYXA7Cisg
ICAgSURCQmFja2luZ1N0b3JlTWFwIG1fYmFja2luZ1N0b3JlTWFwOworCisgICAgSGFzaFNldDxS
ZWZQdHI8SURCQmFja2luZ1N0b3JlPiA+IG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVzOworCisg
ICAgLy8gT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGZhY3Rvcnkgc2hvdWxkIGV4aXN0IGF0IGFu
eSBnaXZlbiB0aW1lLgorICAgIHN0YXRpYyBJREJGYWN0b3J5QmFja2VuZExldmVsREIqIGlkYkZh
Y3RvcnlCYWNrZW5kSW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2VuZGlmIC8v
IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAppbmRl
eCA4OGUwZTBiLi4wNGU0MjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAgLTI2LDgg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5n
LmgiCiAKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJJ
REJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCkBAIC0xNTIyLDcgKzE1MjEsNyBAQCBp
bnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6OmluZGV4SWQoKSBjb25zdAogfQogCiAvLyBGSVhNRTog
V2UgbmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1cCBvYmplY3Qgc3RvcmUgaWRzLCBiZWNhdXNlIGEg
bWFwcGluZwotLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kSW1wbC4gQ2FuIHRo
ZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJh
c2VCYWNrZW5kTGV2ZWxEQi4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPwogLy8g
Q2FuIHdlIHJlbW92ZSB0aGlzPwogY29uc3QgY2hhciogT2JqZWN0U3RvcmVOYW1lc0tleTo6ZGVj
b2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVOYW1l
c0tleSogcmVzdWx0KQogewpAQCAtMTgwNSw1ICsxODA0LDQgQEAgUGFzc1JlZlB0cjxJREJLZXk+
IEluZGV4RGF0YUtleTo6cHJpbWFyeUtleSgpIGNvbnN0CiB9IC8vIG5hbWVzcGFjZSBJREJMZXZl
bERCQ29kaW5nCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBVU0UoTEVWRUxE
QikKLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCmlu
ZGV4IDU2MTk3ZjYuLmFkMjJmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCkBAIC0yNiw4ICsy
Niw3IEBACiAjaWZuZGVmIElEQkxldmVsREJDb2RpbmdfaAogI2RlZmluZSBJREJMZXZlbERCQ29k
aW5nX2gKIAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKIAogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0yODIsNyArMjgxLDcg
QEAgcHJpdmF0ZToKIGNsYXNzIE9iamVjdFN0b3JlTmFtZXNLZXkgewogcHVibGljOgogICAgIC8v
IEZJWE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJl
Y2F1c2UgYSBtYXBwaW5nCi0gICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC4gQ2FuIHRoZSBtYXBwaW5nIGJlY29tZSB1bnJlbGlhYmxlPworICAgIC8vIGlzIGtlcHQg
aW4gdGhlIElEQkRhdGFiYXNlQmFja2VuZExldmVsREIuIENhbiB0aGUgbWFwcGluZyBiZWNvbWUg
dW5yZWxpYWJsZT8KICAgICAvLyBDYW4gd2UgcmVtb3ZlIHRoaXM/CiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVj
dFN0b3JlTmFtZXNLZXkqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUo
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7CkBAIC0z
NjMsNyArMzYyLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gVVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQogCiAjZW5k
aWYgLy8gSURCTGV2ZWxEQkNvZGluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRMZXZlbERCLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDEw
ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcApAQCAtMCwwICsxLDE0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJh
Y2tlbmRMZXZlbERCLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExF
VkVMREIpCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisjaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgorI2luY2x1
ZGUgIklEQkN1cnNvckJhY2tlbmRMZXZlbERCLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNr
ZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVk
ZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQjo6SW5kZXhX
cml0ZXI6OnZlcmlmeUluZGV4S2V5cyhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGJvb2wmIGNhbkFkZEtl
eXMsIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgU3RyaW5nKiBlcnJvck1lc3NhZ2UpIGNvbnN0
Cit7CisgICAgY2FuQWRkS2V5cyA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYm9vbCBvayA9IGFkZGluZ0tleUFs
bG93ZWQoYmFja2luZ1N0b3JlLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwgKG1faW5kZXhLZXlzKVtpXS5nZXQoKSwgcHJpbWFyeUtleSwgY2FuQWRkS2V5
cyk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghY2FuQWRkS2V5cykgeworICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICAg
ICAgICAgICAgICAqZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlVuYWJsZSB0byBhZGQg
a2V5IHRvIGluZGV4ICclcyc6IGF0IGxlYXN0IG9uZSBrZXkgZG9lcyBub3Qgc2F0aXNmeSB0aGUg
dW5pcXVlbmVzcyByZXF1aXJlbWVudHMuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YW5BZGRLZXlzID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlcjo6d3JpdGVJbmRleEtleXMoY29uc3QgSURC
QmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyLCBJREJCYWNr
aW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBjb25z
dAoreworICAgIGludDY0X3QgaW5kZXhJZCA9IG1faW5kZXhNZXRhZGF0YS5pZDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1faW5kZXhLZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGJv
b2wgb2sgPSBiYWNraW5nU3RvcmUucHV0SW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqKG1faW5kZXhLZXlzKVtpXS5nZXQo
KSwgcmVjb3JkSWRlbnRpZmllcik7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGhhdmUgYWxyZWFk
eSBiZWVuIHZlcmlmaWVkIGFzIGEgdmFsaWQgd3JpdGUgZHVyaW5nIHZlcmlmeUluZGV4S2V5cy4K
KyAgICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOworICAgIH0KK30KKworYm9vbCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRMZXZlbERCOjpJbmRleFdyaXRlcjo6YWRkaW5nS2V5QWxsb3dlZChJREJC
YWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSogcHJp
bWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29uc3QKK3sKKyAgICBhbGxvd2VkID0gZmFsc2U7Cisg
ICAgaWYgKCFtX2luZGV4TWV0YWRhdGEudW5pcXVlKSB7CisgICAgICAgIGFsbG93ZWQgPSB0cnVl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCS2V5PiBmb3Vu
ZFByaW1hcnlLZXk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgIGJvb2wgb2sgPSBiYWNr
aW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsKKyAg
ICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFmb3VuZCB8fCAocHJp
bWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpKQorICAgICAg
ICBhbGxvd2VkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJPYmplY3RT
dG9yZUJhY2tlbmRMZXZlbERCOjptYWtlSW5kZXhXcml0ZXJzKFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQj4gdHJhbnNhY3Rpb24sIElEQkJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEm
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgYm9vbCBrZXlXYXNH
ZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4mIGluZGV4S2V5cywgVmVjdG9y
PE93blB0cjxJbmRleFdyaXRlcj4gPiogaW5kZXhXcml0ZXJzLCBTdHJpbmcqIGVycm9yTWVzc2Fn
ZSwgYm9vbCYgY29tcGxldGVkKQoreworICAgIEFTU0VSVChpbmRleElkcy5zaXplKCkgPT0gaW5k
ZXhLZXlzLnNpemUoKSk7CisgICAgY29tcGxldGVkID0gZmFsc2U7CisKKyAgICBIYXNoTWFwPGlu
dDY0X3QsIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleU1h
cDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4SWRzLnNpemUoKTsgKytpKQorICAg
ICAgICBpbmRleEtleU1hcC5hZGQoaW5kZXhJZHNbaV0sIGluZGV4S2V5c1tpXSk7CisKKyAgICBm
b3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG9iamVjdFN0b3JlLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUuaW5kZXhlcy5l
bmQoKTsgKytpdCkgeworCisgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4ID0g
aXQtPnZhbHVlOworCisgICAgICAgIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlzIGtleXMgPSBpbmRleEtleU1hcC5nZXQoaXQtPmtleSk7CisgICAgICAgIC8vIElmIHRoZSBv
YmplY3RTdG9yZSBpcyB1c2luZyBhdXRvSW5jcmVtZW50LCB0aGVuIGFueSBpbmRleGVzIHdpdGgg
YW4gaWRlbnRpY2FsIGtleVBhdGggbmVlZCB0byBhbHNvIHVzZSB0aGUgcHJpbWFyeSAoZ2VuZXJh
dGVkKSBrZXkgYXMgYSBrZXkuCisgICAgICAgIGlmIChrZXlXYXNHZW5lcmF0ZWQgJiYgKGluZGV4
LmtleVBhdGggPT0gb2JqZWN0U3RvcmUua2V5UGF0aCkpCisgICAgICAgICAgICBrZXlzLmFwcGVu
ZChwcmltYXJ5S2V5KTsKKworICAgICAgICBPd25QdHI8SW5kZXhXcml0ZXI+IGluZGV4V3JpdGVy
KGFkb3B0UHRyKG5ldyBJbmRleFdyaXRlcihpbmRleCwga2V5cykpKTsKKyAgICAgICAgYm9vbCBj
YW5BZGRLZXlzID0gZmFsc2U7CisgICAgICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IGlu
ZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMoKmJhY2tpbmdTdG9yZSwgdHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLmlkLCBpbmRl
eC5pZCwgY2FuQWRkS2V5cywgcHJpbWFyeUtleS5nZXQoKSwgZXJyb3JNZXNzYWdlKTsKKyAgICAg
ICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWNhbkFkZEtleXMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
ICAgICBpbmRleFdyaXRlcnMtPmFwcGVuZChpbmRleFdyaXRlci5yZWxlYXNlKCkpOworICAgIH0K
KworICAgIGNvbXBsZXRlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQ
dHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjpnZW5lcmF0ZUtleShQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZExldmVsREI+IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBjb25zdCBpbnQ2NF90IG1heEdlbmVyYXRvclZh
bHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFibGUgYXMg
RUNNQVNjcmlwdCBudW1iZXIuCisgICAgaW50NjRfdCBjdXJyZW50TnVtYmVyOworICAgIGJvb2wg
b2sgPSBiYWNraW5nU3RvcmUtPmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGN1cnJlbnROdW1iZXIpOworICAgIGlmICghb2spIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciIpOworICAgICAgICByZXR1cm4gSURC
S2V5OjpjcmVhdGVJbnZhbGlkKCk7CisgICAgfQorICAgIGlmIChjdXJyZW50TnVtYmVyIDwgMCB8
fCBjdXJyZW50TnVtYmVyID4gbWF4R2VuZXJhdG9yVmFsdWUpCisgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZUludmFsaWQoKTsKKworICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihj
dXJyZW50TnVtYmVyKTsKK30KKworYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCOjp1
cGRhdGVLZXlHZW5lcmF0b3IoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSog
a2V5LCBib29sIGNoZWNrQ3VycmVudCkKK3sKKyAgICBBU1NFUlQoa2V5ICYmIGtleS0+dHlwZSgp
ID09IElEQktleTo6TnVtYmVyVHlwZSk7CisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS0+bWF5YmVV
cGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihmbG9vcihrZXktPm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkg
JiYgVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxE
Qi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWI2ZTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZExldmVsREIuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCX2gKKyNkZWZpbmUgSURCT2JqZWN0U3RvcmVC
YWNrZW5kTGV2ZWxEQl9oCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisj
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQktleVBh
dGguaCIKKyNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElEQkRhdGFiYXNlQmFja2VuZExldmVsREI7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCOworc3RydWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGE7CisKKy8vIEZJWE1FOiB0aGlz
IG5hbWVzcGFjZSBpcyB0ZW1wb3JhcnkgdW50aWwgd2UgbW92ZSBpdHMgY29udGVudHMgb3V0IHRv
IHRoZWlyIG93biBob21lLgorbmFtZXNwYWNlIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIg
eworCisgICAgY2xhc3MgSW5kZXhXcml0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGlj
aXQgSW5kZXhXcml0ZXIoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKKyAg
ICAgICAgICAgIDogbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCisgICAgICAgIHsgfQor
CisgICAgICAgIEluZGV4V3JpdGVyKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEsIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzJiBpbmRleEtl
eXMpCisgICAgICAgICAgICA6IG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQorICAgICAg
ICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMpCisgICAgICAgIHsgfQorCisgICAgICAgIGJv
b2wgdmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkg
PSAwLCBTdHJpbmcqIGVycm9yTWVzc2FnZSA9IDApIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsK
KworICAgICAgICB2b2lkIHdyaXRlSW5kZXhLZXlzKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6UmVj
b3JkSWRlbnRpZmllciYsIElEQkJhY2tpbmdTdG9yZSYsIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3Q7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIGFkZGluZ0tleUFsbG93ZWQoSURCQmFja2lu
Z1N0b3JlJiwgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSog
aW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29uc3Qg
V0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9p
bmRleE1ldGFkYXRhOworICAgICAgICBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4
S2V5cyBtX2luZGV4S2V5czsKKyAgICB9OworCisgICAgYm9vbCBtYWtlSW5kZXhXcml0ZXJzKFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4sIElEQkJhY2tpbmdTdG9yZSos
IGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBib29sIGtleVdhc0dlbmVyYXRlZCwgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhLZXlzPiYsIFZlY3RvcjxPd25QdHI8SW5kZXhXcml0ZXI+ID4qIGluZGV4
V3JpdGVycywgU3RyaW5nKiBlcnJvck1lc3NhZ2UsIGJvb2wmIGNvbXBsZXRlZCkgV0FSTl9VTlVT
RURfUkVUVVJOOworCisgICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCPiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIGJv
b2wgdXBkYXRlS2V5R2VuZXJhdG9yKFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSosIGJvb2wgY2hlY2tDdXJyZW50KTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKworI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFj
a2VuZExldmVsREJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5ZDAwNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
Qi5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisj
aW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQkN1cnNvckJh
Y2tlbmRJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNl
cHRpb24uaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvckxldmVsREIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6OmNyZWF0ZShpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFi
YXNlKQoreworICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0U3RvcmVIYXNoU2V0OworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U3RvcmVJZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG9iamVjdFN0b3JlSGFzaFNldC5hZGQob2JqZWN0U3RvcmVJZHNbaV0pOworCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKGlkLCBjYWxsYmFja3Ms
IG9iamVjdFN0b3JlSGFzaFNldCwgbW9kZSwgZGF0YWJhc2UpKTsKK30KKworSURCVHJhbnNhY3Rp
b25CYWNrZW5kTGV2ZWxEQjo6SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQihpbnQ2NF90IGlk
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IEhhc2hT
ZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBt
b2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKKyAgICA6IG1faWQoaWQpCisg
ICAgLCBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQorICAgICwgbV9tb2RlKG1vZGUp
CisgICAgLCBtX3N0YXRlKFVudXNlZCkKKyAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICAsIG1fZGF0YWJhc2UoZGF0YWJhc2UpCisg
ICAgLCBtX3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5iYWNraW5nU3RvcmUoKS5nZXQoKSkKKyAgICAs
IG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjp0YXNrVGlt
ZXJGaXJlZCkKKyAgICAsIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKK3sKKyAgICAvLyBX
ZSBwYXNzIGEgcmVmZXJlbmNlIG9mIHRoaXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRl
ZC4KKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKKworICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhpcyk7Cit9CisK
K0lEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKCkKK3sKKyAgICAvLyBJdCBzaG91bGRuJ3QgYmUgcG9zc2libGUgZm9yIHRoaXMgb2JqZWN0
IHRvIGdldCBkZWxldGVkIHVudGlsIGl0J3MgZWl0aGVyIGNvbXBsZXRlIG9yIGFib3J0ZWQuCisg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREI6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8T3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9w
ZXJhdGlvbj4gYWJvcnRUYXNrKQoreworICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAodHlwZSA9PSBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2U6Ok5vcm1hbFRhc2spCisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcHJlZW1wdGl2ZVRhc2tRdWV1ZS5hcHBlbmQodGFzayk7CisKKyAgICBp
ZiAoYWJvcnRUYXNrKQorICAgICAgICBtX2Fib3J0VGFza1F1ZXVlLnByZXBlbmQoYWJvcnRUYXNr
KTsKKworICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKKyAgICAgICAgc3RhcnQoKTsKKyAgICBl
bHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjphYm9ydCgpCit7CisgICAgYWJvcnQoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvciAodW5rbm93biBjYXVzZSkiKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
TGV2ZWxEQjo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKK3sKKyAg
ICBJREJfVFJBQ0UoIklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OmFib3J0Iik7CisgICAg
aWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgd2Fz
UnVubmluZyA9IG1fc3RhdGUgPT0gUnVubmluZzsKKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5j
ZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAg
ICAvLyBhYm9ydCBzdGVwcyBiZWxvdy4gV2UgdGhlcmVmb3JlIHRha2UgYSBzZWxmIHJlZmVyZW5j
ZSB0byBrZWVwIG91cnNlbHZlcworICAgIC8vIGFsaXZlIHdoaWxlIGV4ZWN1dGluZyB0aGlzIG1l
dGhvZC4KKyAgICBSZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gcHJvdGVjdCgqdGhp
cyk7CisKKyAgICBtX3N0YXRlID0gRmluaXNoZWQ7CisgICAgbV90YXNrVGltZXIuc3RvcCgpOwor
CisgICAgaWYgKHdhc1J1bm5pbmcpCisgICAgICAgIG1fdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsK
KworICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KKyAgICB3aGlsZSAoIW1fYWJv
cnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIE93blB0cjxPcGVyYXRpb24+IHRhc2so
bV9hYm9ydFRhc2tRdWV1ZS50YWtlRmlyc3QoKSk7CisgICAgICAgIHRhc2stPnBlcmZvcm0oMCk7
CisgICAgfQorCisgICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNv
cnMpIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKKyAgICAvLyBhcmUg
ZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5k
IGFsbG93IHRoZSBiYWNraW5nIHN0b3JlCisgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBh
bmQgb3JkZXIgaXMgY3JpdGljYWwuCisgICAgY2xvc2VPcGVuQ3Vyc29ycygpOworICAgIG1fdHJh
bnNhY3Rpb24ucmVzZXQoKTsKKworICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFy
a2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKKyAg
ICAvLyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2Ug
Y2xvc2luZyBjb25uZWN0aW9ucy4KKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOworICAgIEFTU0VSVCghbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7CisgICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKKworICAgIGlmIChtX2NhbGxiYWNrcykK
KyAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQobV9pZCwgZXJyb3IpOworCisgICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQodGhpcyk7CisKKyAgICBtX2Rh
dGFiYXNlID0gMDsKK30KKworYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOjppc1Rh
c2tRdWV1ZUVtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmVlbXB0aXZlVGFza1F1ZXVl
LmlzRW1wdHkoKSAmJiBtX3Rhc2tRdWV1ZS5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kTGV2ZWxEQjo6aGFzUGVuZGluZ1Rhc2tzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyB8fCAhaXNUYXNrUXVldWVFbXB0eSgpOworfQor
Cit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI6OnJlZ2lzdGVyT3BlbkN1cnNvcihJ
REJDdXJzb3JCYWNrZW5kSW1wbCogY3Vyc29yKQoreworICAgIG1fb3BlbkN1cnNvcnMuYWRkKGN1
cnNvcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6dW5yZWdpc3Rl
ck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqIGN1cnNvcikKK3sKKyAgICBtX29wZW5D
dXJzb3JzLnJlbW92ZShjdXJzb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZExl
dmVsREI6OnJ1bigpCit7CisgICAgLy8gVHJhbnNhY3Rpb25Db29yZGluYXRvciBoYXMgc3RhcnRl
ZCB0aGlzIHRyYW5zYWN0aW9uLiBTY2hlZHVsZSBhIHRpbWVyCisgICAgLy8gdG8gcHJvY2VzcyB0
aGUgZmlyc3QgdGFzay4KKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcgfHwgbV9z
dGF0ZSA9PSBSdW5uaW5nKTsKKyAgICBBU1NFUlQoIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpOwor
CisgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbnVz
ZWQpOworCisgICAgbV9zdGF0ZSA9IFN0YXJ0UGVuZGluZzsKKyAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZFN0YXJ0VHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25TdGFydGVkKHRoaXMpOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZExldmVsREI6OmNvbW1pdCgpCit7CisgICAgSURCX1RSQUNFKCJJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCOjpjb21taXQiKTsKKworICAgIC8vIEluIG11bHRpcHJvY2VzcyBw
b3J0cywgZnJvbnQtZW5kIG1heSBoYXZlIHJlcXVlc3RlZCBhIGNvbW1pdCBidXQgYW4gYWJvcnQg
aGFzIGFscmVhZHkKKyAgICAvLyBiZWVuIGluaXRpYXRlZCBhc3luY2hyb25vdXNseSBieSB0aGUg
YmFjay1lbmQuCisgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChtX3N0YXRlID09IFVudXNlZCB8fCBtX3N0YXRlID09IFJ1bm5pbmcpOwor
ICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisKKyAgICAvLyBGcm9udC1lbmQgaGFzIHJlcXVl
c3RlZCBhIGNvbW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNrcyBsaWtlIGNyZWF0ZUluZGV4IHdo
aWNoCisgICAgLy8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25vdXMgYnkgdGhlIGZyb250LWVuZCBi
dXQgYXJlIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KKyAgICBpZiAoaGFzUGVuZGluZ1Rhc2tz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlz
IG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUKKyAgICAvLyBjb21t
aXQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2Vl
cCBvdXJzZWx2ZXMKKyAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCisg
ICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHByb3RlY3QoKnRoaXMpOworCisg
ICAgYm9vbCB1bnVzZWQgPSBtX3N0YXRlID09IFVudXNlZDsKKyAgICBtX3N0YXRlID0gRmluaXNo
ZWQ7CisKKyAgICBib29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX3RyYW5zYWN0aW9uLmNvbW1p
dCgpOworCisgICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMp
IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKKyAgICAvLyBhcmUgZmly
ZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFs
bG93IHRoZSBiYWNraW5nIHN0b3JlCisgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQg
b3JkZXIgaXMgY3JpdGljYWwuCisgICAgY2xvc2VPcGVuQ3Vyc29ycygpOworICAgIG1fdHJhbnNh
Y3Rpb24ucmVzZXQoKTsKKworICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2Vk
IGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKKyAgICAv
LyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xv
c2luZyBjb25uZWN0aW9ucy4KKyAgICBpZiAoIXVudXNlZCkKKyAgICAgICAgbV9kYXRhYmFzZS0+
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworCisgICAgaWYgKGNvbW1p
dHRlZCkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25Db21wbGV0ZShtX2lkKTsKKyAgICAgICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQodGhpcyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQobV9pZCwgSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBjb21taXR0aW5nIHRyYW5zYWN0aW9uLiIpKTsKKyAgICAgICAgbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQodGhpcyk7CisgICAgfQorCisgICAg
bV9kYXRhYmFzZSA9IDA7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6
dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4qKQorewor
ICAgIElEQl9UUkFDRSgiSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQjo6dGFza1RpbWVyRmly
ZWQiKTsKKyAgICBBU1NFUlQoIWlzVGFza1F1ZXVlRW1wdHkoKSk7CisKKyAgICBpZiAobV9zdGF0
ZSA9PSBTdGFydFBlbmRpbmcpIHsKKyAgICAgICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOworICAg
ICAgICBtX3N0YXRlID0gUnVubmluZzsKKyAgICB9CisKKyAgICAvLyBUaGUgbGFzdCByZWZlcmVu
Y2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCisg
ICAgLy8gdGFza3MuIFRha2UgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBvYmpl
Y3QgYWxpdmUgc28gdGhhdAorICAgIC8vIHRoZSBsb29wIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMg
Y2FuIGJlIGNoZWNrZWQuCisgICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREI+IHBy
b3RlY3QoKnRoaXMpOworCisgICAgVGFza1F1ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRpbmdQcmVl
bXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsKKyAg
ICB3aGlsZSAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNoZWQpIHsK
KyAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7CisgICAgICAgIE93blB0cjxPcGVy
YXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtlRmlyc3QoKSk7CisgICAgICAgIHRhc2stPnBlcmZv
cm0odGhpcyk7CisKKyAgICAgICAgLy8gRXZlbnQgaXRzZWxmIG1heSBjaGFuZ2Ugd2hpY2ggcXVl
dWUgc2hvdWxkIGJlIHByb2Nlc3NlZCBuZXh0LgorICAgICAgICB0YXNrUXVldWUgPSBtX3BlbmRp
bmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1
ZTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyB0YXNrcywgd2UgaGF2
ZW4ndCBhbHJlYWR5IGNvbW1pdHRlZC9hYm9ydGVkLAorICAgIC8vIGFuZCB0aGUgZnJvbnQtZW5k
IHJlcXVlc3RlZCBhIGNvbW1pdCwgaXQgaXMgbm93IHNhZmUgdG8gZG8gc28uCisgICAgaWYgKCFo
YXNQZW5kaW5nVGFza3MoKSAmJiBtX3N0YXRlICE9IEZpbmlzaGVkICYmIG1fY29tbWl0UGVuZGlu
ZykKKyAgICAgICAgY29tbWl0KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2
ZWxEQjo6Y2xvc2VPcGVuQ3Vyc29ycygpCit7CisgICAgZm9yIChIYXNoU2V0PElEQkN1cnNvckJh
Y2tlbmRJbXBsKj46Oml0ZXJhdG9yIGkgPSBtX29wZW5DdXJzb3JzLmJlZ2luKCk7IGkgIT0gbV9v
cGVuQ3Vyc29ycy5lbmQoKTsgKytpKQorICAgICAgICAoKmkpLT5jbG9zZSgpOworICAgIG1fb3Bl
bkN1cnNvcnMuY2xlYXIoKTsKK30KKworfTsKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjODY5MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCX2gKKyNkZWZpbmUgSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQl9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkg
JiYgVVNFKExFVkVMREIpCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCisj
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCRGF0
YWJhc2VFcnJvci5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKK2NsYXNz
IElEQkN1cnNvckJhY2tlbmRJbXBsOworY2xhc3MgSURCRGF0YWJhc2VDYWxsYmFja3M7CisKK2Ns
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJU
cmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQj4gY3JlYXRlKGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Kik7CisgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQigpOworCisgICAg
dmlydHVhbCB2b2lkIGFib3J0KCk7CisgICAgdm9pZCBjb21taXQoKTsKKworICAgIGNsYXNzIE9w
ZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PcGVyYXRpb24oKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxE
QiopID0gMDsKKyAgICB9OworCisgICAgdm9pZCBhYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KTsKKyAgICB2b2lkIHJ1bigpOworICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBjb25zdCBIYXNoU2V0PGludDY0
X3Q+JiBzY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KKyAgICB2b2lk
IHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPE9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxPcGVy
YXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZTo6Tm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQorICAgIHZvaWQg
c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFBhc3NP
d25QdHI8T3BlcmF0aW9uPiwgUGFzc093blB0cjxPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxw
dHIpOworICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7
CisgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kSW1wbCopOwor
ICAgIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
Kys7IH0KKyAgICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQ
cmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDAp
OyB9CisgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSB7IHJldHVybiAmbV90cmFuc2FjdGlvbjsgfQorICAgIGludDY0X3QgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywg
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKwor
ICAgIGVudW0gU3RhdGUgeworICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNr
cyB5ZXQuCisgICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBiYWNr
aW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KKyAgICAgICAgUnVubmluZywg
Ly8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlzaGVk
LgorICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgorICAg
IH07CisKKyAgICB2b2lkIHN0YXJ0KCk7CisKKyAgICBib29sIGlzVGFza1F1ZXVlRW1wdHkoKSBj
b25zdDsKKyAgICBib29sIGhhc1BlbmRpbmdUYXNrcygpIGNvbnN0OworCisgICAgdm9pZCB0YXNr
VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCPiopOworICAgIHZv
aWQgY2xvc2VPcGVuQ3Vyc29ycygpOworCisgICAgY29uc3QgaW50NjRfdCBtX2lkOworICAgIGNv
bnN0IEhhc2hTZXQ8aW50NjRfdD4gbV9vYmplY3RTdG9yZUlkczsKKyAgICBjb25zdCBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSBtX21vZGU7CisKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIGJv
b2wgbV9jb21taXRQZW5kaW5nOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7
CisKKyAgICB0eXBlZGVmIERlcXVlPE93blB0cjxPcGVyYXRpb24+ID4gVGFza1F1ZXVlOworICAg
IFRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKKyAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1
ZXVlOworICAgIFRhc2tRdWV1ZSBtX2Fib3J0VGFza1F1ZXVlOworCisgICAgSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiBtX3RyYW5zYWN0aW9uOworCisgICAgLy8gRklYTUU6IGRlbGV0ZSB0
aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KKyAgICBUaW1lcjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCPiBtX3Rhc2tUaW1lcjsKKyAgICBpbnQgbV9wZW5kaW5nUHJl
ZW1wdGl2ZUV2ZW50czsKKworICAgIEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPiBtX29w
ZW5DdXJzb3JzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjZW5kaWYgLy8gSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvckxldmVsREIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmNjOWExNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcApAQCAt
MCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQi5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JM
ZXZlbERCPiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQjo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCKCkp
OworfQorCitJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQjo6SURCVHJhbnNhY3Rpb25D
b29yZGluYXRvckxldmVsREIoKQoreworfQorCitJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2
ZWxEQjo6fklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCKCkKK3sKK30KKwordm9pZCBJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQjo6ZGlkQ3JlYXRlVHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24pCit7CisgICAgQVNTRVJUKCFt
X3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgIG1fdHJhbnNhY3Rpb25z
LmFkZCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24pOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3JMZXZlbERCOjpkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFj
a2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5j
b250YWlucyh0cmFuc2FjdGlvbikpOworCisgICAgbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYWRkKHRy
YW5zYWN0aW9uKTsKKyAgICBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpkaWRGaW5pc2hUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKworICAgIGlmIChtX3F1ZXVl
ZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFt
X3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKKyAgICAgICAgbV9x
dWV1ZWRUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKyAgICB9IGVsc2UgaWYgKG1f
c3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAgIG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOworCisgICAgbV90cmFuc2FjdGlv
bnMucmVtb3ZlKHRyYW5zYWN0aW9uKTsKKworICAgIHByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25z
KCk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisvLyBWZXJpZmllcyBpbnRlcm5hbCBjb25zaXN0aWVu
Y3kgd2hpbGUgcmV0dXJuaW5nIHdoZXRoZXIgYW55dGhpbmcgaXMgZm91bmQuCitib29sIElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjppc0FjdGl2ZShJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKiB0cmFuc2FjdGlvbikKK3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAg
aWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKKyAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJh
bnNhY3Rpb24pKSB7CisgICAgICAgIEFTU0VSVCghZm91bmQpOworICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgfQorICAgIEFTU0VSVChmb3VuZCA9PSBtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0
cmFuc2FjdGlvbikpOworICAgIHJldHVybiBmb3VuZDsKK30KKyNlbmRpZgorCit2b2lkIElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygp
Cit7CisgICAgaWYgKG1fcXVldWVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwgKCpt
X3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKSktPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uVmVyc2lvbkNoYW5nZSk7CisKKyAgICBMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMu
YmVnaW4oKTsKKyAgICB3aGlsZSAoaXQgIT0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuZW5kKCkpIHsK
KyAgICAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQiogdHJhbnNhY3Rpb24gPSAqaXQ7
CisgICAgICAgICsraXQ7CisgICAgICAgIGlmIChjYW5SdW5UcmFuc2FjdGlvbih0cmFuc2FjdGlv
bikpIHsKKyAgICAgICAgICAgIG1fcXVldWVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlv
bik7CisgICAgICAgICAgICBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsK
KyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5ydW4oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
c3RhdGljIGJvb2wgZG9TY29wZXNPdmVybGFwKGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3Bl
MSwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgc2NvcGUyKQoreworICAgIGZvciAoSGFzaFNldDxp
bnQ2NF90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY29wZTEuYmVnaW4oKTsgaXQgIT0gc2NvcGUx
LmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChzY29wZTIuY29udGFpbnMoKml0KSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREI6OmNhblJ1blRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZExldmVsREIqIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVChtX3F1
ZXVlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOworICAgIHN3aXRjaCAodHJh
bnNhY3Rpb24tPm1vZGUoKSkgeworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNp
b25DaGFuZ2U6CisgICAgICAgIEFTU0VSVChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5zaXplKCkgPT0g
MSk7CisgICAgICAgIEFTU0VSVChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFk
T25seToKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25SZWFkV3JpdGU6CisgICAgICAgIGZvciAoSGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tl
bmRMZXZlbERCKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGFydGVkVHJhbnNhY3Rpb25zLmJl
Z2luKCk7IGl0ICE9IG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5lbmQoKTsgKytpdCkgeworICAgICAg
ICAgICAgaWYgKCgqaXQpLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRXcml0
ZSAmJiBkb1Njb3Blc092ZXJsYXAodHJhbnNhY3Rpb24tPnNjb3BlKCksICgqaXQpLT5zY29wZSgp
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZm9y
IChMaXN0SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsgKml0ICE9IHRyYW5zYWN0aW9u
OyArK2l0KSB7CisgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbV9xdWV1ZWRUcmFuc2FjdGlvbnMu
ZW5kKCkpOworICAgICAgICAgICAgaWYgKCgqaXQpLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFu
c2FjdGlvblJlYWRXcml0ZSAmJiBkb1Njb3Blc092ZXJsYXAodHJhbnNhY3Rpb24tPnNjb3BlKCks
ICgqaXQpLT5zY29wZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworfTsKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvckxldmVsREIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lNjFhNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5oCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERC
X2gKKyNkZWZpbmUgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREJfaAorCisjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCOworCisv
LyBUcmFuc2FjdGlvbnMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGUgd2VyZSBjcmVhdGVk
LgorY2xhc3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCPiBjcmVh
dGUoKTsKKyAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQigpOwor
CisgICAgLy8gQ2FsbGVkIGJ5IHRyYW5zYWN0aW9ucyBhcyB0aGV5IHN0YXJ0IGFuZCBmaW5pc2gu
CisgICAgdm9pZCBkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZl
bERCKik7CisgICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZExldmVsREIqKTsKKyAgICB2b2lkIGRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZExldmVsREIqKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIGlzQWN0aXZlKElE
QlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCKCk7CisKKyAgICB2b2lkIHByb2Nlc3NTdGFy
dGVkVHJhbnNhY3Rpb25zKCk7CisgICAgYm9vbCBjYW5SdW5UcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmRMZXZlbERCKik7CisKKyAgICAvLyBUaGlzIGlzIGp1c3QgYW4gZWZmaWNpZW50
IHdheSB0byBrZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5zYWN0aW9ucy4KKyAgICBIYXNoTWFw
PElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIqLCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kTGV2ZWxEQj4gPiBtX3RyYW5zYWN0aW9uczsKKyAgICAvLyBUcmFuc2FjdGlvbnMgaW4gZGlm
ZmVyZW50IHN0YXRlcyBhcmUgZ3JvdXBlZCBiZWxvdy4KKyAgICBMaXN0SGFzaFNldDxJREJUcmFu
c2FjdGlvbkJhY2tlbmRMZXZlbERCKj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7CisgICAgSGFzaFNl
dDxJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCKj4gbV9zdGFydGVkVHJhbnNhY3Rpb25zOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisKKyNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCA2MjZjMzJlLi5mYTg0NmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTMwNTks
MjMgKzMwNTksMjMgQEAgZW5hYmxlPyhJTkRFWEVEX0RBVEFCQVNFKSB7CiAgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQ2Fs
bGJhY2tzLmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCBcCi0gICAg
ICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggXAorICAgICAgICBN
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmggXAogICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggXAogICAg
ICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIFwKLSAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmggXAogICAgICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBcCiAgICAgICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXJyb3IuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJFdmVudERpc3BhdGNoZXIuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuaCBcCi0gICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oIFwKKyAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2Vu
ZExldmVsREIuaCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJIaXN0b2dyYW1zLmgg
XAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIFwKICAgICAgICAgTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5LmggXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlS
YW5nZS5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBcCi0g
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBcCisg
ICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2
ZWxEQi5oIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIFwKICAgICAg
ICAgTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBcCiAgICAgICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0luZGV4ZWREQi5oCkBAIC0zMDg4LDE5ICszMDg4LDE5IEBAIGVuYWJsZT8oSU5E
RVhFRF9EQVRBQkFTRSkgewogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuY3BwIFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcCBc
CiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgXAotICAgICAgICBNb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcCBcCiAgICAgICAg
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBcCi0gICAgICAgIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIFwKKyAgICAgICAgTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCBcCiAgICAgICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBcCiAgICAgICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAgXAogICAgICAgICBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCBcCiAgICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBcCi0gICAgICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3Bw
IFwKICAgICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwIFwKICAgICAgICAg
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIFwKLSAgICAgICAgTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgXAorICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwIFwKICAg
ICAgICAgTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgXAogICAgICAgICBNb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgXAogICAgICAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9QYWdlR3JvdXBJbmRleGVkRGF0YWJhc2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGUzZjVlY2MuLmU2NTZhNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNjc0
MSwxNyArNjc0MSwxNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRl
eGVkZGJcRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkFueS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJDdXJzb3IuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yQmFja2VuZElt
cGwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJc
bGV2ZWxkYlxJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZS5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRi
XGxldmVsZGJcSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJGYWN0b3J5LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnlCYWNrZW5k
SW1wbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRk
YlxsZXZlbGRiXElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJ
REJJbmRleC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4
ZWRkYlxJREJLZXkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xp
bmRleGVkZGJcSURCS2V5UmFuZ2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
TW9kdWxlc1xpbmRleGVkZGJcSURCT2JqZWN0U3RvcmUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxsZXZl
bGRiXElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cTW9kdWxlc1xpbmRleGVkZGJcSURCUmVxdWVzdC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJUcmFuc2FjdGlvbi5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxQYWdlR3Jv
dXBJbmRleGVkRGF0YWJhc2UuY3BwIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY1NGRkNTkuLjZkYTM3YjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2
NDMsNyArMTY0MywxMyBAQAogCQk1MTFFRjJDRjE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJBbnlD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTExRUYyQ0MxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCQW55Q3VzdG9tLmNwcCAqLzsgfTsKIAkJ
NTExRUYyRDAxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCRGF0YWJhc2VDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRUYyQ0QxN0YwRkRG
MTAwRTRGQTE2IC8qIEpTSURCRGF0YWJhc2VDdXN0b20uY3BwICovOyB9OwogCQk1MTFFRjJEMTE3
RjBGREYxMDBFNEZBMTYgLyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFFRjJDRTE3RjBGREYxMDBFNEZB
MTYgLyogSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgKi87IH07Ci0JCTUxMUVGMzI5MTdGMEZG
MDMwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRUYzMjgxN0YwRkYwMzAwRTRGQTE2IC8qIElEQkJh
Y2tpbmdTdG9yZS5jcHAgKi87IH07CisJCTUxMUVGMzM5MTdGMjNCNzMwMEU0RkExNiAvKiBJREJC
YWNraW5nU3RvcmVMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMUVGMzJCMTdGMjNCNjkwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmVM
ZXZlbERCLmNwcCAqLzsgfTsKKwkJNTExRUYzM0ExN0YyM0I3MzAwRTRGQTE2IC8qIElEQkN1cnNv
ckJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMUVGMzJEMTdGMjNCNjkwMEU0RkExNiAvKiBJREJDdXJzb3JCYWNrZW5kTGV2
ZWxEQi5jcHAgKi87IH07CisJCTUxMUVGMzNCMTdGMjNCNzMwMEU0RkExNiAvKiBJREJEYXRhYmFz
ZUJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMUVGMzJGMTdGMjNCNjkwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRM
ZXZlbERCLmNwcCAqLzsgfTsKKwkJNTExRUYzM0MxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTFFRjMzMTE3RjIzQjY5MDBFNEZBMTYgLyogSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCLmNwcCAqLzsgfTsKKwkJNTExRUYzM0QxN0YyM0I3MzAwRTRGQTE2IC8qIElEQkxldmVs
REJDb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTExRUYzMzMxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovOyB9
OworCQk1MTFFRjMzRTE3RjIzQjczMDBFNEZBMTYgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2
ZWxEQi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTFFRjMzNTE3RjIzQjY5MDBFNEZBMTYgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5j
cHAgKi87IH07CisJCTUxMUVGMzNGMTdGMjNCNzMwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMUVGMzM3MTdGMjNCNjkwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRM
ZXZlbERCLmNwcCAqLzsgfTsKIAkJNTExRjIzMTkwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VU
aHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTExRjIzMTUwREMxNjBEQTAwNEYwMDMyIC8qIFN0b3JhZ2VUaHJlYWQuY3BwICovOyB9OwogCQk1
MTFGMjMxQTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTYwREMxNjBEQTAwNEYwMDMy
IC8qIFN0b3JhZ2VUaHJlYWQuaCAqLzsgfTsKIAkJNTEyNkU2QkIwQTJFM0IxMjAwNUMyOUZBIC8q
IEljb25EYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTI2RTZCOTBBMkUzQjEyMDA1QzI5RkEgLyogSWNvbkRhdGFiYXNlLmNwcCAqLzsg
fTsKQEAgLTE3MjcsNiArMTczMyw3IEBACiAJCTUxQzgxQjg5MEM0NDIyRjcwMDE5RUNFMyAvKiBG
VFBEaXJlY3RvcnlQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFDODFCODcwQzQ0MjJGNzAwMTlFQ0UzIC8qIEZUUERpcmVjdG9yeVBhcnNl
ci5jcHAgKi87IH07CiAJCTUxQzgxQjhBMEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQ
YXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
QzgxQjg4MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLzsgfTsKIAkJ
NTFDQkZDOTkwRDEwRTQ4MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUNCRkM5ODBEMTBF
NDgzMDAyREJGNTEgLyogQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUNFRkIyQjE3RjI0OTI5MDBBQ0FB
MTggLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDRUZCMjkxN0YyNDkyMTAwQUNBQTE4
IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmNwcCAqLzsgfTsKIAkJNTFEMEM1
MTYwREFBOTBCNzAwM0IzODMxIC8qIEpTU3RvcmFnZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQwQzUxNTBEQUE5MEI3MDAzQjM4MzEg
LyogSlNTdG9yYWdlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4
IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MURDRTgwMTBDQUM5RjFDMDA0ODgzNTggLyogSlNT
UUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNTFERjZEN0UwQjkyQTE2RDAw
QzJEQzg1IC8qIFRocmVhZENoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MURGNkQ3RDBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzExOCwx
NiArMzEyNSwxMSBAQAogCQk5NzEyQTVBRDE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk3MTJBNTU0MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwICovOyB9OwogCQk5NzEyQTVBRTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU1NTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNl
LmggKi87IH07CiAJCTk3MTJBNUIxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU4MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJBbnkuaCAqLzsgfTsKLQkJOTcxMkE1QjMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICov
OyB9OwogCQk5NzEyQTVCNDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1QjE1MDA0RURB
MDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggKi87IH07CiAJCTk3MTJBNUI2MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLzsgfTsK
LQkJOTcxMkE1QjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVGMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTk3MTJB
NUI5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NjAxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmggKi87IH07CiAJCTk3MTJBNUJBMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2MTE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oICovOyB9OwogCQk5NzEyQTVCQzE1MDA0RURBMDA0
OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2MzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29y
V2l0aFZhbHVlLmggKi87IH07CiAJCTk3MTJBNUJGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcx
MkE1NjYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlLmggKi87IH07Ci0JCTk3MTJBNUMx
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTY4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1QzIxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTY5MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmggKi87IH07CiAJCTk3MTJBNUMzMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTZBMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJOTcxMkE1QzQxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0
YWJhc2VDYWxsYmFja3MuaCAqLzsgfTsKIAkJOTcxMkE1QzUxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU2QzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmNwcCAqLzsgfTsKQEAgLTMxMzcsOCArMzEzOSw2IEBACiAJCTk3MTJBNUNB
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmggKi87IH07CiAJCTk3MTJBNUNEMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERp
c3BhdGNoZXIuaCAqLzsgfTsKIAkJOTcxMkE1Q0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTc2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmggKi87IH07Ci0JCTk3MTJBNUQxMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NzgxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTk3MTJBNUQyMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTc5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJG
YWN0b3J5QmFja2VuZEltcGwuaCAqLzsgfTsKIAkJOTcxMkE1RDMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTdBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZS5jcHAgKi87IH07CiAJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1N0IxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07CiAJCTk3MTJBNUQ2MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJJbmRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcxMkE1N0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggKi87IH07CkBAIC0z
MTQ2LDE3ICszMTQ2LDExIEBACiAJCTk3MTJBNURGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQ
YXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU4NjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5oICovOyB9OwogCQk5NzEyQTVFMzE1
MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlS
YW5nZS5oICovOyB9OwogCQk5NzEyQTVFQTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3Rv
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTkxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oICovOyB9OwotCQk5NzEyQTVF
QzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5MzE1MDA0RURB
MDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi87IH07Ci0JCTk3MTJB
NUVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5NDE1MDA0RURB
MDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovOyB9OwogCQk5NzEyQTVF
RjE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5NjE1MDA0
RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgKi87IH07CiAJ
CTk3MTJBNUYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5
NzE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oICovOyB9
OwogCQk5NzEyQTVGMjE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTkxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlJlcXVlc3QuaCAqLzsgfTsKIAkJOTcxMkE1RjQxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQlRyYWNpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi87IH07CiAJCTk3
MTJBNUY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OUQxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlRyYW5zYWN0aW9uLmggKi87IH07Ci0JCTk3MTJBNUY4MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTlGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmNwcCAqLzsgfTsKLQkJOTcxMkE1RjkxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUEwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmggKi87IH07Ci0JCTk3MTJBNUZDMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUEzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcCAqLzsgfTsKLQkJOTcxMkE1RkQxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNUE0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmggKi87IH07CiAJCTk3MTJBNUZFMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1QTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAgKi87IH07CiAJCTk3MTJBNUZGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNUE2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaCAqLzsgfTsKIAkJOTcxMkE2MDQxNTAwNEVEQTAwNDhBRjEwIC8qIFBhZ2VHcm91cEluZGV4
ZWREYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTVBQjE1MDA0RURBMDA0OEFGMTAgLyogUGFnZUdyb3VwSW5kZXhlZERhdGFiYXNl
LmNwcCAqLzsgfTsKQEAgLTgyMzUsNyArODIyOSwyMCBAQAogCQk1MTFFRjJDQzE3RjBGREYxMDBF
NEZBMTYgLyogSlNJREJBbnlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNJREJBbnlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTFFRjJDRDE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUYyQ0UxN0YwRkRGMTAwRTRGQTE2
IC8qIEpTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxMUVGMzI4MTdGMEZGMDMwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQmFja2luZ1N0b3Jl
LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzJCMTdGMjNCNjkwMEU0RkExNiAvKiBJREJC
YWNraW5nU3RvcmVMZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkJhY2tpbmdTdG9y
ZUxldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5n
U3RvcmVMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkMx
N0YyM0I2OTAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZUxldmVsREIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxMUVGMzJEMTdGMjNCNjkwMEU0RkExNiAvKiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5jcHA7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJhY2tlbmRMZXZlbERCLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMkUxN0YyM0I2OTAwRTRGQTE2IC8q
IElEQkN1cnNvckJhY2tlbmRMZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvckJhY2tl
bmRMZXZlbERCLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkN1cnNvckJh
Y2tlbmRMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzJGMTdG
MjNCNjkwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IElEQkRhdGFiYXNlQmFja2VuZExldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzAxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkRhdGFi
YXNlQmFja2VuZExldmVsREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VCYWNrZW5kTGV2
ZWxEQi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJEYXRhYmFzZUJhY2tl
bmRMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzMxMTdGMjNC
NjkwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzIxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZExldmVsREIuaDsg
cGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzMzMTdGMjNCNjkwMEU0RkEx
NiAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkxldmVsREJD
b2RpbmcuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29k
aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzQxN0YyM0I2OTAw
RTRGQTE2IC8qIElEQkxldmVsREJDb2RpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkNv
ZGluZy5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzM1MTdGMjNCNjkwMEU0RkEx
NiAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzYxN0YyM0I2OTAwRTRGQTE2IC8qIElEQk9iamVjdFN0
b3JlQmFja2VuZExldmVsREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCT2JqZWN0U3RvcmVCYWNrZW5k
TGV2ZWxEQi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUVGMzM3
MTdGMjNCNjkwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuY3BwOyBwYXRoID0g
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRUYzMzgxN0YyM0I2OTAwRTRGQTE2
IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVsREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCVHJh
bnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMUYyMzE1MERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0b3JhZ2VUaHJlYWQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFGMjMxNjBEQzE2MERBMDA0RjAwMzIgLyogU3Rv
cmFnZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlVGhy
ZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjZFNkI5MEEyRTNCMTIwMDVD
MjlGQSAvKiBJY29uRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEljb25EYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04
MzIzLDYgKzgzMzAsOCBAQAogCQk1MUM4MUI4NzBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0
b3J5UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGVFBE
aXJlY3RvcnlQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUM4MUI4
ODBDNDQyMkY3MDAxOUVDRTMgLyogRlRQRGlyZWN0b3J5UGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGVFBEaXJlY3RvcnlQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTFDQkZDOTgwRDEwRTQ4MzAwMkRCRjUxIC8qIENhY2hlZEZyYW1lUGxh
dGZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZEZyYW1l
UGxhdGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQ0VGQjI5MTdG
MjQ5MjEwMEFDQUExOCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5jcHA7IHBh
dGggPSBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JM
ZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFDRUZCMkExN0YyNDky
MTAwQUNBQTE4IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmg7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JMZXZlbERCLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDBDNTE1MERBQTkwQjcwMDNCMzgzMSAvKiBK
U1N0b3JhZ2VDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTdG9yYWdlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFEQ0U4
MDEwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFJlc3VsdFNldFJvd0xpc3RD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MURGNkQ3RDBCOTJBMTZE
MDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3MzMsMTkg
Kzk3NDIsMTQgQEAKIAkJOTcxMkE1NTYxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRh
YmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTU4MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJBbnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURC
QW55Lmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCQW55LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkFueS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNTVBMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSURCQmFja2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJC
YWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NUIxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBJREJDYWxsYmFja3MuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxi
YWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU1RDE1MDA0RURBMDA0
OEFGMTAgLyogSURCQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElE
QkN1cnNvci5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTVFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJz
b3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkN1cnNvci5pZGw7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5NzEyQTU1RjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQ3Vyc29yQmFja2VuZEltcGwu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU2MDE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SURCQ3Vyc29yQmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNTYxMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNv
cldpdGhWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJDdXJzb3JX
aXRoVmFsdWUuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU2NDE1MDA0RURBMDA0OEFGMTAg
LyogSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJDdXJz
b3JXaXRoVmFsdWUuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZh
bHVlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NjYxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkRhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IElEQkRhdGFiYXNlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU2NzE1MDA0RURBMDA0OEFGMTAgLyog
SURCRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQkRhdGFiYXNlLmlkbDsg
cGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOTcxMkE1NjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1Njkx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NzEyQTU2QTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNr
ZW5kSW50ZXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJB
NTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJEYXRhYmFzZUNhbGxiYWNrcy5oOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTcxMkE1NkMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQ2FsbGJh
Y2tzSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGwuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NTYs
OCArOTc2MCw2IEBACiAJCTk3MTJBNTc0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJFdmVudERpc3Bh
dGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRXZlbnREaXNwYXRj
aGVyLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJFdmVudERpc3BhdGNoZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1NzYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCRmFjdG9yeS5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5NzEyQTU3NzE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCRmFjdG9yeS5pZGw7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcx
MkE1NzgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1NzkxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJ
REJGYWN0b3J5QmFja2VuZEltcGwuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU3QTE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
Y3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU3QjE1MDA0RURBMDA0OEFG
MTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MTJBNTdEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJJbmRleC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJJbmRleC5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3Njgs
OCArOTc3MCw2IEBACiAJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCS2V5UmFuZ2UuaWRsOyBwYXRoID0gTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NzEyQTU5MTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCT2JqZWN0U3RvcmUuaDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MTJBNTkyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gSURCT2JqZWN0U3RvcmUuaWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEy
QTU5MzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU5NDE1MDA0RURBMDA0
OEFGMTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MTJBNTk2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNh
Y3Rpb25Nb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTk3MTJBNTk3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3IuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OTkx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gSURCUmVxdWVzdC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc3NywxMCArOTc3Nyw2IEBACiAJ
CTk3MTJBNTlCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFjaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IElEQlRyYWNpbmcuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OUQxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IElEQlRyYW5zYWN0aW9uLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5RTE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IElEQlRyYW5zYWN0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1OUYxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1QTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
NzEyQTVBMzE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTVBNDE1MDA0RURB
MDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHBhdGggPSBNb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk3MTJBNUE1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNUE2MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTcxMkE1QTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbDsg
cGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDgyNSw2ICsxNDgyMSwyOSBAQAogCQkJbmFtZSA9
IGFuaW1hdGlvbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUxMUVGMzJB
MTdGMjM2RTkwMEU0RkExNiAvKiBsZXZlbGRiICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk1MTFFRjMyQjE3RjIzQjY5MDBFNEZBMTYgLyogSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5jcHAgKi8sCisJCQkJNTExRUYzMkMxN0YyM0I2OTAwRTRGQTE2IC8qIElE
QkJhY2tpbmdTdG9yZUxldmVsREIuaCAqLywKKwkJCQk1MTFFRjMyRDE3RjIzQjY5MDBFNEZBMTYg
LyogSURCQ3Vyc29yQmFja2VuZExldmVsREIuY3BwICovLAorCQkJCTUxMUVGMzJFMTdGMjNCNjkw
MEU0RkExNiAvKiBJREJDdXJzb3JCYWNrZW5kTGV2ZWxEQi5oICovLAorCQkJCTUxMUVGMzJGMTdG
MjNCNjkwMEU0RkExNiAvKiBJREJEYXRhYmFzZUJhY2tlbmRMZXZlbERCLmNwcCAqLywKKwkJCQk1
MTFFRjMzMDE3RjIzQjY5MDBFNEZBMTYgLyogSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxEQi5oICov
LAorCQkJCTUxMUVGMzMxMTdGMjNCNjkwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFja2VuZExldmVs
REIuY3BwICovLAorCQkJCTUxMUVGMzMyMTdGMjNCNjkwMEU0RkExNiAvKiBJREJGYWN0b3J5QmFj
a2VuZExldmVsREIuaCAqLywKKwkJCQk1MTFFRjMzMzE3RjIzQjY5MDBFNEZBMTYgLyogSURCTGV2
ZWxEQkNvZGluZy5jcHAgKi8sCisJCQkJNTExRUYzMzQxN0YyM0I2OTAwRTRGQTE2IC8qIElEQkxl
dmVsREJDb2RpbmcuaCAqLywKKwkJCQk1MTFFRjMzNTE3RjIzQjY5MDBFNEZBMTYgLyogSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgKi8sCisJCQkJNTExRUYzMzYxN0YyM0I2OTAwRTRG
QTE2IC8qIElEQk9iamVjdFN0b3JlQmFja2VuZExldmVsREIuaCAqLywKKwkJCQk1MTFFRjMzNzE3
RjIzQjY5MDBFNEZBMTYgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kTGV2ZWxEQi5jcHAgKi8sCisJ
CQkJNTExRUYzMzgxN0YyM0I2OTAwRTRGQTE2IC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZExldmVs
REIuaCAqLywKKwkJCQk1MUNFRkIyOTE3RjI0OTIxMDBBQ0FBMTggLyogSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvckxldmVsREIuY3BwICovLAorCQkJCTUxQ0VGQjJBMTdGMjQ5MjEwMEFDQUExOCAv
KiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yTGV2ZWxEQi5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBsZXZlbGRiOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNTEyNkU2QjYw
QTJFM0FFRjAwNUMyOUZBIC8qIGljb24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKApAQCAtMTY3MTksMjAgKzE2NzM4LDE3IEBACiAJCTk3MTJBNTUzMTUwMDRFM0Mw
MDQ4QUYxMCAvKiBpbmRleGVkZGIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTUxMUVGMzJBMTdGMjM2RTkwMEU0RkExNiAvKiBsZXZlbGRiICovLAogCQkJ
CTk3MTJBNTU0MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3Bw
ICovLAogCQkJCTk3MTJBNTU1MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0
YWJhc2UuaCAqLywKIAkJCQk5NzEyQTU1NjE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5k
ZXhlZERhdGFiYXNlLmlkbCAqLywKIAkJCQk1MTFFRjI4ODE3RjBGQTZFMDBFNEZBMTYgLyogSURC
QW55LmNwcCAqLywKIAkJCQk5NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggKi8s
CiAJCQkJOTcxMkE1NTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5pZGwgKi8sCi0JCQkJNTEx
RUYzMjgxN0YwRkYwMzAwRTRGQTE2IC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgKi8sCi0JCQkJOTcx
MkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovLAogCQkJCTk3MTJB
NTVCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCAqLywKIAkJCQk1MTFFRjI4OTE3
RjBGQTZFMDBFNEZBMTYgLyogSURCQ3Vyc29yLmNwcCAqLywKIAkJCQk5NzEyQTU1RDE1MDA0RURB
MDA0OEFGMTAgLyogSURCQ3Vyc29yLmggKi8sCiAJCQkJOTcxMkE1NUUxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkN1cnNvci5pZGwgKi8sCi0JCQkJOTcxMkE1NUYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkN1cnNvckJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk5NzEyQTU2MDE1MDA0RURBMDA0OEFGMTAg
LyogSURCQ3Vyc29yQmFja2VuZEltcGwuaCAqLywKIAkJCQk5NzEyQTU2MTE1MDA0RURBMDA0OEFG
MTAgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oICovLAogCQkJCTUxMUVGMjhBMTdGMEZB
NkUwMEU0RkExNiAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwICovLAogCQkJCTk3MTJBNTYzMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JXaXRoVmFsdWUuaCAqLywKQEAgLTE2NzQwLDggKzE2
NzU2LDYgQEAKIAkJCQk1MTFFRjI4QjE3RjBGQTZFMDBFNEZBMTYgLyogSURCRGF0YWJhc2UuY3Bw
ICovLAogCQkJCTk3MTJBNTY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5oICovLAog
CQkJCTk3MTJBNTY3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZS5pZGwgKi8sCi0JCQkJ
OTcxMkE1NjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwICov
LAotCQkJCTk3MTJBNTY5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmggKi8sCiAJCQkJOTcxMkE1NkExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oICovLAogCQkJCTk3MTJBNTZCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRh
YmFzZUNhbGxiYWNrcy5oICovLAogCQkJCTk3MTJBNTZDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJE
YXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovLApAQCAtMTY3NTQsOCArMTY3NjgsNiBAQAogCQkJ
CTUxMUVGMjhEMTdGMEZBNkUwMEU0RkExNiAvKiBJREJGYWN0b3J5LmNwcCAqLywKIAkJCQk5NzEy
QTU3NjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeS5oICovLAogCQkJCTk3MTJBNTc3MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5LmlkbCAqLywKLQkJCQk5NzEyQTU3ODE1MDA0RURB
MDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCAqLywKLQkJCQk5NzEyQTU3OTE1
MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi8sCiAJCQkJOTcxMkE1
N0ExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCAqLywK
IAkJCQk5NzEyQTU3QjE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaCAqLywKIAkJCQk1MTFFRjI4RTE3RjBGQTZGMDBFNEZBMTYgLyogSURCSGlzdG9ncmFtcy5o
ICovLApAQCAtMTY3NzMsOCArMTY3ODUsNiBAQAogCQkJCTUxMUVGMjkzMTdGMEZBNkYwMEU0RkEx
NiAvKiBJREJPYmplY3RTdG9yZS5jcHAgKi8sCiAJCQkJOTcxMkE1OTExNTAwNEVEQTAwNDhBRjEw
IC8qIElEQk9iamVjdFN0b3JlLmggKi8sCiAJCQkJOTcxMkE1OTIxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQk9iamVjdFN0b3JlLmlkbCAqLywKLQkJCQk5NzEyQTU5MzE1MDA0RURBMDA0OEFGMTAgLyog
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgKi8sCi0JCQkJOTcxMkE1OTQxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCAqLywKIAkJCQk1MTFFRjI5NDE3
RjBGQTZGMDBFNEZBMTYgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgKi8sCiAJCQkJNTExRUYyOTUx
N0YwRkE2RjAwRTRGQTE2IC8qIElEQk9wZW5EQlJlcXVlc3QuaCAqLywKIAkJCQk1MTFFRjI5NjE3
RjBGQTZGMDBFNEZBMTYgLyogSURCT3BlbkRCUmVxdWVzdC5pZGwgKi8sCkBAIC0xNjc4NywxMCAr
MTY3OTcsNiBAQAogCQkJCTUxMUVGMjk4MTdGMEZBNkYwMEU0RkExNiAvKiBJREJUcmFuc2FjdGlv
bi5jcHAgKi8sCiAJCQkJOTcxMkE1OUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9u
LmggKi8sCiAJCQkJOTcxMkE1OUUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uLmlk
bCAqLywKLQkJCQk5NzEyQTU5RjE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHAgKi8sCi0JCQkJOTcxMkE1QTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuaCAqLywKLQkJCQk5NzEyQTVBMzE1MDA0RURBMDA0OEFGMTAgLyog
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCi0JCQkJOTcxMkE1QTQxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk5NzEyQTVBNTE1
MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCAqLywKIAkJCQk5NzEy
QTVBNjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggKi8sCiAJCQkJ
OTcxMkE1QTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgKi8s
CkBAIC0yMjc1NiwxNSArMjI3NjIsMTIgQEAKIAkJCQk1MUUxRUNDMTBDOTFDOTA0MDBEQzI1NUIg
LyogSWNvblJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDVCQUMyQjAxMzYwQkJBQjAwNURB
MjU4IC8qIEljb25VUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUIxMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTJBNUIzMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNjYzMTFE
NEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzEyQTVCNDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzEyQTVCNjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk5NzEyQTVCOTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZElt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUJBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVCQzE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NzEyQTVCRjE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAot
CQkJCTk3MTJBNUMyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVDMzE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVDNDE1MDA0RURB
MDA0OEFGMTAgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
MTJBNUM2MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjI3NzMsNyArMjI3NzYsNiBAQAogCQkJCTk3MTJBNUNBMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcx
MkE1Q0QxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTcxMkE1Q0YxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTk3MTJBNUQyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUQ0MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RDYx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVE
QzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTIyNzgxLDEz
ICsyMjc4MywxMCBAQAogCQkJCTk3MTJBNURGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRo
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVFMzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1RUQxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
MTJBNUYwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVGMjE1MDA0RURBMDA0OEFGMTAgLyogSURCUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RjQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQlRy
YWNpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUY2MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1RjkxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3
MTJBNUZEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NzEyQTVGRjE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTcxRDU3QzBGMzM4MTkwMDBGOUNFNEUg
LyogSWRlbnRpZmllclJlcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTkxM0EyNDIxM0Q0OUVCQTAw
RjVCMDVDIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTM4OCw2
ICsyNTM4Nyw3IEBACiAJCQkJODJFM0Q4REUxMjJFQTBEMTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5
U291cmNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVBMTJERjBEQzA0MTQ4MDBDOUFG
QUQgLyogQ1NTUmVmbGVjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2RDA2MEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUVGMzM5
MTdGMjNCNzMwMEU0RkExNiAvKiBJREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4MEU2RDA5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzNzFGNTFBMjBEMjYyRkEwMDBFQ0UwRDUgLyogQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTczNEYwQTE5OUM3NzAwN0ZCOEM1
IC8qIENTU1NlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU0NDcsNyArMjU0NDcsNiBA
QAogCQkJCUZEMzE2MDJEMTJCMDI2NzYwMEMxQTM1OSAvKiBEZWxheU5vZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkQzMTYwMzAxMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5UHJvY2Vzc29yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDRTgzQUM0MEFEQUZGRDgwMDkzNTRGNiAvKiBEZWxldGVC
dXR0b24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTExRUYzMjkxN0YwRkYwMzAwRTRGQTE2IC8q
IElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQ0U4M0FDMzBBREFGRkQ3
MDA5MzU0RjYgLyogRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOURERTA5OUU2NDkyMDA1NkU1ODEgLyogRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFMDA5OUU2NDkyMDA1NkU1ODEgLyogRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1ODk0LDYgKzI1ODkzLDcg
QEAKIAkJCQk5M0YxOUFGRDA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTENhbnZhc0VsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThERjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0IzODY0MTIyODgzRTkwMEI4MUZGOCAv
KiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTFFRjMzQzE3
RjIzQjczMDBFNEZBMTYgLyogSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVENEY1MURGMTMyNzI1NDgwMDE2RjU0MSAvKiBIVE1MQ29udmVydGVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjVDMDQxREEwRkZDQTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlz
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDM1OUQ3ODkxMjlDQTI3MTAwMDZFNUQy
IC8qIEhUTUxEZXRhaWxzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MDA5LDE2ICsy
NjAwOSwxMCBAQAogCQkJCTUxRTFFQ0MwMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJM
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAvKiBJREJC
aW5kaW5nVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUI4MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5
NzEyQTVDMTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NzEyQTVDNTE1MDA0RURBMDA0OEFGMTAgLyogSURCRGF0YWJhc2VD
YWxsYmFja3NJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUM5MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEy
QTVEMTE1MDA0RURBMDA0OEFGMTAgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3MTJBNUQzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVFQzE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
NzEyQTVFRjE1MDA0RURBMDA0OEFGMTAgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVGODE1MDA0RURBMDA0OEFGMTAgLyogSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVGQzE1MDA0
RURBMDA0OEFGMTAgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzEyQTVGRTE1MDA0RURBMDA0OEFGMTAgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNzFENTdCMEYzMzgxOTAwMEY5Q0U0RSAvKiBJZGVu
dGlmaWVyUmVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5MTNBMjQxMTNENDlFQkEwMEY1QjA1
QyAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNjM1Niw2ICsy
NjM1MCw3IEBACiAJCQkJNEFEMDE3M0MxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCQTYwQTFDRTkwNTAwQjQyQjI1IC8q
IEpTSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCQTgw
QTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFBhcmFtRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MTFFRjMzQTE3RjIzQjczMDBFNEZBMTYgLyogSURCQ3Vyc29yQmFja2VuZExldmVsREIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCQUEwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRN
TFByZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTQyMjZFNUExMTYzRDY2NzAwOEI4
Mzk3IC8qIEpTSFRNTFByb2dyZXNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUy
QUVDNzBBMUQyOTdCMDBCNDJCMjUgLyogSlNIVE1MUXVvdGVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjcxNjYsNiArMjcxNjEsNyBAQAogCQkJCTI5M0VBRTIxMTM1NkIzMkUwMDY3QUNG
OSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOEM2
RUE2MTkxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDlFOTExQ0EwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUVGMzNEMTdGMjNCNzMwMEU0RkEx
NiAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVERkU4RjU2MEQx
NjQ3N0IwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTlCRDBCRjk0MTJBNDJCRjUwMDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjcyOTIsNiArMjcyODgsNyBAQAogCQkJCUExRTExNTQ4MTMw
MTVDNUQwMDU0QUM4QyAvKiBTcG90TGlnaHRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTdCQzZBM0UxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTJFNkU3QTBDQzU1NkQ1MDA0QTIwNjIgLyogU1FMaXRlQXV0aG9yaXplci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTFFRjMzRTE3RjIzQjczMDBFNEZBMTYgLyogSURCT2JqZWN0
U3RvcmVCYWNrZW5kTGV2ZWxEQi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTIyNDY0OTBDQzk4
RERCMDBDMDUyNDAgLyogU1FMaXRlRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjVB
Njg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUEyMjQ2NEIwQ0M5OEREQjAwQzA1MjQwIC8qIFNRTGl0ZVN0YXRlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI3Mzk2LDYgKzI3MzkzLDcgQEAKIAkJCQkwOEI1RjI1NTEzQjVG
RkYyMDAyOTU5RUMgLyogU1ZHQW5pbWF0ZWRQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQz
QjkzMzZBMTNCMjYxQjEwMDQ1ODRCRiAvKiBTVkdBbmltYXRlZFBvaW50TGlzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MzFBMzAyMTEzQjg5RENDMDA3NzkxRTQgLyogU1ZHQW5pbWF0ZWRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMUVGMzNGMTdGMjNCNzMw
MEU0RkExNiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRMZXZlbERCLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTgzNkZCQ0VDMTc4QzExN0YwMEIyMUExNSAvKiBTVkdBbmltYXRlZFByb3BlcnR5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQzMTQyRTdBMTNCMUU5NzcwMEYxQzg3MSAvKiBTVkdBbmlt
YXRlZFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDNBNjI2NjcxM0IzRDExMDAwQUM5NEI4
IC8qIFNWR0FuaW1hdGVkU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc1MTgsNiArMjc1
MTYsNyBAQAogCQkJCUIyMjI3QThCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQb2ludExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBOEUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTkwMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdQb2x5Z29uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUNFRkIyQjE3RjI0
OTI5MDBBQ0FBMTggLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvckxldmVsREIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjIyMjdBOTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BvbHlsaW5lRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTQzQjg1NzE3RUI3NThGMDAzQkU5M0EgLyog
U1ZHUHJvcGVydHlJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTk2MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Mjc1NzksNiArMjc1NzgsNyBAQAogCQkJCTkzNDNDQjgxMTJGMjVFNTEwMDMzQzVFRSAvKiBUZXh0
Q29kZWNVVEY4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkI5N0M5MTMxMzg5NDMwMDhCRUY0
QiAvKiBUZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdC
Qzg0QjMxMjM3MTE4MDAwMEM2MTYxIC8qIFRleHREb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MTFFRjMzQjE3RjIzQjczMDBFNEZBMTYgLyogSURCRGF0YWJhc2VCYWNrZW5kTGV2ZWxE
Qi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDODQ4MzEyMzZGRDkzMDAwQzYxNjEgLyogVGV4
dERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTQ2MEQwMDZDMUQw
MEVGNkYyNiAvKiBUZXh0RW5jb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzEwNURBNjIw
RjNBQTY4RjAwMURENDRGIC8qIFRleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcCBpbiBTb3VyY2Vz
ICovLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>