<?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>124385</bug_id>
          
          <creation_ts>2013-11-14 16:01:04 -0800</creation_ts>
          <short_desc>Move execution of IDBTransactionBackendOperations to the IDBServerConnection</short_desc>
          <delta_ts>2013-11-15 12:56:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>andersca</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>950882</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-14 16:01:04 -0800</bug_when>
    <thetext>Move execution of IDBTransactionBackendOperations to the IDBServerConnection

This almost removes all knowledge of the backing stores from the front end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950944</commentid>
    <comment_count>1</comment_count>
      <attachid>217010</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-14 21:07:04 -0800</bug_when>
    <thetext>Created attachment 217010
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950953</commentid>
    <comment_count>2</comment_count>
      <attachid>217010</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-14 21:40:26 -0800</bug_when>
    <thetext>Comment on attachment 217010
Patch v1 

Attachment 217010 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/23778008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950955</commentid>
    <comment_count>3</comment_count>
      <attachid>217010</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-14 21:56:42 -0800</bug_when>
    <thetext>Comment on attachment 217010
Patch v1 

Attachment 217010 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/23718007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950956</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-14 22:01:13 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 217010 [details])
&gt; Attachment 217010 [details] did not pass mac-ews (mac):
&gt; Output: http://webkit-queues.appspot.com/results/23718007

Whoops, forgot to include .xcodeproj changes to export 2 more headers.

I&apos;m reworking part of the patch right now anyways, will fix in the next version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950960</commentid>
    <comment_count>5</comment_count>
      <attachid>217016</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-14 22:57:09 -0800</bug_when>
    <thetext>Created attachment 217016
Patch v2 - Less macros, more variadic templates...?

check-webkit-style will complain:
indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]

But I think it needs updates for C++ lambdas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950962</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-14 22:59:20 -0800</bug_when>
    <thetext>Attachment 217016 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/Modules/indexeddb/IDBDatabaseBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBServerConnection.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.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/IDBServerConnectionLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/Databases/IndexedDB/WebProcessIDBDatabaseBackend.h&apos;]&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 14 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>950963</commentid>
    <comment_count>7</comment_count>
      <attachid>217016</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-14 23:01:09 -0800</bug_when>
    <thetext>Comment on attachment 217016
Patch v2 - Less macros, more variadic templates...?

Attachment 217016 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/23778026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950964</commentid>
    <comment_count>8</comment_count>
      <attachid>217016</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-14 23:02:29 -0800</bug_when>
    <thetext>Comment on attachment 217016
Patch v2 - Less macros, more variadic templates...?

Attachment 217016 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/23738028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950965</commentid>
    <comment_count>9</comment_count>
      <attachid>217016</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-11-14 23:03:13 -0800</bug_when>
    <thetext>Comment on attachment 217016
Patch v2 - Less macros, more variadic templates...?

Attachment 217016 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/23708023</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950967</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-14 23:10:47 -0800</bug_when>
    <thetext>Hmmm  the EFL/GTK errors seem to be deficiencies in their respective compilers parameter packs and lamdbas.  That&apos;s too bad...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951047</commentid>
    <comment_count>11</comment_count>
      <attachid>217016</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-15 06:45:58 -0800</bug_when>
    <thetext>Comment on attachment 217016
Patch v2 - Less macros, more variadic templates...?

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

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:68
&gt; +template &lt;typename FunctionType, typename... Arguments&gt;
&gt; +class CallOnDestruct {
&gt; +public:
&gt; +    CallOnDestruct(FunctionType callback, Arguments... arguments)
&gt; +        : m_originalCallback(callback)
&gt; +    {
&gt; +        setArguments(arguments...);
&gt; +    }
&gt; +
&gt; +    ~CallOnDestruct()
&gt; +    {
&gt; +        auto callback = m_callbackToPerform;
&gt; +        callOnMainThread([callback]() {
&gt; +            callback();
&gt; +        });
&gt; +    }
&gt; +
&gt; +    void setArguments(Arguments... arguments)
&gt; +    {
&gt; +        auto callback = m_originalCallback;
&gt; +        m_callbackToPerform = [callback, arguments...]() {
&gt; +            callback(arguments...);
&gt; +        };
&gt; +    }
&gt; +
&gt; +private:
&gt; +    FunctionType m_originalCallback;
&gt; +    std::function&lt;void()&gt; m_callbackToPerform;
&gt; +};

I think this is more confusing than what you had earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951067</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-15 07:41:55 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 217016 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217016&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:68
&gt; &gt; +template &lt;typename FunctionType, typename... Arguments&gt;
&gt; &gt; +class CallOnDestruct {
&gt; &gt; +public:
&gt; &gt; +    CallOnDestruct(FunctionType callback, Arguments... arguments)
&gt; &gt; +        : m_originalCallback(callback)
&gt; &gt; +    {
&gt; &gt; +        setArguments(arguments...);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    ~CallOnDestruct()
&gt; &gt; +    {
&gt; &gt; +        auto callback = m_callbackToPerform;
&gt; &gt; +        callOnMainThread([callback]() {
&gt; &gt; +            callback();
&gt; &gt; +        });
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    void setArguments(Arguments... arguments)
&gt; &gt; +    {
&gt; &gt; +        auto callback = m_originalCallback;
&gt; &gt; +        m_callbackToPerform = [callback, arguments...]() {
&gt; &gt; +            callback(arguments...);
&gt; &gt; +        };
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    FunctionType m_originalCallback;
&gt; &gt; +    std::function&lt;void()&gt; m_callbackToPerform;
&gt; &gt; +};
&gt; 
&gt; I think this is more confusing than what you had earlier.

I know we&apos;re still looking for the right idiom here, and I definitely don&apos;t think the macros are it.

But since the EFL/GTK compilers can&apos;t handle the variadic class anyways, and this code is only for them for now, I&apos;ll go back to the macros + fixing the mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951093</commentid>
    <comment_count>13</comment_count>
      <attachid>217058</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-15 09:40:05 -0800</bug_when>
    <thetext>Created attachment 217058
Patch v3 - Macros, and hopefully a successful build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951108</commentid>
    <comment_count>14</comment_count>
      <attachid>217058</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-15 10:12:31 -0800</bug_when>
    <thetext>Comment on attachment 217058
Patch v3 - Macros, and hopefully a successful build

Attachment 217058 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/23658197</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951111</commentid>
    <comment_count>15</comment_count>
      <attachid>217061</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-15 10:19:26 -0800</bug_when>
    <thetext>Created attachment 217061
Patch v4 - All the WebCore.xcodeproj changes needed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951166</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-15 12:55:56 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/159353</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217010</attachid>
            <date>2013-11-14 21:07:04 -0800</date>
            <delta_ts>2013-11-14 22:57:09 -0800</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>91377</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1M2VjN2U4Li5kYmQxOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4
IEBACisyMDEzLTExLTE0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb3ZlIGV4ZWN1dGlvbiBvZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zIHRv
IHRoZSBJREJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjQzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFYWNoIElEQk9wZXJhdGlvbiBoYXMgaXTigJlzIDo6cGVyZm9ybSgp
IG1vdmVkIHRvIGEgbWV0aG9kIG9uIElEQlNlcnZlckNvbm5lY3Rpb24uCisgICAgICAgIFRoaXMg
YWxtb3N0IHJlbW92ZXMgYWxsIGtub3dsZWRnZSBvZiB0aGUgYmFja2luZyBzdG9yZXMgZnJvbSB0
aGUgZnJvbnQgZW5kLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIp
OgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIHJlZmxlY3QgZWFjaCB0cmFuc2FjdGlvbiBiYWNr
ZW5kIG9wZXJhdGlvbjoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uLmg6CisKKyAgICAgICAgU2NoZWR1bGUgY2VydGFpbiBvcGVyYXRpb25zIHdpdGggY2Fs
bGJhY2tzOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxl
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlUHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRl
UmFuZ2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oOgorCisgICAgICAgIE1ha2UgZWFjaCBv
cGVyYXRpb27igJlzIHBlcmZvcm0oKSBtZXRob2QgZGVmZXIgdG8gdGhlIElEQlNlcnZlckNvbm5l
Y3Rpb24gKHdpdGggYSBjYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5n
ZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKworICAgICAgICBBZGQg
YWNjZXNzb3JzIHRvIGVhY2ggb3BlcmF0aW9u4oCZcyBkYXRhIG1lbWJlcnMgc28gdGhlIElEQlNl
cnZlckNvbm5lY3Rpb24gaGFzIGV2ZXJ5dGhpbmcgaXQgbmVlZHM6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0b3JlTWV0YWRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0
b3JlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjp2ZXJzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y2FsbGJh
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbjo6ZGF0YWJhc2VDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246
OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3JlSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q3JlYXRlSW5kZXhPcGVyYXRpb246OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3Jl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0
YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUlu
ZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b246OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3Bl
cmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6
aW5kZXhJRCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVyYXRpb246OmN1cnNvclR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZXRPcGVyYXRpb246OmNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVy
YXRpb246OmF1dG9JbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpr
ZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlB1dE9wZXJhdGlvbjo6cHV0TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRp
b246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6a2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6aW5kZXhJRHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UHV0T3BlcmF0aW9uOjppbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3Bl
cmF0aW9uOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjp2YWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246OlB1dE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJRCk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5DdXJzb3JPcGVyYXRpb246OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vy
c29yT3BlcmF0aW9uOjpjdXJzb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JP
cGVyYXRpb246OnRhc2tUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRp
b246OmtleVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmN1
cnNvckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6T3BlbkN1
cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvdW50T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9w
ZXJhdGlvbjo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpD
b3VudE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5nZU9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpvYmplY3RT
dG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjYWxsYmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OmtleVJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpEZWxldGVSYW5nZU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6b2JqZWN0
U3RvcmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6
Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbik6CisKKyAgICAgICAgSW1wbGVtZW50IGVhY2ggb3Bl
cmF0aW9uIGluIHRlcm1zIG9mIHRoZSBhcHByb3ByaWF0ZSBiYWNraW5nIHN0b3JlLCB0aGVuIHBl
cmZvcm0gdGhlIGNhbGxiYWNrOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREI6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNsZWFyT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpj
aGFuZ2VEYXRhYmFzZVZlcnNpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaDoKKwogMjAxMy0xMS0xNCAgQWxvaXNpbyBB
bG1laWRhIEpyICA8YWxvaXNpby5hbG1laWRhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW0Nh
aXJvXSBBdm9pZCBleHRyYSBjb3B5IHdoZW4gZHJhd2luZyBpbWFnZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCmlu
ZGV4IDMxNGMwOGIuLjAyOGMyMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcApAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKICNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSURC
U2VydmVyQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgog
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCkBAIC0zMDEsNyArMzAyLDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJh
bmdlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUkKICAgICB0cmFu
c2FjdGlvbi0+c2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBrZXlS
YW5nZSwgY2FsbGJhY2tzKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsZWFyKGlu
dDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsZWFyT2Jq
ZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEks
ICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNsZWFyIik7CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKQEAgLTMw
OSw3ICszMTAsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXIoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhcwogICAgICAgICByZXR1cm47CiAg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJl
YWRPbmx5KTsKIAotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZUNsZWFyT3BlcmF0aW9uKG9iamVj
dFN0b3JlSWQsIGNhbGxiYWNrcyk7CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ2xlYXJPYmpl
Y3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpOwogfQogCiB2b2lkIElE
QkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24pCkBAIC01MjQsNyArNTI1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4KICAgICBjcmVhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNr
cywgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKIAotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVZl
cnNpb25DaGFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2Fs
bGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgbV9tZXRhZGF0YSk7CisgICAgdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihyZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFj
a3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKIAogICAgIEFTU0VSVCghbV9wZW5k
aW5nU2Vjb25kSGFsZk9wZW4pOwogICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFi
YXNlQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgKaW5kZXggYmU3MDdlNy4uZDI3ZDcxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
LmgKQEAgLTI2LDEyICsyNiwxMSBAQAogI2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRfaAogI2Rl
ZmluZSBJREJEYXRhYmFzZUJhY2tlbmRfaAogCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5k
LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiSURCUGVuZGluZ0Rl
bGV0ZUNhbGwuaCIKICNpbmNsdWRlICJJREJQZW5kaW5nT3BlbkNhbGwuaCIKLSNpbmNsdWRlICJJ
REJTZXJ2ZXJDb25uZWN0aW9uLmgiCiAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KQEAgLTQ2LDcgKzQ1LDcgQEAgY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleVBh
dGg7Ci1jbGFzcyBJREJLZXlSYW5nZTsKK2NsYXNzIElEQlNlcnZlckNvbm5lY3Rpb247CiBjbGFz
cyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwpAQCAtMTE0LDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIG9wZW5DdXJzb3IoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6
Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtleU9ubHksIFRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4pOwogICAgIHZvaWQgY291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBkZWxldGVSYW5nZShpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBjbGVhcihpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+KTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAg
ICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWV0YWRhdGE7IH0KICAgICB2b2lkIHNldEN1cnJlbnRWZXJzaW9uKHVpbnQ2NF90IHZlcnNpb24p
IHsgbV9tZXRhZGF0YS52ZXJzaW9uID0gdmVyc2lvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDUyMGM5NDIuLjY5
YmFiZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKQEAgLTI4Nyw3ICsyODcsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
eAogICAgIH0KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLSAgICBiYWNrZW5kREIoKS0+Y2xlYXIobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgcmVx
dWVzdCk7CisgICAgYmFja2VuZERCKCktPmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+
aWQoKSwgaWQoKSwgcmVxdWVzdCk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJD
b25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJD
b25uZWN0aW9uLmgKaW5kZXggNzdiZTk4Mi4uMzQ2ZWExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaApAQCAtMjcs
NiArMjcsNyBAQAogI2RlZmluZSBJREJTZXJ2ZXJDb25uZWN0aW9uX2gKIAogI2luY2x1ZGUgIklE
Qk1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTQxLDcgKzQyLDkgQEAgY2xhc3MgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOwogY2xhc3MgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2U7CiBj
bGFzcyBJREJEYXRhYmFzZUVycm9yOwogY2xhc3MgSURCS2V5OworY2xhc3MgSURCVHJhbnNhY3Rp
b25CYWNrZW5kOwogCitzdHJ1Y3QgSURCSW5kZXhNZXRhZGF0YTsKIHN0cnVjdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOwogCiAvLyBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHNpbmdsZSBhc3lu
Y2hyb25vdXMgbGF5ZXIgYmV0d2VlbiB0aGUgd2ViLWZhY2luZyBmcm9udGVuZApAQCAtNTQsNyAr
NTcsNiBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IEZvciBub3csIHNlcnZlciBjb25uZWN0aW9u
IHByb3ZpZGVzIGEgc3luY2hyb25vdXMgYWNjZXNzb3IgdG8gdGhlIGluLXByb2Nlc3MgYmFja2lu
ZyBzdG9yZSBvYmplY3RzLgogICAgIC8vIFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGJlIHJl
bW92ZWQgc29vbi4KICAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRf
dCB0cmFuc2FjdGlvbklEKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDbG9zZWQoKSA9IDA7
CiAKQEAgLTcyLDggKzc0LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJh
bnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNj
ZXNzQ2FsbGJhY2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2FjdGlvbihpbnQ2
NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvbihpbnQ2NF90IHRy
YW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0g
MDsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklE
LCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYsIElEQktleSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+JiBpbmRl
eEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4g
Y29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0
U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgQ3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+
IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRleChJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDcmVhdGVJbmRleE9wZXJhdGlvbiYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNh
bGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KElEQlRyYW5zYWN0aW9u
QmFja2VuZCYsIGNvbnN0IERlbGV0ZUluZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lk
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IEdldE9w
ZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dChJREJUcmFu
c2FjdGlvbkJhY2tlbmQmLCBjb25zdCBQdXRPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0
IE9wZW5DdXJzb3JPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjb3VudChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDb3VudE9wZXJhdGlvbiYsIHN0
ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlv
bkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKElEQlRyYW5zYWN0
aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0ZVJhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2
b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShJREJUcmFuc2FjdGlvbkJhY2tl
bmQmLCBjb25zdCBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lk
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
JiwgY29uc3QgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uJiwg
c3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0
aW9uQ2FsbGJhY2spID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmQuY3BwCmluZGV4IGI5NWFhY2YuLjdjMzEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcApA
QCAtODUsMTUgKzg1LDYgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjp+SURCVHJhbnNhY3Rpb25C
YWNrZW5kKCkKIHsKICAgICAvLyBJdCBzaG91bGRuJ3QgYmUgcG9zc2libGUgZm9yIHRoaXMgb2Jq
ZWN0IHRvIGdldCBkZWxldGVkIHVudGlsIGl0J3MgZWl0aGVyIGNvbXBsZXRlIG9yIGFib3J0ZWQu
CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQpOwotICAgIC8vIFRoZSBiYWNraW5nIHN0
b3JlIHRyYW5zYWN0aW9uIHNob3VsZCBhbHNvIGJlIGdvbmUgYnkgbm93LgotICAgIEFTU0VSVCgh
bV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihtX2lkKSk7Ci19Ci0KLUlEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNl
JiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpCi17Ci0gICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIGJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uID0gbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihtX2lkKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24pOwotICAgIHJldHVybiAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb247CiB9CiAK
IHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSB0eXBlLCBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc1Jl
ZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gYWJvcnRUYXNrKQpAQCAtMzExLDkgKzMwMiw5
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZURlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0CiAgICAgc2NoZWR1bGVUYXNrKERlbGV0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSksIERlbGV0
ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFk
YXRhKSk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVZlcnNpb25D
aGFuZ2VPcGVyYXRpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZl
cnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBjb25zdCBJREJEYXRhYmFzZU1l
dGFkYXRhJiBtZXRhZGF0YSkKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVZl
cnNpb25DaGFuZ2VPcGVyYXRpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiBkYXRhYmFzZUNhbGxiYWNrcywgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEp
CiB7Ci0gICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNh
bGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25D
aGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRh
LnZlcnNpb24pLCBtZXRhZGF0YS52ZXJzaW9uKSk7CisgICAgc2NoZWR1bGVUYXNrKElEQkRhdGFi
YXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJlcXVlc3Rl
ZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVt
YmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJzaW9uKSk7CiB9CiAKIHZvaWQgSURC
VHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKQEAg
LTMzMyw3ICszMjQsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVHZXRP
cGVyYXRpb24oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YQogCiB2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQdXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUg
cHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
IHsKLSAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgZGF0YWJhc2Uo
KS5pZCgpLCBvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFj
a3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKKyAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwg
Y2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhD
b3VudCkKQEAgLTM0MywyMiArMzM0LDIyIEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpz
Y2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKIAogdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlvbihpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUg
dGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgc2No
ZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBkYXRhYmFzZSgpLmlk
KCksIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5
cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKKyAgICBzY2hlZHVsZVRhc2soT3BlbkN1cnNvck9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBk
aXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKIH0KIAogdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ291bnRPcGVyYXRpb24oaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIHNjaGVkdWxl
VGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgIHNjaGVkdWxlVGFz
ayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eVJhbmdlLCBjYWxsYmFja3MpKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNj
aGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKIHsKLSAgICBzY2hlZHVsZVRhc2soRGVsZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKKyAgICBzY2hlZHVsZVRhc2soRGVsZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBv
YmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CiB9CiAKLXZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNsZWFyT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24oaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIHNj
aGVkdWxlVGFzayhDbGVhck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGRhdGFiYXNlKCkuaWQoKSwg
b2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7CisgICAgc2NoZWR1bGVUYXNrKENsZWFyT2JqZWN0
U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsK
IH0KIAogUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OmNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiBjdXJz
b3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6
OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5o
CmluZGV4IDNmNWVlYjcuLmNmYzQxM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VFcnJvci5oIgogI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQmFja2VuZC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTY0LDEzICs2MywxMiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVuZGluZ1ByZWVtcHRpdmVF
dmVudHMrKzsgfQogICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3Bl
bmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRz
ID49IDApOyB9Ci0gICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmIGRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpOwogCiAgICAgSURCRGF0YWJhc2VCYWNrZW5k
JiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJldHVybiAqbV9kYXRhYmFzZTsgfQogCiAgICAgdm9pZCBz
Y2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmKTsKICAgICB2b2lkIHNjaGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwotICAgIHZvaWQgc2NoZWR1bGVWZXJzaW9uQ2hh
bmdlT3BlcmF0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CisgICAgdm9pZCBzY2hlZHVsZVZl
cnNpb25DaGFuZ2VPcGVyYXRpb24oaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJik7CiAgICAgdm9pZCBzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0
aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogICAg
IHZvaWQgc2NoZWR1bGVEZWxldGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmKTsKICAgICB2b2lkIHNjaGVkdWxlR2V0T3BlcmF0aW9u
KGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKQEAgLTc5LDcgKzc3LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5k
OjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2b2lkIHNjaGVkdWxl
Q291bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZv
aWQgc2NoZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZv
aWQgc2NoZWR1bGVDbGVhck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVy
YXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwog
CiAgICAgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjcmVhdGVDdXJzb3JCYWNrZW5kKElE
QkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZSYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURC
RGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAppbmRleCAyOWY0MmZhLi5mZDQ2Yzdj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcApAQCAtMzEsMzgxICsz
MSwxNTkgQEAKICNpbmNsdWRlICJJREJJbmRleFdyaXRlci5oIgogI2luY2x1ZGUgIklEQktleVJh
bmdlLmgiCiAjaW5jbHVkZSAiSURCUmVjb3JkSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIklEQlNl
cnZlckNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FsbE9uRGVzdHJ1Y3QgewotcHVibGljOgotICAgIENhbGxP
bkRlc3RydWN0KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjYWxsYmFjaykKLSAgICAgICAgOiBtX2Nh
bGxiYWNrKGNhbGxiYWNrKQotICAgIHsgfQotCi0gICAgfkNhbGxPbkRlc3RydWN0KCkKLSAgICB7
Ci0gICAgICAgIG1fY2FsbGJhY2soKTsKLSAgICB9CisjZGVmaW5lIFNUQU5EQVJEX0RBVEFCQVNF
X0VSUk9SX0NBTExCQUNLIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gb3BlcmF0aW9uQ2FsbGJhY2sgPSBcCisgICAgW29wZXJhdGlvbiwgY29tcGxldGlv
bkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7IFwKKyAgICAg
ICAgaWYgKGVycm9yKSBcCisgICAgICAgICAgICBvcGVyYXRpb24tPm1fdHJhbnNhY3Rpb24tPmFi
b3J0KGVycm9yKTsgXAorICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsgXAorICAgIH07CiAK
LXByaXZhdGU6Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7Ci19OworbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJm
b3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2Fs
bE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExP
RyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKS0+Y3JlYXRlT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwg
bV9vYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZSwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhLmtleVBhdGgsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5j
cmVtZW50KSkgewotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
U3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMn
LiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAg
bV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKworICAgIFJlZlB0cjxDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbj4gb3BlcmF0aW9u
KHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0U3Rv
cmUoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQg
Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21w
bGV0aW9uQ2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJh
dGlvbiIpOwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9u
LT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRl
eE1ldGFkYXRhLm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEu
dW5pcXVlLCBtX2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKLSAgICAgICAgbV90cmFuc2Fj
dGlvbi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciB3aGVuIHRyeWlu
ZyB0byBjcmVhdGUgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0
YSgpKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCisgICAgUmVmUHRyPENyZWF0ZUluZGV4
T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1Jf
Q0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5jcmVhdGVJbmRleCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNr
KTsKIH0KIAogdm9pZCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKIHsKICAg
ICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKLSAgICBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRl
eElkKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0
U3RvcmVJRCwgbV9pbmRleElEKTsKIH0KIAogdm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVy
Zm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENh
bGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBM
T0coU3RvcmFnZUFQSSwgIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXgobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAg
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRl
cm5hbCBlcnJvciBkZWxldGluZyBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwotICAg
IH0KKworICAgIFJlZlB0cjxEZWxldGVJbmRleE9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwor
ICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlSW5kZXgoKm1fdHJhbnNhY3Rp
b24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgRGVsZXRlSW5kZXhBYm9y
dE9wZXJhdGlvbjo6cGVyZm9ybSgpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVJbmRl
eEFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5hZGRJbmRl
eChtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52
YWxpZElkKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmFkZEluZGV4KG1fb2JqZWN0
U3RvcmVJRCwgbV9pbmRleE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwog
fQogCiB2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNv
bXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkdldE9wZXJhdGlvbiIp
OwogCi0gICAgUmVmUHRyPElEQktleT4ga2V5OwotCi0gICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25s
eUtleSgpKQotICAgICAgICBrZXkgPSBtX2tleVJhbmdlLT5sb3dlcigpOwotICAgIGVsc2Ugewot
ICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3Rv
cmVDdXJzb3I7Ci0gICAgICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52
YWxpZElkKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4ZWREQjo6
Q3Vyc29yS2V5T25seSk7Ci0gICAgICAgICAgICAvLyBPYmplY3RTdG9yZSBSZXRyaWV2YWwgT3Bl
cmF0aW9uCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9w
ZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2Uu
Z2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgewotICAg
ICAgICAgICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNl
cnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1
cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQo
KSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0g
ICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuSW5k
ZXhDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2Uu
Z2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAga2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5OwotICAgIGJvb2wgb2s7Ci0gICAgaWYgKG1faW5kZXhJZCA9
PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgLy8gT2JqZWN0IFN0b3Jl
IFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgVmVjdG9yPGNoYXI+IHZhbHVlOwotICAgICAg
ICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwg
KmtleSwgdmFsdWUpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBh
dGguaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVk
QnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgbV9rZXlQYXRoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hh
cmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICB9
Ci0KLSAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGluZGV4ZXMuCi0g
ICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleChtX3RyYW5zYWN0aW9u
LT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29i
amVjdFN0b3JlSWQsIG1faW5kZXhJZCwgKmtleSwgcHJpbWFyeUtleSk7Ci0gICAgaWYgKCFvaykg
ewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdl
dFByaW1hcnlLZXlWaWFJbmRleC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCFwcmltYXJ5S2V5KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vy
c29yS2V5T25seSkgewotICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9u
Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MocHJpbWFyeUtleS5nZXQoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJp
ZXZhbCBPcGVyYXRpb24KLSAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0
b3JlKCktPmdldFJlY29yZChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCB2
YWx1ZSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9hdXRvSW5jcmVtZW50
ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSwgcHJpbWFyeUtleSwgbV9rZXlQYXRo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNo
YXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpKTsKKyAgICBSZWZQdHI8R2V0T3BlcmF0aW9u
PiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7
CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5nZXQo
Km1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgUHV0
T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxi
YWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiUHV0T3BlcmF0aW9uIik7CiAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkp
OwotICAgIEFTU0VSVChtX2luZGV4SWRzLnNpemUoKSA9PSBtX2luZGV4S2V5cy5zaXplKCkpOwot
ICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBr
ZXk7Ci0gICAgaWYgKG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0
ZSAmJiBtX29iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgIW1fa2V5KSB7Ci0gICAgICAgIFJl
ZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdlbmVyYXRlS2V5KCptX3Ry
YW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOwotICAgICAgICBrZXlX
YXNHZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkg
ewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBn
ZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICB9IGVsc2UKLSAgICAgICAga2V5ID0g
bV9rZXk7Ci0KLSAgICBBU1NFUlQoa2V5KTsKLSAgICBBU1NFUlQoa2V5LT5pc1ZhbGlkKCkpOwot
Ci0gICAgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXI7Ci0gICAg
aWYgKG1fcHV0TW9kZSA9PSBJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9ubHkpIHsKLSAgICAgICAg
Ym9vbCBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShtX3RyYW5zYWN0
aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlLmlkLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKCFv
aykgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
ciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBpZiAocmVjb3JkSWRlbnRpZmllcikgewotICAgICAgICAgICAgbV9jYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBz
dG9yZS4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBW
ZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyPj4gaW5kZXhXcml0ZXJzOwotICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0gICAgYm9v
bCBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5tYWtlSW5kZXhXcml0ZXJzKG1f
dHJhbnNhY3Rpb24tPmlkKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZSwgKmtleSwga2V5
V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRzLCBtX2luZGV4S2V5cywgaW5kZXhXcml0ZXJzLCAmZXJy
b3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nl
c3MpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjog
YmFja2luZyBzdG9yZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKLSAgICAgICAgbV9jYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4g
QWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJy
b3IuCi0gICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKG1f
dHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksIG1fdmFsdWUsIHJlY29yZElkZW50aWZpZXIu
Z2V0KCkpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgewotICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBl
cmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJ
REJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAq
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJh
Y2tpbmdTdG9yZSgpLCBtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9vYmplY3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFz
ZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpIHsKLSAgICAgICAgYm9vbCBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVy
Q29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+dXBkYXRlS2V5R2VuZXJhdG9y
KCptX3RyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksICFr
ZXlXYXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxi
YWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3Iu
IikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKKyAgICBBU1NFUlQobV9pbmRleElEcy5z
aXplKCkgPT0gbV9pbmRleEtleXMuc2l6ZSgpKTsKKworICAgIFJlZlB0cjxQdXRPcGVyYXRpb24+
IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsK
KworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLnB1dCgq
bV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBTZXRJ
bmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21w
bGV0aW9uQ2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3JhZ2VBUEksICJTZXRJbmRleGVzUmVhZHlP
cGVyYXRpb24iKTsKKwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyAr
K2kpCiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCk7
CisKKyAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQg
T3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBs
ZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5DdXJzb3JPcGVyYXRp
b24iKTsKIAotICAgIC8vIFRoZSBmcm9udGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMg
cGF1c2VzIHRoZSB0cmFuc2FjdGlvbgotICAgIC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBjb21w
bGV0ZS4gVGhpcyBjYW4ndCBoYXBwZW4gYW55IGVhcmxpZXIKLSAgICAvLyBiZWNhdXNlIHdlIGRv
bid0IHdhbnQgdG8gc3dpdGNoIHRvIGVhcmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQotICAgIC8v
IGluZGV4ZXMgYXJlIGJlaW5nIGNyZWF0ZWQgaW4gYSByb3csIHdpdGggcHV0KCkncyBpbiBiZXR3
ZWVuLgotICAgIGlmIChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2VuZDo6UHJlZW1wdGl2
ZVRhc2spCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotCi0g
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vy
c29yOwotICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7
Ci0gICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5
KTsKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0
U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBt
X2RpcmVjdGlvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fdGFza1R5cGUgPT0g
SURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrKTsKLSAgICAgICAgaWYgKG1fY3Vyc29yVHlw
ZSA9PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVj
dFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCkt
Pm9wZW5JbmRleEN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9r
ZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgIH0KLQotICAgIGlmICghYmFja2luZ1N0
b3JlQ3Vyc29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8
U2hhcmVkQnVmZmVyKj4oMCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJh
Y2tlbmQ6OlRhc2tUeXBlPihtX3Rhc2tUeXBlKSk7Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZD4gY3Vyc29yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlQ3Vyc29yQmFja2VuZCgqYmFja2lu
Z1N0b3JlQ3Vyc29yLCBtX2N1cnNvclR5cGUsIHRhc2tUeXBlLCBtX29iamVjdFN0b3JlSWQpOwot
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3It
PnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKKyAgICBSZWZQdHI8T3BlbkN1cnNvck9w
ZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NB
TExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9u
KCkub3BlbkN1cnNvcigqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsK
IH0KIAogdm9pZCBDb3VudE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
Y29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0
KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkNvdW50T3BlcmF0
aW9uIik7Ci0gICAgdWludDMyX3QgY291bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLQotICAgIGlmIChtX2luZGV4
SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQotICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihtX3RyYW5zYWN0
aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
Ci0gICAgZWxzZQotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9r
ZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICBpZiAoIWJhY2tpbmdT
dG9yZUN1cnNvcikgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9
IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAg
bV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CisKKyAgICBSZWZQdHI8Q291bnRPcGVyYXRp
b24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFD
SzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNv
dW50KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lk
IERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29t
cGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlUmFuZ2VPcGVy
YXRpb24iKTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29y
TmV4dCk7Ci0gICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigp
LmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlUmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBkZWxldGluZyBkYXRh
IGluIHJhbmdlIikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsK
LSAgICB9Ci0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisKKyAgICBSZWZQdHI8RGVs
ZXRlUmFuZ2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFT
RV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVy
Q29ubmVjdGlvbigpLmRlbGV0ZVJhbmdlKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9u
Q2FsbGJhY2spOwogfQogCi12b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit2b2lkIENsZWFyT2JqZWN0U3RvcmVPcGVy
YXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykK
IHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2sp
OwotCi0gICAgTE9HKFN0b3JhZ2VBUEksICJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Ci0g
ICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGNsZWFy
aW5nIG9iamVjdCBzdG9yZSIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKCk7CisgICAgTE9HKFN0b3JhZ2VBUEksICJDbGVhck9iamVjdFN0b3Jl
T3BlcmF0aW9uIik7CisKKyAgICBSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbj4gb3Bl
cmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisg
ICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY2xlYXJPYmpl
Y3RTdG9yZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAog
dm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRl
c3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVs
ZXRlT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLmlkKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcg
b2JqZWN0IHN0b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSkpOwotICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAgfQorCisg
ICAgUmVmUHRyPERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7Cisg
ICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVPYmplY3RTdG9yZSgqbV90cmFu
c2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25E
ZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3JhZ2VBUEksICJWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uIik7Ci0gICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0
YWJhc2UuaWQoKTsKLSAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UubWV0YWRhdGEo
KS52ZXJzaW9uOwotCi0gICAgLy8gRklYTUU6IERhdGFiYXNlIHZlcnNpb25zIGFyZSBub3cgb2Yg
dHlwZSB1aW50NjRfdCwgYnV0IHRoaXMgY29kZSBleHBlY3RlZCBpbnQ2NF90LgotICAgIEFTU0VS
VChtX3ZlcnNpb24gPiAoaW50NjRfdClvbGRWZXJzaW9uKTsKLSAgICBkYXRhYmFzZS5zZXRDdXJy
ZW50VmVyc2lvbihtX3ZlcnNpb24pOwotICAgIGlmICghZGF0YWJhc2Uuc2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+dXBkYXRlSURCRGF0YWJhc2VWZXJzaW9uKG1f
dHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFz
ZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb24pKSB7Ci0gICAgICAgIFJlZlB0cjxJREJE
YXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBz
dG9yYWdlIHdoZW4gdXBkYXRpbmcgdmVyc2lvbi4iKTsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9u
RXJyb3IoZXJyb3IpOwotICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCFkYXRhYmFzZS5oYXNQZW5kaW5nU2Vjb25k
SGFsZk9wZW4oKSk7Ci0gICAgZGF0YWJhc2Uuc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKElEQlBl
bmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCptX2NhbGxiYWNrcywgKm1fZGF0YWJhc2VDYWxsYmFja3Ms
IG1fdHJhbnNhY3Rpb25JZCwgbV92ZXJzaW9uKSk7Ci0gICAgbV9jYWxsYmFja3MtPm9uVXBncmFk
ZU5lZWRlZChvbGRWZXJzaW9uLCAmZGF0YWJhc2UsIGRhdGFiYXNlLm1ldGFkYXRhKCkpOworCisg
ICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbj4gb3Bl
cmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisg
ICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY2hhbmdlRGF0
YWJhc2VWZXJzaW9uKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwog
fQogCiB2b2lkIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQogewog
ICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwot
ICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RT
dG9yZUlkKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnJlbW92ZU9iamVjdFN0b3Jl
KG1fb2JqZWN0U3RvcmVJRCk7CiB9CiAKIHZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKaW5kZXgg
YzRlMzliMy4uOTJiYWEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaApA
QCAtMjgsMTMgKzI4LDE0IEBACiAKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNp
bmNsdWRlICJJREJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgi
CiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJTZXJ2ZXJDb25u
ZWN0aW9uOworCiBjbGFzcyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJP
cGVyYXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4g
Y3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCkBAIC00Miw2ICs0Myw5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBP
VkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVj
dFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlTWV0YWRhdGE7IH0K
KwogcHJpdmF0ZToKICAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZU1ldGFkYXRhKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCkBA
IC02MCw2ICs2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkp
OwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
c3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29iamVj
dFN0b3JlTWV0YWRhdGE7IH0KKwogcHJpdmF0ZToKICAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgICAgICA6IG1fdHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24pCkBAIC03MywxNSArODAsMTkgQEAgcHJpdmF0ZToKIAogY2xhc3MgSURC
RGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJh
dGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVh
dGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlv
bklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VD
YWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZlcnNpb25DaGFu
Z2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24sIGNhbGxiYWNr
cywgZGF0YWJhc2VDYWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCB2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFi
YXNlQ2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50
NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CisgICAgSURCQ2FsbGJh
Y2tzKiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorICAg
IElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBWZXJzaW9uQ2hh
bmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxi
YWNrcykKKyAgICBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFj
a3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX3Ry
YW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKICAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
ICAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCiAgICAgICAgICwgbV9kYXRhYmFzZUNh
bGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNrcykKQEAgLTg5LDcgKzEwMCw2IEBAIHByaXZhdGU6CiAg
ICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsK
LSAgICBpbnQ2NF90IG1fdHJhbnNhY3Rpb25JZDsKICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKICAg
ICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKICAgICBSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CkBAIC0xMDUsMTIgKzExNSwxMiBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQog
ICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RT
dG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0
b3JlSWQpCiAgICAgewogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAg
Y29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CiB9OwogCiBjbGFzcyBEZWxldGVPYmplY3RT
dG9yZUFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKQEAg
LTE1OCwxNiArMTY4LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
cmVhdGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRh
ZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4TWV0YWRhdGE7IH0KKwogcHJpdmF0ZToKICAgICBDcmVhdGVJbmRleE9wZXJhdGlvbihJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJ
ZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBt
X2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKICAg
ICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKIH07CiAKQEAgLTE4MSwx
NCArMTk1LDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJh
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAs
IG1faW5kZXhJZChpbmRleElkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9y
ZUlkKQorICAgICAgICAsIG1faW5kZXhJRChpbmRleElkKQogICAgIHsKICAgICB9CiAKICAgICBj
b25zdCBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElk
OworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAgIGNvbnN0IGludDY0X3Qg
bV9pbmRleElEOwogfTsKIAogY2xhc3MgRGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURC
T3BlcmF0aW9uIHsKQEAgLTE5OCwxNiArMjEyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEZWxldGVJbmRleE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKwor
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJ
RDsgfQorICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4TWV0YWRhdGE7IH0KKwogcHJpdmF0ZToKICAgICBEZWxldGVJbmRl
eE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCiAgICAg
ICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3Jl
SWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJ
ZCkKICAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKICAgICB7CiAgICAg
fQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAg
ICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2Jq
ZWN0U3RvcmVJRDsKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsK
IH07CiAKQEAgLTIyMSwxMyArMjM5LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRGVsZXRl
SW5kZXhBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29i
amVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2Jq
ZWN0U3RvcmVJZCkKICAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKICAg
ICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2Fj
dGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJRDsKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhN
ZXRhZGF0YTsKIH07CiAKQEAgLTIzOCwxMiArMjU2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHZXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG1ldGFkYXRhLCBvYmpl
Y3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7CiAg
ICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNj
ZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlE
KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9CisgICAgaW50NjRfdCBpbmRleElE
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleElEOyB9CisgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBl
IGN1cnNvclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KKyAgICBJREJLZXlS
YW5nZSoga2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgpOyB9CisgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFj
a3MuZ2V0KCk7IH0KKyAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2F1
dG9JbmNyZW1lbnQ7IH0KKyAgICBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBt
X2tleVBhdGg7IH0KKwogcHJpdmF0ZToKICAgICBHZXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQobWV0YWRhdGEuaWQpCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElkKGlu
ZGV4SWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAg
ICwgbV9pbmRleElEKGluZGV4SWQpCiAgICAgICAgICwgbV9rZXlQYXRoKG1ldGFkYXRhLm9iamVj
dFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCkua2V5UGF0aCkKICAgICAgICAgLCBtX2F1dG9JbmNy
ZW1lbnQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5hdXRvSW5jcmVt
ZW50KQogICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCkBAIC0yNTUsOSArMjgxLDggQEAg
cHJpdmF0ZToKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3Ry
YW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGlu
dDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRl
eElEOwogICAgIGNvbnN0IElEQktleVBhdGggbV9rZXlQYXRoOwogICAgIGNvbnN0IGJvb2wgbV9h
dXRvSW5jcmVtZW50OwogICAgIGNvbnN0IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsK
QEAgLTI2NywzMyArMjkyLDQwIEBAIHByaXZhdGU6CiAKIGNsYXNzIFB1dE9wZXJhdGlvbiA6IHB1
YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9w
ZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
SURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQ
dXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRl
eEtleXMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFB1dE9wZXJhdGlvbih0
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUs
IGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGluZGV4S2V5cykpOwogICAgIH0KICAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNr
KSBPVkVSUklERSBGSU5BTDsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9wdXRNb2RlOyB9CisgICAgY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlOyB9
CisgICAgSURCS2V5KiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleS5nZXQoKTsgfQorICAgIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMoKSBjb25zdCB7IHJldHVybiBtX2luZGV4SURz
OyB9CisgICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cygpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhLZXlzOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorICAgIFNoYXJlZEJ1ZmZlciogdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisKIHByaXZhdGU6Ci0gICAgUHV0T3BlcmF0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNl
QmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYgaW5kZXhLZXlzKQorICAgIFB1dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
SURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZl
Y3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKICAgICAgICAgLCBt
X29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAg
ICAgICwgbV9rZXkoa2V5KQogICAgICAgICAsIG1fcHV0TW9kZShwdXRNb2RlKQogICAgICAgICAs
IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICAgICAgLCBtX2luZGV4SWRzKGluZGV4SWRzKQor
ICAgICAgICAsIG1faW5kZXhJRHMoaW5kZXhJZHMpCiAgICAgICAgICwgbV9pbmRleEtleXMoaW5k
ZXhLZXlzKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
PiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwogICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZTsKICAgICBjb25zdCBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX3ZhbHVlOwogICAgIGNvbnN0IFJlZlB0cjxJREJLZXk+IG1fa2V5
OwogICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBtX3B1dE1vZGU7CiAgICAg
Y29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgY29uc3QgVmVjdG9y
PGludDY0X3Q+IG1faW5kZXhJZHM7CisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1faW5kZXhJ
RHM7CiAgICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4gbV9pbmRleEtleXM7CiB9OwogCkBAIC0z
MTcsMTcgKzM0OSwyNiBAQCBwcml2YXRlOgogCiBjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDog
cHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
T3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVk
REI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJz
b3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlw
ZSwgY2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT3BlbkN1cnNvck9w
ZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRp
cmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwogICAgIH0KICAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNr
KSBPVkVSUklERSBGSU5BTDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhJRDsgfQorICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgSW5kZXhlZERCOjpDdXJz
b3JUeXBlIGN1cnNvclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KKyAgICBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
YXNrVHlwZTsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5UmFuZ2UuZ2V0KCk7IH0KKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQorICAgIElEQkNhbGxiYWNr
cyogY2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KKwogcHJp
dmF0ZToKLSAgICBPcGVuQ3Vyc29yT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBl
LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
Ci0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmplY3RT
dG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAg
ICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElE
KGluZGV4SWQpCiAgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKICAgICAgICAgLCBtX2Rp
cmVjdGlvbihkaXJlY3Rpb24pCiAgICAgICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCkBA
IC0zMzcsOSArMzc4LDggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFz
ZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IGludDY0
X3QgbV9pbmRleElkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAgIGNv
bnN0IGludDY0X3QgbV9pbmRleElEOwogICAgIGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IG1fa2V5UmFuZ2U7CiAgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9kaXJl
Y3Rpb247CiAgICAgY29uc3QgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKQEAg
LTM0OSw3MyArMzg5LDgxIEBAIHByaXZhdGU6CiAKIGNsYXNzIENvdW50T3BlcmF0aW9uIDogcHVi
bGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3Bl
cmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb3VudE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENvdW50T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFM
OworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RT
dG9yZUlEOyB9CisgICAgaW50NjRfdCBpbmRleElEKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleElE
OyB9CisgICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5n
ZS5nZXQoKTsgfQorICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsYmFja3MuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgQ291bnRPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgQ291bnRP
cGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQp
Ci0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9p
bmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQp
CisgICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCiAgICAgICAgICwgbV9rZXlSYW5nZShrZXlS
YW5nZSkKICAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCiAgICAgewogICAgIH0KIAog
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29u
c3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3Jl
SWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29i
amVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SUQ7CiAgICAgY29uc3QgUmVm
UHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwogICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOwogfTsKIAogY2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24gOiBwdWJs
aWMgSURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVy
YXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24odHJhbnNh
Y3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2Fj
dGlvbiwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwogICAgIH0KICAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNr
KSBPVkVSUklERSBGSU5BTDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KKyAgICBJREJLZXlSYW5nZSoga2V5
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgpOyB9CisKIHByaXZhdGU6Ci0g
ICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQorICAgIERlbGV0ZVJhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJ
ZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJh
bmdlKQogICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICB7CiAgICAgfQogCiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25z
dCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKICAgICBjb25zdCBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CiAgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7CiB9OwogCi1jbGFzcyBDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVy
YXRpb24geworY2xhc3MgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVy
YXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3Jl
YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2xlYXJPcGVyYXRpb24odHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGNhbGxiYWNrcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsZWFyT2Jq
ZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykp
OwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
c3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAgIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIElEQkNhbGxiYWNr
cyogY2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KKwogcHJp
dmF0ZToKLSAgICBDbGVhck9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX3RyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQot
ICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fb2Jq
ZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90
cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
RDsKICAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCmluZGV4IDBlYmQyZTYuLjA2MDU0Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
QmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcApAQCAtMTkyMiwxMSArMTky
Miw2IEBAIHZvaWQgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZXN0YWJsaXNoQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvCiAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbnMuc2V0KHRyYW5zYWN0aW9uSUQsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxE
Qjo6Y3JlYXRlKHRyYW5zYWN0aW9uSUQsIHRoaXMpKTsKIH0KIAotSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25JbnRlcmZhY2UqIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCi17Ci0gICAgcmV0dXJu
IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklEKTsKLX0KLQogdm9p
ZCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpyZW1vdmVCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqIHRyYW5zYWN0aW9uKQogewogICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+dHJh
bnNhY3Rpb25JRCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCmluZGV4IDNk
YTRmYjMuLjBjNjk1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCkBAIC0x
MTAsNyArMTEwLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGludCBjb21wYXJlSW5kZXhLZXlz
KGNvbnN0IExldmVsREJTbGljZSYsIGNvbnN0IExldmVsREJTbGljZSYpOwogCi0gICAgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpOwogICAgIHZvaWQgcmVtb3ZlQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKik7CiAKIHBy
b3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKaW5k
ZXggYjVjZjgyMS4uOTBjYjIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQi5jcHAKQEAgLTMxLDkgKzMxLDIwIEBACiAKICNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmVMZXZlbERCLmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERC
LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQkluZGV4V3Jp
dGVyLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAorI2RlZmluZSBBU1lOQ19DT01Q
TEVUSU9OX0NBTExCQUNLKGNhbGxiYWNrLCBhcmcpIFwKKyAgICBjYWxsT25NYWluVGhyZWFkKFtj
YWxsYmFjaywgYXJnXSgpIHsgXAorICAgICAgICBjYWxsYmFjayhhcmcpOyBcCisgICAgfSk7CisK
KyNkZWZpbmUgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjYWxsYmFjaykgXAorICAg
IGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrXSgpIHsgXAorICAgICAgICBjYWxsYmFjaygwKTsg
XAorICAgIH0pOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIElEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVMZXZlbERC
KiBiYWNraW5nU3RvcmUpCkBAIC01MSwxMyArNjIsNiBAQCBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2UqIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZXByZWNhdGVkQmFja2luZ1N0b3JlKCkK
ICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUuZ2V0KCk7CiB9CiAKLUlEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uSW50ZXJmYWNlKiBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKLXsKLSAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9iYWNr
aW5nU3RvcmUtPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklE
KTsKLX0KLQogYm9vbCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6aXNDbG9zZWQoKQogewog
ICAgIHJldHVybiBtX2Nsb3NlZDsKQEAgLTE4MSwxMSArMTg1LDM4NiBAQCB2b2lkIElEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCOjpzZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBp
bnQ2NF90IGRhdAogICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRl
bnRpZmllci5nZXQoKSwgKm1fYmFja2luZ1N0b3JlLCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24s
IGRhdGFiYXNlSUQsIG9iamVjdFN0b3JlSUQpOwogICAgIH0KIAotICAgIGNhbGxPbk1haW5UaHJl
YWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7Ci0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygw
KTsKLSAgICB9KTsKKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRp
b25DYWxsYmFjayk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNyZWF0
ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IENy
ZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAg
IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7Cisg
ICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKTsKKworICAgIFN0cmluZyBvYmplY3RT
dG9yZU5hbWUgPSBvcGVyYXRpb24ub2JqZWN0U3RvcmVNZXRhZGF0YSgpLm5hbWU7CisKKyAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSgqYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3Jl
TWV0YWRhdGEoKS5pZCwgb2JqZWN0U3RvcmVOYW1lLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVNZXRh
ZGF0YSgpLmtleVBhdGgsIG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCkuYXV0b0luY3Jl
bWVudCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBv
YmplY3RTdG9yZU5hbWVdKCkgeworICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBT
dHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycu
Iiwgb2JqZWN0U3RvcmVOYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29t
cGxldGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6
Y3JlYXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Jl
YXRlSW5kZXhPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1f
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NF
UlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOworCisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSA9IG9wZXJhdGlvbi5pZGJJbmRleE1ldGFkYXRhKCk7CisgICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIGlu
ZGV4TWV0YWRhdGEuaWQsIGluZGV4TWV0YWRhdGEubmFtZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRo
LCBpbmRleE1ldGFkYXRhLnVuaXF1ZSwgaW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgeworICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2ssIGluZGV4TWV0YWRhdGFd
KCkgeworICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgi
SW50ZXJuYWwgZXJyb3Igd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgaW5kZXhN
ZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlv
bkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRl
SW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgRGVsZXRlSW5k
ZXhPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24pOworCisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSA9IG9wZXJhdGlvbi5pZGJJbmRleE1ldGFkYXRhKCk7CisgICAgaWYgKCFtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2Fj
dGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIGluZGV4TWV0
YWRhdGEuaWQpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFj
aywgaW5kZXhNZXRhZGF0YV0oKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
IFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBpbmRleCAnJXMnLiIsIGlu
ZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBs
ZXRpb25DYWxsYmFjayk7CiB9CiAKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6Omdl
dChJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBHZXRPcGVyYXRpb24m
IG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24pOworCisgICAgUmVmUHRyPElEQktleT4ga2V5OworCisgICAgaWYgKG9wZXJhdGlv
bi5rZXlSYW5nZSgpLT5pc09ubHlLZXkoKSkKKyAgICAgICAga2V5ID0gb3BlcmF0aW9uLmtleVJh
bmdlKCktPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAgICAgICAgaWYgKG9wZXJh
dGlvbi5pbmRleElEKCkgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CisgICAgICAg
ICAgICBBU1NFUlQob3BlcmF0aW9uLmN1cnNvclR5cGUoKSAhPSBJbmRleGVkREI6OkN1cnNvcktl
eU9ubHkpOworICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJhdGlvbgor
ICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmpl
Y3RTdG9yZUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFi
YXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdl
KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAob3BlcmF0aW9uLmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkp
IHsKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisg
ICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5J
bmRleEtleUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFi
YXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQo
KSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUg
UmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCks
IG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlSYW5nZSgpLCBJbmRleGVkREI6OkN1
cnNvck5leHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFiYWNr
aW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25T
dWNjZXNzKCk7CisgICAgICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNv
bXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOworICAgIH0KKworICAgIFJlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXk7CisgICAgYm9vbCBvazsKKyAgICBpZiAob3BlcmF0aW9uLmlu
ZGV4SUQoKSA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8gT2Jq
ZWN0IFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgVmVjdG9yPGNoYXI+IHZhbHVl
OworICAgICAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQoKmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RT
dG9yZUlEKCksICprZXksIHZhbHVlKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAg
b3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0
UmVjb3JkLiIpKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0so
Y29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxs
YmFja3MoKS0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9O
X0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAob3BlcmF0aW9uLmF1dG9JbmNyZW1lbnQoKSAmJiAhb3BlcmF0
aW9uLmtleVBhdGgoKS5pc051bGwoKSkgeworICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNr
cygpLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgb3Bl
cmF0aW9uLmtleVBhdGgoKSk7CisgICAgICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NB
TExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcyhTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7CisgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05f
Q0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgfQor
CisgICAgLy8gRnJvbSBoZXJlIHdlIGFyZSBkZWFsaW5nIG9ubHkgd2l0aCBpbmRleGVzLgorICAg
IG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleCgqYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVj
dFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgKmtleSwgcHJpbWFyeUtleSk7CisgICAg
aWYgKCFvaykgeworICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciBpbiBnZXRQcmltYXJ5S2V5VmlhSW5kZXguIikpOworICAgICAgICBFTVBU
WV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKCFwcmltYXJ5S2V5KSB7CisgICAgICAgIG9wZXJhdGlv
bi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKCk7CisgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJ
T05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAob3BlcmF0aW9uLmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvcktleU9u
bHkpIHsKKyAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAg
ICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKKyAg
ICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2sp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1
ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgVmVjdG9yPGNoYXI+IHZhbHVlOworICAgIG9rID0g
bV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgKnByaW1h
cnlLZXksIHZhbHVlKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7CisgICAg
ICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgRU1QVFlf
QVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChvcGVyYXRpb24uYXV0b0luY3JlbWVudCgpICYmICFvcGVy
YXRpb24ua2V5UGF0aCgpLmlzTnVsbCgpKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3Mo
KS0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBwcmltYXJ5S2V5
LCBvcGVyYXRpb24ua2V5UGF0aCgpKTsKKyAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9D
QUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0
b3IodmFsdWUpKTsKKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRp
b25DYWxsYmFjayk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnB1dChJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBQdXRPcGVyYXRpb24mIG9w
ZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24pOworCisgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKKworICAgIFJlZlB0
cjxJREJLZXk+IGtleTsKKyAgICBpZiAob3BlcmF0aW9uLnB1dE1vZGUoKSAhPSBJREJEYXRhYmFz
ZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiBvcGVyYXRpb24ub2JqZWN0U3RvcmUoKS5hdXRvSW5j
cmVtZW50ICYmICFvcGVyYXRpb24ua2V5KCkpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gYXV0
b0luY0tleSA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleSh0cmFuc2FjdGlvbiwgdHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmUoKS5pZCk7CisgICAg
ICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7CisgICAgICAgIGlmICghYXV0b0luY0tleS0+aXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJy
b3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7CisgICAgICAgICAg
ICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gYXV0b0luY0tleTsK
KyAgICB9IGVsc2UKKyAgICAgICAga2V5ID0gb3BlcmF0aW9uLmtleSgpOworCisgICAgQVNTRVJU
KGtleSk7CisgICAgQVNTRVJUKGtleS0+aXNWYWxpZCgpKTsKKworICAgIFJlZlB0cjxJREJSZWNv
cmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyOworICAgIGlmIChvcGVyYXRpb24ucHV0TW9k
ZSgpID09IElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSkgeworICAgICAgICBib29sIG9rID0g
bV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUoKmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9y
ZSgpLmlkLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFvaykgeworICAg
ICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CisgICAgICAgICAgICBFTVBUWV9BU1lOQ19D
T01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlY29yZElkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4
aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NP
TVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFZlY3RvcjxSZWZQdHI8SURCSW5kZXhXcml0ZXI+
PiBpbmRleFdyaXRlcnM7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBib29sIG9iZXlz
Q29uc3RyYWludHMgPSBmYWxzZTsKKyAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2Jh
Y2tpbmdTdG9yZS0+bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbi5pZCgpLCB0cmFuc2FjdGlv
bi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLCAqa2V5LCBrZXlXYXNH
ZW5lcmF0ZWQsIG9wZXJhdGlvbi5pbmRleElEcygpLCBvcGVyYXRpb24uaW5kZXhLZXlzKCksIGlu
ZGV4V3JpdGVycywgJmVycm9yTWVzc2FnZSwgb2JleXNDb25zdHJhaW50cyk7CisgICAgaWYgKCFi
YWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGlu
ZGV4IGtleXMuIikpOworICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNv
bXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFvYmV5
c0NvbnN0cmFpbnRzKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRF
cnJvciwgZXJyb3JNZXNzYWdlKSk7CisgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FM
TEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uIEFmdGVyIHRoaXMg
cG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgorICAgIGJh
Y2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+cHV0UmVjb3JkKCpiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2Jq
ZWN0U3RvcmUoKS5pZCwgKmtleSwgb3BlcmF0aW9uLnZhbHVlKCksIHJlY29yZElkZW50aWZpZXIu
Z2V0KCkpOworICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2VzcykgeworICAgICAgICBvcGVyYXRp
b24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9y
ZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOworICAgICAgICBFTVBUWV9BU1lOQ19DT01Q
TEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsr
aSkgeworICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNb
aV0uZ2V0KCk7CisgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVu
dGlmaWVyLmdldCgpLCAqbV9iYWNraW5nU3RvcmUsICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwg
dHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmUoKS5pZCk7
CisgICAgfQorCisgICAgaWYgKG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmF1dG9JbmNyZW1lbnQg
JiYgb3BlcmF0aW9uLnB1dE1vZGUoKSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0
ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKKyAgICAgICAgYm9vbCBv
ayA9IG1fYmFja2luZ1N0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3IodHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuaWQsICprZXks
ICFrZXlXYXNHZW5lcmF0ZWQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBvcGVy
YXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGluZyBr
ZXkgZ2VuZXJhdG9yLiIpKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FM
TEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKGtleS5yZWxl
YXNlKCkpOworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNh
bGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6b3BlbkN1cnNv
cihJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBPcGVuQ3Vyc29yT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKTsKKworICAgIC8vIFRoZSBmcm9udGVuZCBoYXMgYmVndW4gaW5kZXhp
bmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFuc2FjdGlvbgorICAgIC8vIHVudGlsIHRoZSBpbmRl
eGluZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4ndCBoYXBwZW4gYW55IGVhcmxpZXIKKyAgICAvLyBi
ZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc3dpdGNoIHRvIGVhcmx5IG1vZGUgaW4gY2FzZSBtdWx0
aXBsZQorICAgIC8vIGluZGV4ZXMgYXJlIGJlaW5nIGNyZWF0ZWQgaW4gYSByb3csIHdpdGggcHV0
KCkncyBpbiBiZXR3ZWVuLgorICAgIGlmIChvcGVyYXRpb24udGFza1R5cGUoKSA9PSBJREJEYXRh
YmFzZUJhY2tlbmQ6OlByZWVtcHRpdmVUYXNrKQorICAgICAgICB0cmFuc2FjdGlvbi5hZGRQcmVl
bXB0aXZlRXZlbnQoKTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZh
Y2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAgICBpZiAob3BlcmF0aW9uLmluZGV4SUQoKSA9PSBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhdGlvbi5j
dXJzb3JUeXBlKCkgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsKKyAgICAgICAgYmFja2lu
Z1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcigqYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0
aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIG9wZXJhdGlvbi5kaXJl
Y3Rpb24oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhdGlvbi50YXNrVHlw
ZSgpID09IElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzayk7CisgICAgICAgIGlmIChvcGVy
YXRpb24uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKKyAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJz
b3IoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCks
IG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlv
bi5rZXlSYW5nZSgpLCBvcGVyYXRpb24uZGlyZWN0aW9uKCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vy
c29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgp
LCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVyYXRp
b24ua2V5UmFuZ2UoKSwgb3BlcmF0aW9uLmRpcmVjdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAo
IWJhY2tpbmdTdG9yZUN1cnNvcikgeworICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9u
U3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7CisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7CisgICAgICAgICAgICBjb21wbGV0aW9u
Q2FsbGJhY2soMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZShzdGF0aWNfY2FzdDxJREJEYXRh
YmFzZUJhY2tlbmQ6OlRhc2tUeXBlPihvcGVyYXRpb24udGFza1R5cGUoKSkpOworCisgICAgUmVm
UHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciA9IHRyYW5zYWN0aW9uLmNyZWF0ZUN1cnNvckJh
Y2tlbmQoKmJhY2tpbmdTdG9yZUN1cnNvciwgb3BlcmF0aW9uLmN1cnNvclR5cGUoKSwgdGFza1R5
cGUsIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCkpOworICAgIG9wZXJhdGlvbi5jYWxsYmFja3Mo
KS0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCks
IGN1cnNvci0+dmFsdWUoKSk7CisKKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNL
KGNvbXBsZXRpb25DYWxsYmFjayk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVs
REI6OmNvdW50KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IENvdW50
T3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIElEQkJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdT
dG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKTsKKworICAgIHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7CisK
KyAgICBpZiAob3BlcmF0aW9uLmluZGV4SUQoKSA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQpCisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2Jq
ZWN0U3RvcmVLZXlDdXJzb3IoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5rZXlS
YW5nZSgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgIGVsc2UKKyAgICAgICAgYmFja2lu
Z1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcigqYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9u
Lm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdl
KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3Ip
IHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoY291bnQpOworICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2tdKCkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkNhbGxiYWNrKDApOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGRvIHsKKyAgICAgICAgKytjb3VudDsKKyAgICB9IHdoaWxlIChiYWNraW5n
U3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOworCisgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3MoY291bnQpOworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FM
TEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQjo6ZGVsZXRlUmFuZ2UoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwg
Y29uc3QgRGVsZXRlUmFuZ2VPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lk
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7Cisg
ICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsK
KyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOworCisgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5n
U3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRy
YW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3Bl
cmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgaWYgKGJhY2tp
bmdTdG9yZUN1cnNvcikgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5kZWxldGVSZWNvcmQoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlv
bi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIGJhY2tpbmdTdG9y
ZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKSkgeworICAgICAgICAgICAgICAgIG9wZXJhdGlv
bi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGRlbGV0aW5nIGRhdGEgaW4gcmFuZ2Ui
KSk7CisgICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNr
XSgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKDApOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsK
KyAgICB9CisKKyAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOworICAgIEVN
UFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKK30KKwor
dm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y2xlYXJPYmplY3RTdG9yZShJREJUcmFu
c2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDbGVhck9iamVjdFN0b3JlT3BlcmF0
aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRy
YW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKTsKKworICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3Rv
cmUoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCks
IG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCkpKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIkVycm9yIGNsZWFyaW5nIG9iamVjdCBzdG9yZSIpKTsKKyAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKKyAgICAgICAgICAg
IGNvbXBsZXRpb25DYWxsYmFjaygwKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoKTsKKyAgICBFTVBUWV9B
U1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7Cit9CisKK3ZvaWQg
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0
aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
JiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKTsKKworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlTWV0YWRhdGEgPSBvcGVyYXRpb24ub2JqZWN0U3RvcmVNZXRhZGF0YSgpOworCisgICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUoKmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlTWV0YWRhdGEuaWQp
KSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywgb2JqZWN0
U3RvcmVNZXRhZGF0YV0oKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0
cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4i
LCBvYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxM
QkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCOjpjaGFuZ2VEYXRhYmFzZVZlcnNpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
JiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZCYgZGF0YWJhc2UgPSB0cmFuc2Fj
dGlvbi5kYXRhYmFzZSgpOworICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLmlkKCk7
CisgICAgdWludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLm1ldGFkYXRhKCkudmVyc2lvbjsK
KworICAgIC8vIEZJWE1FOiBEYXRhYmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0
X3QsIGJ1dCB0aGlzIGNvZGUgZXhwZWN0ZWQgaW50NjRfdC4KKyAgICBBU1NFUlQob3BlcmF0aW9u
LnZlcnNpb24oKSA+IChpbnQ2NF90KW9sZFZlcnNpb24pOworICAgIGRhdGFiYXNlLnNldEN1cnJl
bnRWZXJzaW9uKG9wZXJhdGlvbi52ZXJzaW9uKCkpOworICAgIGlmICghbV9iYWNraW5nU3RvcmUt
PnVwZGF0ZUlEQkRhdGFiYXNlVmVyc2lvbigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIGRhdGFiYXNlLm1ldGFkYXRhKCkudmVyc2lvbikpIHsKKyAgICAgICAgUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxl
IHN0b3JhZ2Ugd2hlbiB1cGRhdGluZyB2ZXJzaW9uLiIpOworICAgICAgICBvcGVyYXRpb24uY2Fs
bGJhY2tzKCktPm9uRXJyb3IoZXJyb3IpOworICAgICAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExC
QUNLKGNvbXBsZXRpb25DYWxsYmFjaywgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVCghZGF0YWJhc2UuaGFzUGVuZGluZ1NlY29uZEhhbGZPcGVuKCkpOworICAgIGRh
dGFiYXNlLnNldFBlbmRpbmdTZWNvbmRIYWxmT3BlbihJREJQZW5kaW5nT3BlbkNhbGw6OmNyZWF0
ZSgqb3BlcmF0aW9uLmNhbGxiYWNrcygpLCAqb3BlcmF0aW9uLmRhdGFiYXNlQ2FsbGJhY2tzKCks
IHRyYW5zYWN0aW9uLmlkKCksIG9wZXJhdGlvbi52ZXJzaW9uKCkpKTsKKyAgICBvcGVyYXRpb24u
Y2FsbGJhY2tzKCktPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCAmZGF0YWJhc2UsIGRhdGFi
YXNlLm1ldGFkYXRhKCkpOworCisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhj
b21wbGV0aW9uQ2FsbGJhY2spOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVy
Q29ubmVjdGlvbkxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaAppbmRleCA2YzQ4YjEyLi5kOWRlZWU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oCkBAIC00OCw3ICs0
OCw2IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24g
cHJvdmlkZXMgYSBzeW5jaHJvbm91cyBhY2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5n
IHN0b3JlIG9iamVjdHMuCiAgICAgLy8gVGhpcyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVt
b3ZlZCBzb29uLgogICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBkZXByZWNh
dGVkQmFja2luZ1N0b3JlKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkludGVyZmFjZSogZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGlu
dDY0X3QgdHJhbnNhY3Rpb25JRCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDbG9z
ZWQoKSBPVkVSUklERTsKIApAQCAtNjUsNiArNjQsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCByb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3QgZGF0YWJhc2VJ
RCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwg
SURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SURzLCBjb25z
dCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4mIGluZGV4S2V5cywgc3RkOjpmdW5jdGlv
bjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2sp
OwogCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCYsIGNvbnN0IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2
b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tl
bmQmLCBjb25zdCBDcmVhdGVJbmRleE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29u
c3QgRGVsZXRlSW5kZXhPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGdldChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBHZXRPcGVyYXRpb24m
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBs
ZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHB1dChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmLCBjb25zdCBQdXRPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29u
c3QgT3BlbkN1cnNvck9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY291bnQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgQ291bnRPcGVyYXRp
b24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNv
bXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdl
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0ZVJhbmdlT3BlcmF0aW9uJiwgc3Rk
OjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9u
Q2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElE
QlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRp
b25DYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21w
bGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VEYXRhYmFz
ZVZlcnNpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5k
OjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOwogcHJpdmF0
ZToKICAgICBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVMZXZlbERC
Kik7CiAK
</data>
<flag name="commit-queue"
          id="240072"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217016</attachid>
            <date>2013-11-14 22:57:09 -0800</date>
            <delta_ts>2013-11-15 09:40:05 -0800</delta_ts>
            <desc>Patch v2 - Less macros, more variadic templates...?</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>101241</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1M2VjN2U4Li5iNzJmODA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ0
IEBACisyMDEzLTExLTE0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb3ZlIGV4ZWN1dGlvbiBvZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zIHRv
IHRoZSBJREJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjQzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFYWNoIElEQk9wZXJhdGlvbiBoYXMgaXTigJlzIDo6cGVyZm9ybSgp
IG1vdmVkIHRvIGEgbWV0aG9kIG9uIElEQlNlcnZlckNvbm5lY3Rpb24uCisgICAgICAgIFRoaXMg
YWxtb3N0IHJlbW92ZXMgYWxsIGtub3dsZWRnZSBvZiB0aGUgYmFja2luZyBzdG9yZXMgZnJvbSB0
aGUgZnJvbnQgZW5kLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIp
OgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIHJlZmxlY3QgZWFjaCB0cmFuc2FjdGlvbiBiYWNr
ZW5kIG9wZXJhdGlvbjoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uLmg6CisKKyAgICAgICAgU2NoZWR1bGUgY2VydGFpbiBvcGVyYXRpb25zIHdpdGggY2Fs
bGJhY2tzOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxl
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlUHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRl
UmFuZ2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oOgorCisgICAgICAgIE1ha2UgZWFjaCBv
cGVyYXRpb27igJlzIHBlcmZvcm0oKSBtZXRob2QgZGVmZXIgdG8gdGhlIElEQlNlcnZlckNvbm5l
Y3Rpb24gKHdpdGggYSBjYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5n
ZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKworICAgICAgICBBZGQg
YWNjZXNzb3JzIHRvIGVhY2ggb3BlcmF0aW9u4oCZcyBkYXRhIG1lbWJlcnMgc28gdGhlIElEQlNl
cnZlckNvbm5lY3Rpb24gaGFzIGV2ZXJ5dGhpbmcgaXQgbmVlZHM6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0b3JlTWV0YWRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0
b3JlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjp2ZXJzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y2FsbGJh
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbjo6ZGF0YWJhc2VDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246
OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3JlSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q3JlYXRlSW5kZXhPcGVyYXRpb246OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3Jl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0
YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUlu
ZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b246OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3Bl
cmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6
aW5kZXhJRCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVyYXRpb246OmN1cnNvclR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZXRPcGVyYXRpb246OmNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVy
YXRpb246OmF1dG9JbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpr
ZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlB1dE9wZXJhdGlvbjo6cHV0TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRp
b246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6a2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6aW5kZXhJRHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UHV0T3BlcmF0aW9uOjppbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3Bl
cmF0aW9uOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjp2YWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246OlB1dE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJRCk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5DdXJzb3JPcGVyYXRpb246OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vy
c29yT3BlcmF0aW9uOjpjdXJzb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JP
cGVyYXRpb246OnRhc2tUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRp
b246OmtleVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmN1
cnNvckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6T3BlbkN1
cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvdW50T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9w
ZXJhdGlvbjo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpD
b3VudE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5nZU9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpvYmplY3RT
dG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjYWxsYmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OmtleVJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpEZWxldGVSYW5nZU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6b2JqZWN0
U3RvcmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6
Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbik6CisKKyAgICAgICAgUmVtb3ZlIGFuIHVubmVlZGVk
IGRlcHJlY2F0ZWQgbWV0aG9kOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6CisKKyAgICAgICAgSW1wbGVtZW50IGVh
Y2ggb3BlcmF0aW9uIGluIHRlcm1zIG9mIHRoZSBhcHByb3ByaWF0ZSBiYWNraW5nIHN0b3JlLCB0
aGVuIHBlcmZvcm0gdGhlIGNhbGxiYWNrOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FsbE9uRGVzdHJ1Y3Q6OkNhbGxPbkRlc3RydWN0KTogSGVscGVyIG9iamVjdCB0byBndWFyYW50
ZWUgY2FsbGJhY2tzIGFyZSBwZXJmb3JtZWQKKyAgICAgICAgICBhc3luY2hyb25vdXNseSB3aGVu
IHRoZSBvYmplY3QgZ29lcyBvdXQgb2Ygc2NvcGUuCisgICAgICAgIChXZWJDb3JlOjpDYWxsT25E
ZXN0cnVjdDo6fkNhbGxPbkRlc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxPbkRlc3Ry
dWN0OjpzZXRBcmd1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREI6Om9wZW5UcmFuc2FjdGlvbik6IENoYW5nZSB0byB1c2UgQ2FsbE9uRGVzdHJ1Y3Qu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6YmVnaW5UcmFu
c2FjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxl
dmVsREI6OmNvbW1pdFRyYW5zYWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cmVzZXRUcmFuc2FjdGlvbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnJvbGxiYWNrVHJhbnNhY3Rp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxl
dmVsREI6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNv
bm5lY3Rpb25MZXZlbERCOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNv
bm5lY3Rpb25MZXZlbERCOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCOjpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXJD
b25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREI6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjaGFuZ2VEYXRhYmFzZVZl
cnNpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29u
bmVjdGlvbkxldmVsREIuaDoKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKwogMjAxMy0xMS0xNCAgQWxvaXNpbyBBbG1laWRhIEpyICA8YWxvaXNpby5hbG1l
aWRhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW0NhaXJvXSBBdm9pZCBleHRyYSBjb3B5IHdo
ZW4gZHJhd2luZyBpbWFnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCmluZGV4IDMxNGMwOGIuLjAyOGMyMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJS
ZWNvcmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbi5oIgogI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0zMDEsNyArMzAyLDcgQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUkKICAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVEZWxldGVS
YW5nZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKTsKIH0KIAot
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsZWFyKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNs
ZWFyIik7CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKQEAgLTMwOSw3ICszMTAsNyBAQCB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6Y2xlYXIoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIFBhcwogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5t
b2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblJlYWRPbmx5KTsKIAotICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7Cisg
ICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RT
dG9yZUlkLCBjYWxsYmFja3MpOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNh
Y3Rpb25TdGFydGVkKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCkBAIC01MjQs
NyArNTI1LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bkludFZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4KICAgICBjcmVhdGVUcmFuc2FjdGlv
bih0cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25WZXJzaW9uQ2hhbmdlKTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
KTsKIAotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24odHJh
bnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNr
cywgbV9tZXRhZGF0YSk7CisgICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbihyZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBt
X21ldGFkYXRhKTsKIAogICAgIEFTU0VSVCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4pOwogICAg
IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgK
aW5kZXggYmU3MDdlNy4uZDI3ZDcxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmgKQEAgLTI2LDEyICsyNiwxMSBAQAog
I2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRfaAogI2RlZmluZSBJREJEYXRhYmFzZUJhY2tlbmRf
aAogCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQk1l
dGFkYXRhLmgiCiAjaW5jbHVkZSAiSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCIKICNpbmNsdWRlICJJ
REJQZW5kaW5nT3BlbkNhbGwuaCIKLSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCiAK
ICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTQ2LDcgKzQ1
LDcgQEAgY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZTsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleVBhdGg7Ci1jbGFzcyBJREJLZXlSYW5nZTsK
K2NsYXNzIElEQlNlcnZlckNvbm5lY3Rpb247CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ7
CiBjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgU2hhcmVkQnVmZmVyOwpA
QCAtMTE0LDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZW5DdXJzb3IoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBib29sIGtl
eU9ubHksIFRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZvaWQgY291
bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7CiAgICAgdm9pZCBkZWxldGVSYW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPik7Ci0gICAgdm9pZCBjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIGNsZWFy
T2JqZWN0U3RvcmUoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFk
YXRhJiBtZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGE7IH0KICAgICB2b2lkIHNl
dEN1cnJlbnRWZXJzaW9uKHVpbnQ2NF90IHZlcnNpb24pIHsgbV9tZXRhZGF0YS52ZXJzaW9uID0g
dmVyc2lvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IDUyMGM5NDIuLjY5YmFiZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTI4Nyw3
ICsyODcsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeAogICAgIH0KIAogICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+Y2xl
YXIobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgcmVxdWVzdCk7CisgICAgYmFja2VuZERCKCkt
PmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgcmVxdWVzdCk7CiAg
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXggNzdiZTk4
Mi4uMzQ2ZWExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCU2VydmVyQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBJREJT
ZXJ2ZXJDb25uZWN0aW9uX2gKIAogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCisjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5o
IgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTQx
LDcgKzQyLDkgQEAgY2xhc3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOwogY2xhc3MgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2U7CiBjbGFzcyBJREJEYXRhYmFzZUVycm9yOwog
Y2xhc3MgSURCS2V5OworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOwogCitzdHJ1Y3QgSURC
SW5kZXhNZXRhZGF0YTsKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCiAvLyBUaGlz
IGludGVyZmFjZSBwcm92aWRlcyBhIHNpbmdsZSBhc3luY2hyb25vdXMgbGF5ZXIgYmV0d2VlbiB0
aGUgd2ViLWZhY2luZyBmcm9udGVuZApAQCAtNTQsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgLy8g
RklYTUU6IEZvciBub3csIHNlcnZlciBjb25uZWN0aW9uIHByb3ZpZGVzIGEgc3luY2hyb25vdXMg
YWNjZXNzb3IgdG8gdGhlIGluLXByb2Nlc3MgYmFja2luZyBzdG9yZSBvYmplY3RzLgogICAgIC8v
IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4KICAgICB2aXJ0dWFs
IElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpID0gMDsK
LSAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlKiBkZXByZWNh
dGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNDbG9zZWQoKSA9IDA7CiAKQEAgLTcyLDggKzc0LDIwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2Fj
dGlvbklELCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcm9sbGJhY2tUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleEtleXMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IGRhdGFiYXNlSUQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElEQktl
eSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcywgY29uc3QgVmVj
dG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiwgY29uc3QgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBj
b25zdCBDcmVhdGVJbmRleE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZUluZGV4KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0ZUlu
ZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0KElE
QlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IEdldE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248
dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBQ
dXRPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vy
c29yKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IE9wZW5DdXJzb3JPcGVyYXRpb24mLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRp
b25DYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3VudChJREJUcmFuc2FjdGlvbkJh
Y2tlbmQmLCBjb25zdCBDb3VudE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVJhbmdlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0
ZVJhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJPYmplY3RTdG9yZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDbGVhck9iamVjdFN0
b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VE
YXRhYmFzZVZlcnNpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgSURCRGF0YWJhc2VC
YWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCmluZGV4IGI5NWFhY2Yu
LjdjMzEyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcApAQCAtODUsMTUgKzg1LDYgQEAgSURCVHJh
bnNhY3Rpb25CYWNrZW5kOjp+SURCVHJhbnNhY3Rpb25CYWNrZW5kKCkKIHsKICAgICAvLyBJdCBz
aG91bGRuJ3QgYmUgcG9zc2libGUgZm9yIHRoaXMgb2JqZWN0IHRvIGdldCBkZWxldGVkIHVudGls
IGl0J3MgZWl0aGVyIGNvbXBsZXRlIG9yIGFib3J0ZWQuCiAgICAgQVNTRVJUKG1fc3RhdGUgPT0g
RmluaXNoZWQpOwotICAgIC8vIFRoZSBiYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHNob3VsZCBh
bHNvIGJlIGdvbmUgYnkgbm93LgotICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVj
dGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihtX2lkKSk7Ci19Ci0KLUlE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpCi17Ci0gICAgSURCQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9kYXRh
YmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bihtX2lkKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOwotICAgIHJldHVy
biAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb247CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0eXBlLCBQYXNz
UmVmUHRyPElEQk9wZXJhdGlvbj4gdGFzaywgUGFzc1JlZlB0cjxJREJTeW5jaHJvbm91c09wZXJh
dGlvbj4gYWJvcnRUYXNrKQpAQCAtMzExLDkgKzMwMiw5IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNvbnN0IElEQk9iamVj
dFN0CiAgICAgc2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSksIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiB9CiAKLXZvaWQgSURCVHJh
bnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24oaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFi
YXNlQ2FsbGJhY2tzLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKK3ZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24oaW50
NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCiB7Ci0gICAgc2NoZWR1bGVUYXNrKElE
QkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHRy
YW5zYWN0aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MpLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRhLnZlcnNpb24pLCBtZXRhZGF0YS52ZXJz
aW9uKSk7CisgICAgc2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0
YWJhc2VDYWxsYmFja3MpLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VBYm9ydE9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIFN0cmluZzo6bnVtYmVyKG1ldGFkYXRhLnZlcnNpb24pLCBt
ZXRhZGF0YS52ZXJzaW9uKSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hl
ZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKQEAgLTMzMyw3ICszMjQsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVHZXRPcGVyYXRpb24oY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYgbWV0YQogCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQ
dXRPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKLSAgICBzY2hlZHVsZVRhc2soUHV0
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZU1ldGFk
YXRhLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMp
KTsKKyAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3Rv
cmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5k
ZXhLZXlzKSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVNldElu
ZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKQEAgLTM0MywyMiArMzM0LDIy
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9w
ZXJhdGlvbihzaXplX3QgaW5kZXhDb3VudCkKIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OnNjaGVkdWxlT3BlbkN1cnNvck9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6
Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5
cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgc2NoZWR1bGVUYXNrKE9wZW5DdXJzb3JPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBkYXRhYmFzZSgpLmlkKCksIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxsYmFja3Mp
KTsKKyAgICBzY2hlZHVsZVRhc2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRh
c2tUeXBlLCBjYWxsYmFja3MpKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNj
aGVkdWxlQ291bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQogewotICAgIHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFu
Z2UsIGNhbGxiYWNrcykpOworICAgIHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKIH0K
IAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlUmFuZ2VPcGVyYXRp
b24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBzY2hlZHVsZVRh
c2soRGVsZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBkYXRhYmFzZSgpLmlkKCksIG9i
amVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAgICBzY2hlZHVsZVRhc2soRGVs
ZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNs
ZWFyT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUNsZWFy
T2JqZWN0U3RvcmVPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIHNjaGVkdWxlVGFzayhDbGVhck9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIGRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tz
KSk7CisgICAgc2NoZWR1bGVUYXNrKENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFja3MpKTsKIH0KIAogUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNyZWF0ZUN1cnNvckJhY2tlbmQoSURC
QmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiBjdXJzb3IsIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oCmluZGV4IDNmNWVlYjcuLmNmYzQxM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZC5oCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIklE
Qk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZC5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KQEAgLTY0LDEzICs2MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFByZWVtcHRp
dmVFdmVudCgpICB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQogICAgIHZvaWQgZGlk
Q29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07
IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9Ci0gICAgSURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpOwogCiAgICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJl
dHVybiAqbV9kYXRhYmFzZTsgfQogCiAgICAgdm9pZCBzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKICAgICB2b2lkIHNjaGVk
dWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSYpOwotICAgIHZvaWQgc2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBJREJEYXRhYmFz
ZU1ldGFkYXRhJik7CisgICAgdm9pZCBzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVyYXRpb24oaW50
NjRfdCByZXF1ZXN0ZWRWZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJik7CiAg
ICAgdm9pZCBzY2hlZHVsZUNyZWF0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogICAgIHZvaWQgc2NoZWR1bGVEZWxldGVJbmRl
eE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
KTsKICAgICB2b2lkIHNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+KTsKQEAgLTc5LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2NoZWR1bGVPcGVuQ3Vy
c29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKICAgICB2b2lkIHNjaGVkdWxlQ291bnRPcGVyYXRpb24oaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZvaWQgc2NoZWR1bGVEZWxldGVSYW5nZU9w
ZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgc2NoZWR1bGVDbGVhck9wZXJhdGlv
bihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAg
dm9pZCBzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPiBjcmVhdGVDdXJzb3JCYWNrZW5kKElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVy
ZmFjZSYsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlw
ZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVy
YXRpb25zLmNwcAppbmRleCAyOWY0MmZhLi5mZDQ2YzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRPcGVyYXRpb25zLmNwcApAQCAtMzEsMzgxICszMSwxNTkgQEAKICNpbmNsdWRlICJJREJJ
bmRleFdyaXRlci5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCiAjaW5jbHVkZSAiSURCUmVj
b3JkSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2Fs
bE9uRGVzdHJ1Y3QgewotcHVibGljOgotICAgIENhbGxPbkRlc3RydWN0KHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBjYWxsYmFjaykKLSAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgIHsg
fQotCi0gICAgfkNhbGxPbkRlc3RydWN0KCkKLSAgICB7Ci0gICAgICAgIG1fY2FsbGJhY2soKTsK
LSAgICB9CisjZGVmaW5lIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLIHN0ZDo6ZnVu
Y3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gb3BlcmF0aW9uQ2FsbGJh
Y2sgPSBcCisgICAgW29wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7IFwKKyAgICAgICAgaWYgKGVycm9yKSBcCisgICAgICAg
ICAgICBvcGVyYXRpb24tPm1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsgXAorICAgICAgICBj
b21wbGV0aW9uQ2FsbGJhY2soKTsgXAorICAgIH07CiAKLXByaXZhdGU6Ci0gICAgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IG1fY2FsbGJhY2s7Ci19OworbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lk
IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1
Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiQ3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Y3JlYXRlT2JqZWN0
U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmlk
LCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZSwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmtleVBh
dGgsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50KSkgewotICAgICAgICBSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFs
IGVycm9yIGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRhZGF0
YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJy
b3IucmVsZWFzZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKworICAgIFJlZlB0cjxDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RB
VEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5z
ZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rpb24sICp0aGlz
LCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBD
YWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwotCiAgICAg
TE9HKFN0b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdT
dG9yZSgpLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0
b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRhLm5hbWUsIG1faW5kZXhN
ZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBtX2luZGV4TWV0YWRhdGEu
bXVsdGlFbnRyeSkpIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6
Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVhdGUgaW5kZXggJyVzJy4i
LCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorCisgICAgUmVmUHRyPENyZWF0ZUluZGV4T3BlcmF0aW9uPiBvcGVyYXRpb24odGhp
cyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVJbmRleCgqbV90cmFu
c2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0
ZUluZGV4QWJvcnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnJl
bW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkKTsKKyAgICBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnJlbW92ZUluZGV4KG1fb2JqZWN0U3RvcmVJRCwgbV9pbmRleElEKTsKIH0K
IAogdm9pZCBEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3Ry
dWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZUlu
ZGV4T3BlcmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXgo
bV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJh
bnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0YWRh
dGEuaWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBpbmRl
eCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAg
bV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwotICAgIH0KKworICAgIFJlZlB0cjxEZWxldGVJ
bmRleE9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VS
Uk9SX0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25u
ZWN0aW9uKCkuZGVsZXRlSW5kZXgoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxs
YmFjayk7CiB9CiAKIHZvaWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCiB7
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIik7Ci0gICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5hZGRJbmRleChtX29iamVjdFN0b3JlSWQsIG1faW5k
ZXhNZXRhZGF0YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKKyAgICBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLmFkZEluZGV4KG1fb2JqZWN0U3RvcmVJRCwgbV9pbmRleE1ldGFkYXRh
LCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwogfQogCiB2b2lkIEdldE9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogewotICAg
IENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAg
ICBMT0coU3RvcmFnZUFQSSwgIkdldE9wZXJhdGlvbiIpOwogCi0gICAgUmVmUHRyPElEQktleT4g
a2V5OwotCi0gICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgpKQotICAgICAgICBrZXkgPSBt
X2tleVJhbmdlLT5sb3dlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0gICAgICAgIGlmICht
X2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSk7Ci0gICAgICAg
ICAgICAvLyBPYmplY3RTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29y
TmV4dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgewotICAgICAgICAgICAgICAgIC8vIEluZGV4IFZh
bHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJz
b3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNh
dGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJl
bmNlZCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICAgICAgYmFja2luZ1N0
b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCku
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IobV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29y
TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWJhY2tpbmdT
dG9yZUN1cnNvcikgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAga2V5ID0gYmFja2luZ1N0b3Jl
Q3Vyc29yLT5rZXkoKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5Owot
ICAgIGJvb2wgb2s7Ci0gICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZh
bGlkSWQpIHsKLSAgICAgICAgLy8gT2JqZWN0IFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAg
ICAgICAgVmVjdG9yPGNoYXI+IHZhbHVlOwotICAgICAgICBvayA9IG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0
UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOwotICAgICAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGluIGdldFJlY29yZC4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1
ZSksIGtleSwgbV9rZXlQYXRoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2
YWx1ZSkpOwotICAgICAgICByZXR1cm47Ci0KLSAgICB9Ci0KLSAgICAvLyBGcm9tIGhlcmUgd2Ug
YXJlIGRlYWxpbmcgb25seSB3aXRoIGluZGV4ZXMuCi0gICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdl
dFByaW1hcnlLZXlWaWFJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwg
KmtleSwgcHJpbWFyeUtleSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFByaW1hcnlLZXlWaWFJbmRleC4iKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFwcmltYXJ5S2V5KSB7Ci0gICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgewotICAgICAgICAv
LyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MocHJpbWFyeUtleS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICBWZWN0
b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFJlY29yZChtX3RyYW5z
YWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5LCB2YWx1ZSk7Ci0gICAgaWYgKCFvaykgewot
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJl
Y29yZC4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodmFsdWUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAobV9hdXRvSW5jcmVtZW50ICYmICFtX2tleVBhdGguaXNOdWxsKCkp
IHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVj
dG9yKHZhbHVlKSwgcHJpbWFyeUtleSwgbV9rZXlQYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3Io
dmFsdWUpKTsKKyAgICBSZWZQdHI8R2V0T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAg
U1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5nZXQoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBv
cGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1
Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdl
QVBJLCAiUHV0T3BlcmF0aW9uIik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAh
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkpOwotICAgIEFTU0VSVChtX2luZGV4SWRz
LnNpemUoKSA9PSBtX2luZGV4S2V5cy5zaXplKCkpOwotICAgIGJvb2wga2V5V2FzR2VuZXJhdGVk
ID0gZmFsc2U7Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0gICAgaWYgKG1fcHV0TW9kZSAh
PSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiBtX29iamVjdFN0b3JlLmF1dG9J
bmNyZW1lbnQgJiYgIW1fa2V5KSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkg
PSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVk
QmFja2luZ1N0b3JlKCktPmdlbmVyYXRlS2V5KCptX3RyYW5zYWN0aW9uLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmUuaWQpOwotICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwotICAg
ICAgICBpZiAoIWF1dG9JbmNLZXktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4i
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAga2V5ID0gYXV0b0lu
Y0tleTsKLSAgICB9IGVsc2UKLSAgICAgICAga2V5ID0gbV9rZXk7Ci0KLSAgICBBU1NFUlQoa2V5
KTsKLSAgICBBU1NFUlQoa2V5LT5pc1ZhbGlkKCkpOwotCi0gICAgUmVmUHRyPElEQlJlY29yZElk
ZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXI7Ci0gICAgaWYgKG1fcHV0TW9kZSA9PSBJREJEYXRh
YmFzZUJhY2tlbmQ6OkFkZE9ubHkpIHsKLSAgICAgICAgYm9vbCBvayA9IG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCBy
ZWNvcmRJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgbV9jYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNl
LiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVjb3Jk
SWRlbnRpZmllcikgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJL
ZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmUHRyPElEQkluZGV4V3Jp
dGVyPj4gaW5kZXhXcml0ZXJzOwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBv
YmV5c0NvbnN0cmFpbnRzID0gZmFsc2U7Ci0gICAgYm9vbCBiYWNraW5nU3RvcmVTdWNjZXNzID0g
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJh
Y2tpbmdTdG9yZSgpLT5tYWtlSW5kZXhXcml0ZXJzKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZSwgKmtleSwga2V5V2FzR2VuZXJhdGVkLCBtX2luZGV4SWRz
LCBtX2luZGV4S2V5cywgaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFp
bnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgbV9jYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciB1cGRh
dGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW9i
ZXlzQ29uc3RyYWludHMpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVy
cm9yTWVzc2FnZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQmVmb3JlIHRo
aXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJh
Y2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgYmFja2luZ1N0b3JlU3Vj
Y2VzcyA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQs
ICprZXksIG1fdmFsdWUsIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwotICAgIGlmICghYmFja2lu
Z1N0b3JlU3VjY2VzcykgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4
V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0
ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUlu
ZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLCBtX3RyYW5zYWN0
aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlLmlkKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vYmplY3RTdG9yZS5hdXRvSW5j
cmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAm
JiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKLSAgICAgICAgYm9vbCBvayA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+dXBkYXRlS2V5R2VuZXJhdG9yKCptX3RyYW5zYWN0aW9uLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQsICprZXksICFrZXlXYXNHZW5lcmF0ZWQpOwotICAgICAg
ICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVy
bmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkucmVs
ZWFzZSgpKTsKKyAgICBBU1NFUlQobV9pbmRleElEcy5zaXplKCkgPT0gbV9pbmRleEtleXMuc2l6
ZSgpKTsKKworICAgIFJlZlB0cjxQdXRPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBT
VEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLnB1dCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9w
ZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBD
YWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwotCiAgICAg
TE9HKFN0b3JhZ2VBUEksICJTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24iKTsKKwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleENvdW50OyArK2kpCiAgICAgICAgIG1fdHJhbnNhY3Rp
b24tPmRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCk7CisKKyAgICBjYWxsT25NYWluVGhyZWFk
KGNvbXBsZXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgT3BlbkN1cnNvck9wZXJhdGlvbjo6cGVy
Zm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENh
bGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBM
T0coU3RvcmFnZUFQSSwgIk9wZW5DdXJzb3JPcGVyYXRpb24iKTsKIAotICAgIC8vIFRoZSBmcm9u
dGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFuc2FjdGlvbgot
ICAgIC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4ndCBoYXBwZW4g
YW55IGVhcmxpZXIKLSAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gc3dpdGNoIHRvIGVh
cmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQotICAgIC8vIGluZGV4ZXMgYXJlIGJlaW5nIGNyZWF0
ZWQgaW4gYSByb3csIHdpdGggcHV0KCkncyBpbiBiZXR3ZWVuLgotICAgIGlmIChtX3Rhc2tUeXBl
ID09IElEQkRhdGFiYXNlQmFja2VuZDo6UHJlZW1wdGl2ZVRhc2spCi0gICAgICAgIG1fdHJhbnNh
Y3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwotCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yOwotICAgIGlmIChtX2luZGV4SWQg
PT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnNv
clR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsKLSAgICAgICAgYmFja2luZ1N0b3Jl
Q3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlv
bi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9v
YmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgQVNTRVJUKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kOjpOb3Jt
YWxUYXNrKTsKLSAgICAgICAgaWYgKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1cnNvcktl
eU9ubHkpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9w
ZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9r
ZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5l
Y3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcihtX3RyYW5z
YWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rp
b24pOwotICAgIH0KLQotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oMCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0
YXNrVHlwZShzdGF0aWNfY2FzdDxJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlPihtX3Rhc2tU
eXBlKSk7Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yID0gbV90cmFuc2Fj
dGlvbi0+Y3JlYXRlQ3Vyc29yQmFja2VuZCgqYmFja2luZ1N0b3JlQ3Vyc29yLCBtX2N1cnNvclR5
cGUsIHRhc2tUeXBlLCBtX29iamVjdFN0b3JlSWQpOwotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52
YWx1ZSgpKTsKKyAgICBSZWZQdHI8T3BlbkN1cnNvck9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMp
OworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAgbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkub3BlbkN1cnNvcigqbV90cmFuc2Fj
dGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBDb3VudE9wZXJhdGlv
bjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogewot
ICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0K
ICAgICBMT0coU3RvcmFnZUFQSSwgIkNvdW50T3BlcmF0aW9uIik7Ci0gICAgdWludDMyX3QgY291
bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tp
bmdTdG9yZUN1cnNvcjsKLQotICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6
SW52YWxpZElkKQotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9w
ZW5PYmplY3RTdG9yZUtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgZWxzZQotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5z
YWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERC
OjpDdXJzb3JOZXh0KTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGRvIHsKLSAgICAgICAgKytjb3VudDsKLSAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJz
b3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotCi0gICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhj
b3VudCk7CisKKyAgICBSZWZQdHI8Q291bnRPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAg
ICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNvdW50KCptX3RyYW5zYWN0aW9uLCAqdGhp
cywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAg
Q2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAg
IExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlUmFuZ2VPcGVyYXRpb24iKTsKLSAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0
b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1f
a2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Ci0gICAgaWYgKGJhY2tpbmdT
dG9yZUN1cnNvcikgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUo
KS0+ZGVsZXRlUmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vy
c29yLT5yZWNvcmRJZGVudGlmaWVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9jYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJFcnJvciBkZWxldGluZyBkYXRhIGluIHJhbmdlIikpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoYmFja2luZ1N0
b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKLSAgICB9Ci0KLSAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7CisKKyAgICBSZWZQdHI8RGVsZXRlUmFuZ2VPcGVyYXRpb24+IG9wZXJh
dGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZVJhbmdl
KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCi12b2lkIENs
ZWFyT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCit2b2lkIENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBj
YWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0gICAgTE9HKFN0b3JhZ2VBUEks
ICJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmNs
ZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgewotICAgICAgICBtX2Nh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGNsZWFyaW5nIG9iamVjdCBzdG9yZSIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAg
TE9HKFN0b3JhZ2VBUEksICJDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIik7CisKKyAgICBSZWZQ
dHI8Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5E
QVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY2xlYXJPYmplY3RTdG9yZSgqbV90cmFuc2FjdGlvbiwg
KnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNr
KQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFj
ayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7
Ci0gICAgYm9vbCBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlT2JqZWN0U3RvcmUobV90cmFuc2Fj
dGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmlkKTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6
OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBtX3RyYW5z
YWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAgfQorCisgICAgUmVmUHRyPERlbGV0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJS
T1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5l
Y3Rpb24oKS5kZWxldGVPYmplY3RTdG9yZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlv
bkNhbGxiYWNrKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJh
Y2spOwotCiAgICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIik7Ci0g
ICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCk7Ci0gICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJhc2UuaWQoKTsKLSAgICB1aW50NjRf
dCBvbGRWZXJzaW9uID0gZGF0YWJhc2UubWV0YWRhdGEoKS52ZXJzaW9uOwotCi0gICAgLy8gRklY
TUU6IERhdGFiYXNlIHZlcnNpb25zIGFyZSBub3cgb2YgdHlwZSB1aW50NjRfdCwgYnV0IHRoaXMg
Y29kZSBleHBlY3RlZCBpbnQ2NF90LgotICAgIEFTU0VSVChtX3ZlcnNpb24gPiAoaW50NjRfdClv
bGRWZXJzaW9uKTsKLSAgICBkYXRhYmFzZS5zZXRDdXJyZW50VmVyc2lvbihtX3ZlcnNpb24pOwot
ICAgIGlmICghZGF0YWJhc2Uuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+dXBkYXRlSURCRGF0YWJhc2VWZXJzaW9uKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgp
LnZlcnNpb24pKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlIHdoZW4gdXBkYXRpbmcgdmVy
c2lvbi4iKTsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICBt
X3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
QVNTRVJUKCFkYXRhYmFzZS5oYXNQZW5kaW5nU2Vjb25kSGFsZk9wZW4oKSk7Ci0gICAgZGF0YWJh
c2Uuc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCpt
X2NhbGxiYWNrcywgKm1fZGF0YWJhc2VDYWxsYmFja3MsIG1fdHJhbnNhY3Rpb25JZCwgbV92ZXJz
aW9uKSk7Ci0gICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCAmZGF0
YWJhc2UsIGRhdGFiYXNlLm1ldGFkYXRhKCkpOworCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5E
QVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY2hhbmdlRGF0YWJhc2VWZXJzaW9uKCptX3RyYW5zYWN0
aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIENyZWF0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiQ3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkucmVtb3ZlT2JqZWN0U3RvcmUobV9vYmplY3RTdG9yZUlkKTsKKyAgICBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnJlbW92ZU9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVJRCk7CiB9CiAK
IHZvaWQgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKaW5kZXggYzRlMzliMy4uOTJiYWEzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaApAQCAtMjgsMTMgKzI4LDE0IEBACiAKICNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJPcGVyYXRpb24uaCIK
LSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBJREJTZXJ2ZXJDb25uZWN0aW9uOworCiBjbGFzcyBDcmVhdGVP
YmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0
b3JlTWV0YWRhdGEpCkBAIC00Miw2ICs0Myw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlTWV0YWRhdGE7IH0KKwogcHJpdmF0ZToKICAgICBDcmVhdGVP
YmplY3RTdG9yZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQogICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCkBAIC02MCw2ICs2NCw5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbih0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklE
RSBGSU5BTDsKKworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
TWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlTWV0YWRhdGE7IH0KKwogcHJp
dmF0ZToKICAgICBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9y
ZU1ldGFkYXRhKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCkBAIC03Mywx
NSArODAsMTkgQEAgcHJpdmF0ZToKIAogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9u
Q2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHZlcnNpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9w
ZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0
X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb24s
IHRyYW5zYWN0aW9uSWQsIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHRyYW5z
YWN0aW9uLCB2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2Fs
bGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZXJzaW9uOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzKiBk
YXRhYmFzZUNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDYWxsYmFja3MuZ2V0
KCk7IH0KKwogcHJpdmF0ZToKLSAgICBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCB2
ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICBWZXJzaW9uQ2hhbmdl
T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgdmVy
c2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25J
ZCkKICAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKICAgICAgICAgLCBtX2NhbGxiYWNrcyhj
YWxsYmFja3MpCiAgICAgICAgICwgbV9kYXRhYmFzZUNhbGxiYWNrcyhkYXRhYmFzZUNhbGxiYWNr
cykKQEAgLTg5LDcgKzEwMCw2IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBpbnQ2NF90IG1fdHJhbnNhY3Rp
b25JZDsKICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBt
X2NhbGxiYWNrczsKICAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VD
YWxsYmFja3M7CkBAIC0xMDUsMTIgKzExNSwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIENy
ZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisg
ICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCiAgICAgewogICAgIH0KIAog
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29u
c3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0
b3JlSUQ7CiB9OwogCiBjbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIDogcHVi
bGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKQEAgLTE1OCwxNiArMTY4LDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVJbmRleE9wZXJhdGlvbih0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwogICAgIH0KICAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBP
VkVSUklERSBGSU5BTDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlkYklu
ZGV4TWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX2luZGV4TWV0YWRhdGE7IH0KKwogcHJpdmF0
ZToKICAgICBDcmVhdGVJbmRleE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGlu
ZGV4TWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAg
ICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX29iamVjdFN0
b3JlSUQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRh
ZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4g
bV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBj
b25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRh
IG1faW5kZXhNZXRhZGF0YTsKIH07CiAKQEAgLTE4MSwxNCArMTk1LDE0IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tl
bmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkK
ICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJZChpbmRleElkKQorICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJ
RChpbmRleElkKQogICAgIHsKICAgICB9CiAKICAgICBjb25zdCBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IGludDY0X3QgbV9v
YmplY3RTdG9yZUlEOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOwogfTsKIAogY2xhc3Mg
RGVsZXRlSW5kZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKQEAgLTE5OCwxNiAr
MjEyLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVJbmRl
eE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSkpOwog
ICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3Vj
Y2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsgfQorICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIGlkYkluZGV4TWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX2luZGV4TWV0YWRh
dGE7IH0KKwogcHJpdmF0ZToKICAgICBEZWxldGVJbmRleE9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAg
ICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBtX2luZGV4TWV0
YWRhdGEoaW5kZXhNZXRhZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0
U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKICAgICBjb25zdCBJ
REJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKIH07CiAKQEAgLTIyMSwxMyArMjM5LDEz
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJ
ZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBt
X2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90
IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKICAg
ICBjb25zdCBJREJJbmRleE1ldGFkYXRhIG1faW5kZXhNZXRhZGF0YTsKIH07CiAKQEAgLTIzOCwx
MiArMjU2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZXRPcGVy
YXRpb24odHJhbnNhY3Rpb24sIG1ldGFkYXRhLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlS
YW5nZSwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJ
TkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmpl
Y3RTdG9yZUlEOyB9CisgICAgaW50NjRfdCBpbmRleElEKCkgY29uc3QgeyByZXR1cm4gbV9pbmRl
eElEOyB9CisgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnNvclR5cGU7IH0KKyAgICBJREJLZXlSYW5nZSoga2V5UmFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX2tleVJhbmdlLmdldCgpOyB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KKyAgICBib29sIGF1
dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9JbmNyZW1lbnQ7IH0KKyAgICBJREJL
ZXlQYXRoIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2tleVBhdGg7IH0KKwogcHJpdmF0ZToK
ICAgICBHZXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBt
X2RhdGFiYXNlSWQobWV0YWRhdGEuaWQpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9vYmpl
Y3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCiAg
ICAgICAgICwgbV9rZXlQYXRoKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
ZCkua2V5UGF0aCkKICAgICAgICAgLCBtX2F1dG9JbmNyZW1lbnQobWV0YWRhdGEub2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkKS5hdXRvSW5jcmVtZW50KQogICAgICAgICAsIG1fa2V5UmFu
Z2Uoa2V5UmFuZ2UpCkBAIC0yNTUsOSArMjgxLDggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGlu
dDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwot
ICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RT
dG9yZUlEOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOwogICAgIGNvbnN0IElEQktleVBh
dGggbV9rZXlQYXRoOwogICAgIGNvbnN0IGJvb2wgbV9hdXRvSW5jcmVtZW50OwogICAgIGNvbnN0
IFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKQEAgLTI2NywzMyArMjkyLDQwIEBAIHBy
aXZhdGU6CiAKIGNsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5z
YWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtl
eXMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYg
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJ
ZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFB1dE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5kZXhJZHMsIGlu
ZGV4S2V5cykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFB1dE9wZXJhdGlvbih0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5k
ZXhJZHMsIGluZGV4S2V5cykpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAg
IElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9w
dXRNb2RlOyB9CisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlOyB9CisgICAgSURCS2V5KiBrZXkoKSBjb25z
dCB7IHJldHVybiBtX2tleS5nZXQoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5k
ZXhJRHMoKSBjb25zdCB7IHJldHVybiBtX2luZGV4SURzOyB9CisgICAgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mIGluZGV4S2V5cygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhLZXlzOyB9CisgICAg
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQo
KTsgfQorICAgIFNoYXJlZEJ1ZmZlciogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdl
dCgpOyB9CisKIHByaXZhdGU6Ci0gICAgUHV0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYgdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQorICAgIFB1
dE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtl
eXMpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2Rh
dGFiYXNlSWQoZGF0YWJhc2VJZCkKICAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3Jl
KQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgICAgICwgbV9rZXkoa2V5KQogICAgICAg
ICAsIG1fcHV0TW9kZShwdXRNb2RlKQogICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
LSAgICAgICAgLCBtX2luZGV4SWRzKGluZGV4SWRzKQorICAgICAgICAsIG1faW5kZXhJRHMoaW5k
ZXhJZHMpCiAgICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQogICAgIHsKICAgICB9CiAK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNv
bnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwogICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRh
dGEgbV9vYmplY3RTdG9yZTsKICAgICBjb25zdCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX3ZhbHVl
OwogICAgIGNvbnN0IFJlZlB0cjxJREJLZXk+IG1fa2V5OwogICAgIGNvbnN0IElEQkRhdGFiYXNl
QmFja2VuZDo6UHV0TW9kZSBtX3B1dE1vZGU7CiAgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNr
cz4gbV9jYWxsYmFja3M7Ci0gICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1faW5kZXhJZHM7Cisg
ICAgY29uc3QgVmVjdG9yPGludDY0X3Q+IG1faW5kZXhJRHM7CiAgICAgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4gbV9pbmRleEtleXM7CiB9OwogCkBAIC0zMTcsMTcgKzM0OSwyNiBAQCBwcml2YXRl
OgogCiBjbGFzcyBPcGVuQ3Vyc29yT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERC
OjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFz
a1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5n
ZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgT3BlbkN1cnNvck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIGNhbGxiYWNrcykpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAg
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsg
fQorICAgIGludDY0X3QgaW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRDsgfQorICAg
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlyZWN0aW9uOyB9CisgICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2N1cnNvclR5cGU7IH0KKyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIHRhc2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90YXNrVHlwZTsgfQorICAgIElEQktleVJh
bmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2UuZ2V0KCk7IH0KKyAgICBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX2RpcmVjdGlvbjsgfQorICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBPcGVuQ3Vyc29yT3Bl
cmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rp
b24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6
OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
ICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24s
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRh
c2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAg
ICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9kYXRhYmFzZUlk
KGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0g
ICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9i
amVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCiAgICAgICAgICwgbV9r
ZXlSYW5nZShrZXlSYW5nZSkKICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAg
ICAgICwgbV9jdXJzb3JUeXBlKGN1cnNvclR5cGUpCkBAIC0zMzcsOSArMzc4LDggQEAgcHJpdmF0
ZToKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3Qg
bV9vYmplY3RTdG9yZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElkOworICAgIGNvbnN0
IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOworICAgIGNvbnN0IGludDY0X3QgbV9pbmRleElEOwog
ICAgIGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CiAgICAgY29uc3Qg
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgY29uc3QgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKQEAgLTM0OSw3MyArMzg5LDgxIEBAIHByaXZh
dGU6CiAKIGNsYXNzIENvdW50T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb3VudE9wZXJhdGlvbih0
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvdW50T3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tz
KSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RT
dG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9CisgICAgaW50NjRfdCBp
bmRleElEKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleElEOyB9CisgICAgSURCS2V5UmFuZ2UqIGtl
eVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5nZS5nZXQoKTsgfQorICAgIElEQkNhbGxi
YWNrcyogY2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KIHBy
aXZhdGU6Ci0gICAgQ291bnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgQ291bnRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0g
ICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAgICwgbV9vYmplY3RTdG9y
ZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleElkKGluZGV4SWQpCisgICAgICAg
ICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9pbmRleElEKGlu
ZGV4SWQpCiAgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKICAgICAgICAgLCBtX2NhbGxi
YWNrcyhjYWxsYmFja3MpCiAgICAgewogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7
Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBt
X2luZGV4SWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3Qg
aW50NjRfdCBtX2luZGV4SUQ7CiAgICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJh
bmdlOwogICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIAog
Y2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0
aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGVsZXRlUmFuZ2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERSBGSU5BTDsKKworICAg
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsg
fQorICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFj
a3MuZ2V0KCk7IH0KKyAgICBJREJLZXlSYW5nZSoga2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X2tleVJhbmdlLmdldCgpOyB9CisKIHByaXZhdGU6Ci0gICAgRGVsZXRlUmFuZ2VPcGVyYXRpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIERlbGV0ZVJhbmdlT3BlcmF0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
LSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0
b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3Rv
cmVJZCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQogICAgICAgICAsIG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fZGF0YWJhc2VJZDsK
LSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJRDsKICAgICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7
CiAgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCi1jbGFz
cyBDbGVhck9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24geworY2xhc3MgQ2xlYXJPYmpl
Y3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xlYXJPcGVyYXRpb24o
dHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwogICAgIH0KICAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklE
RSBGSU5BTDsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJRDsgfQorICAgIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsYmFja3MuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBDbGVhck9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAg
ICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJ
ZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlk
KQogICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICB7CiAgICAgfQogCiAgICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBp
bnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsK
KyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKICAgICBjb25zdCBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxl
dmVsREIuY3BwCmluZGV4IDBlYmQyZTYuLjA2MDU0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5n
U3RvcmVMZXZlbERCLmNwcApAQCAtMTkyMiwxMSArMTkyMiw2IEBAIHZvaWQgSURCQmFja2luZ1N0
b3JlTGV2ZWxEQjo6ZXN0YWJsaXNoQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFu
c2FjdGlvCiAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uSUQs
IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6Y3JlYXRlKHRyYW5zYWN0aW9uSUQs
IHRoaXMpKTsKIH0KIAotSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2
NF90IHRyYW5zYWN0aW9uSUQpCi17Ci0gICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbklEKTsKLX0KLQogdm9pZCBJREJCYWNraW5nU3RvcmVMZXZlbERC
OjpyZW1vdmVCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREIqIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+dHJhbnNhY3Rpb25JRCgpKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCmluZGV4IDNkYTRmYjMuLjBjNjk1MDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0
b3JlTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCkBAIC0xMTAsNyArMTEwLDYgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGludCBjb21wYXJlSW5kZXhLZXlzKGNvbnN0IExldmVsREJTbGljZSYsIGNv
bnN0IExldmVsREJTbGljZSYpOwogCi0gICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRl
cmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0
aW9uSUQpOwogICAgIHZvaWQgcmVtb3ZlQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oSURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKik7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKaW5kZXggYjVjZjgyMS4uMzk5YzViMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKQEAgLTMxLDExICsz
MSw0MiBAQAogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgogI2luY2x1ZGUg
IklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oIgorI2luY2x1ZGUgIklEQkN1cnNv
ckJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJJbmRleFdyaXRlci5oIgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorY2xhc3MgQ2FsbE9uRGVzdHJ1
Y3QgeworcHVibGljOgorICAgIENhbGxPbkRlc3RydWN0KEZ1bmN0aW9uVHlwZSBjYWxsYmFjaywg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX29yaWdpbmFsQ2FsbGJhY2soY2Fs
bGJhY2spCisgICAgeworICAgICAgICBzZXRBcmd1bWVudHMoYXJndW1lbnRzLi4uKTsKKyAgICB9
CisKKyAgICB+Q2FsbE9uRGVzdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgYXV0byBjYWxsYmFjayA9
IG1fY2FsbGJhY2tUb1BlcmZvcm07CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNr
XSgpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHZvaWQgc2V0QXJndW1lbnRzKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAg
ICBhdXRvIGNhbGxiYWNrID0gbV9vcmlnaW5hbENhbGxiYWNrOworICAgICAgICBtX2NhbGxiYWNr
VG9QZXJmb3JtID0gW2NhbGxiYWNrLCBhcmd1bWVudHMuLi5dKCkgeworICAgICAgICAgICAgY2Fs
bGJhY2soYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
RnVuY3Rpb25UeXBlIG1fb3JpZ2luYWxDYWxsYmFjazsKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gbV9jYWxsYmFja1RvUGVyZm9ybTsKK307CisKIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVMZXZlbERCKiBiYWNr
aW5nU3RvcmUpCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAgLCBtX2Ns
b3NlZChmYWxzZSkKQEAgLTUxLDEzICs4Miw2IEBAIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSog
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKQogICAg
IHJldHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKIH0KIAotSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25JbnRlcmZhY2UqIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZXByZWNhdGVkQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKQotewotICAgIGlmICgh
bV9iYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2JhY2tpbmdT
dG9yZS0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSUQpOwot
fQotCiBib29sIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjppc0Nsb3NlZCgpCiB7CiAgICAg
cmV0dXJuIG1fY2xvc2VkOwpAQCAtODcsNzQgKzExMSw3MCBAQCB2b2lkIElEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCOjpjbG9zZSgpCiAKIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6
Om9wZW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGNvbnN0IEhhc2hTZXQ8aW50
NjRfdD4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24g
c3VjY2Vzc0NhbGxiYWNrKQogeworICAgIENhbGxPbkRlc3RydWN0PEJvb2xDYWxsYmFja0Z1bmN0
aW9uLCBib29sPiBjYWxsT25EZXN0cnVjdChzdWNjZXNzQ2FsbGJhY2ssIHRydWUpOworCiAgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNz
Q2FsbGJhY2tdKCkgewotICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICAg
ICAgfSk7CisgICAgICAgIGNhbGxPbkRlc3RydWN0LnNldEFyZ3VtZW50cyhmYWxzZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2JhY2tpbmdTdG9yZS0+ZXN0YWJsaXNoQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JRCk7Ci0gICAgY2FsbE9uTWFpblRocmVhZChb
c3VjY2Vzc0NhbGxiYWNrXSgpIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHRydWUpOwotICAg
IH0pOwogfQogCiB2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpiZWdpblRyYW5zYWN0
aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25DYWxsYmFjaykKIHsKKyAgICBDYWxsT25EZXN0cnVjdDxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+
IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CisKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPiB0cmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklEKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24p
OwogCiAgICAgdHJhbnNhY3Rpb24tPmJlZ2luKCk7Ci0gICAgY2FsbE9uTWFpblRocmVhZChjb21w
bGV0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpj
b21taXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0
aW9uIHN1Y2Nlc3NDYWxsYmFjaykKIHsKKyAgICBDYWxsT25EZXN0cnVjdDxCb29sQ2FsbGJhY2tG
dW5jdGlvbiwgYm9vbD4gY2FsbE9uRGVzdHJ1Y3Qoc3VjY2Vzc0NhbGxiYWNrLCB0cnVlKTsKKwog
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+IHRyYW5zYWN0aW9u
ID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSUQpOwogICAgIEFT
U0VSVCh0cmFuc2FjdGlvbik7CiAKLSAgICBib29sIHJlc3VsdCA9IHRyYW5zYWN0aW9uLT5jb21t
aXQoKTsKLSAgICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNzQ2FsbGJhY2ssIHJlc3VsdF0oKSB7
Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhyZXN1bHQpOwotICAgIH0pOworICAgIGNhbGxPbkRl
c3RydWN0LnNldEFyZ3VtZW50cyh0cmFuc2FjdGlvbi0+Y29tbWl0KCkpOwogfQogCiB2b2lkIElE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpyZXNldFRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNh
Y3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAg
ICBDYWxsT25EZXN0cnVjdDxzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4+IGNhbGxPbkRlc3RydWN0KGNv
bXBsZXRpb25DYWxsYmFjayk7CisKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCPiB0cmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklEKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwogCiAgICAgdHJhbnNhY3Rp
b24tPnJlc2V0VHJhbnNhY3Rpb24oKTsKLSAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRpb25D
YWxsYmFjayk7CiB9CiAKIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnJvbGxiYWNr
VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
Y29tcGxldGlvbkNhbGxiYWNrKQogeworICAgIENhbGxPbkRlc3RydWN0PHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPj4gY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKKwogICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSUQpOwogICAgIEFTU0VSVCh0cmFu
c2FjdGlvbik7CiAKICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICBjYWxsT25NYWlu
VGhyZWFkKGNvbXBsZXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgSURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3QgZGF0
YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhLCBJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8UmVmUHRyPElEQktleT4+
PiYgaW5kZXhLZXlzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKKyAgICBDYWxsT25EZXN0cnVjdDxzdGQ6OmZ1
bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+LCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+PiBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2ssIDApOwog
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+IGJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
SUQpOwogICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7CiAKICAgICBSZWZQdHI8
SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKICAgICBib29sIG9rID0gbV9i
YWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUoKmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uLCBkYXRhYmFzZUlELCBvYmplY3RTdG9yZUlELCBwcmltYXJ5S2V5LCByZWNvcmRJZGVudGlm
aWVyKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRp
b25DYWxsYmFja10oKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvcjogc2V0dGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgfSk7CisgICAgICAg
IGNhbGxPbkRlc3RydWN0LnNldEFyZ3VtZW50cyhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBzZXR0aW5n
IGluZGV4IGtleXMuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghcmVjb3Jk
SWRlbnRpZmllcikgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJh
Y2tdKCkgewotICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3I6IHNldHRpbmcgaW5kZXgga2V5cyBmb3Igb2JqZWN0IHN0b3JlLiIpKTsKLSAgICAgICAgfSk7
CisgICAgICAgIGNhbGxPbkRlc3RydWN0LnNldEFyZ3VtZW50cyhJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
OiBzZXR0aW5nIGluZGV4IGtleXMgZm9yIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTE2NCwxNSArMTg0LDExIEBAIHZvaWQgSURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3QgZGF0
CiAKICAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+bWFrZUlu
ZGV4V3JpdGVycyh0cmFuc2FjdGlvbklELCBkYXRhYmFzZUlELCBvYmplY3RTdG9yZU1ldGFkYXRh
LCBwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhJRHMsIGluZGV4S2V5cywgaW5kZXhXcml0ZXJzLCAm
ZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1
Y2Nlc3MpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrXSgp
IHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBi
YWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICB9KTsK
KyAgICAgICAgY2FsbE9uRGVzdHJ1Y3Quc2V0QXJndW1lbnRzKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6
IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7Ci0gICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywgZXJyb3JNZXNzYWdlXSgpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAg
IH0pOworICAgICAgICBjYWxsT25EZXN0cnVjdC5zZXRBcmd1bWVudHMoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVz
c2FnZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODAsMTIgKzE5NiwzNDggQEAg
dm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJh
bnNhY3Rpb25JRCwgaW50NjRfdCBkYXQKICAgICAgICAgSURCSW5kZXhXcml0ZXIqIGluZGV4V3Jp
dGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwogICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJ
bmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm1fYmFja2luZ1N0b3JlLCAqYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24sIGRhdGFiYXNlSUQsIG9iamVjdFN0b3JlSUQpOwogICAgIH0KK30K
IAotICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7Ci0gICAgICAg
IGNvbXBsZXRpb25DYWxsYmFjaygwKTsKLSAgICB9KTsKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREI6OmNyZWF0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNh
Y3Rpb24sIGNvbnN0IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6
ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNh
bGxiYWNrKQoreworICAgIENhbGxPbkRlc3RydWN0PHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+KT4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4+IGNh
bGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjaywgMCk7CisgICAgSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0
b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24pOworCisgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZSA9IG9wZXJh
dGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCkubmFtZTsKKworICAgIGlmICghbV9iYWNraW5nU3Rv
cmUtPmNyZWF0ZU9iamVjdFN0b3JlKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVNZXRhZGF0YSgpLmlkLCBv
YmplY3RTdG9yZU5hbWUsIG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCkua2V5UGF0aCwg
b3BlcmF0aW9uLm9iamVjdFN0b3JlTWV0YWRhdGEoKS5hdXRvSW5jcmVtZW50KSkgeworICAgICAg
ICBjYWxsT25EZXN0cnVjdC5zZXRBcmd1bWVudHMoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5h
bCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBvYmplY3RTdG9yZU5hbWUudXRm
OCgpLmRhdGEoKSkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAordm9pZCBJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3JlYXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0
cmFuc2FjdGlvbiwgY29uc3QgQ3JlYXRlSW5kZXhPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpm
dW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCit7CisgICAgQ2FsbE9uRGVzdHJ1Y3Q8c3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPj4gY2Fs
bE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrLCAwKTsKKyAgICBJREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5n
U3RvcmVUcmFuc2FjdGlvbik7CisKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhID0gb3BlcmF0aW9uLmlkYkluZGV4TWV0YWRhdGEoKTsKKyAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5jcmVhdGVJbmRleCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9u
LmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgaW5kZXhNZXRhZGF0
YS5pZCwgaW5kZXhNZXRhZGF0YS5uYW1lLCBpbmRleE1ldGFkYXRhLmtleVBhdGgsIGluZGV4TWV0
YWRhdGEudW5pcXVlLCBpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7CisgICAgICAgIGNhbGxP
bkRlc3RydWN0LnNldEFyZ3VtZW50cyhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZSBpbmRleCAnJXMnLiIsIGluZGV4TWV0YWRhdGEubmFtZS51
dGY4KCkuZGF0YSgpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIElEQlNl
cnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZWxldGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQm
IHRyYW5zYWN0aW9uLCBjb25zdCBEZWxldGVJbmRleE9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25D
YWxsYmFjaykKK3sKKyAgICBDYWxsT25EZXN0cnVjdDxzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+PiBj
YWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2ssIDApOworICAgIElEQkJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdT
dG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKTsKKworICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEgPSBvcGVyYXRpb24uaWRiSW5kZXhNZXRhZGF0YSgpOworICAgIGlmICghbV9iYWNr
aW5nU3RvcmUtPmRlbGV0ZUluZGV4KCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBpbmRleE1ldGFk
YXRhLmlkKSkgeworICAgICAgICBjYWxsT25EZXN0cnVjdC5zZXRBcmd1bWVudHMoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmlu
Zzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBpbmRleCAnJXMnLiIsIGluZGV4TWV0
YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpnZXQoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgR2V0T3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVu
Y3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxi
YWNrKQoreworICAgIENhbGxPbkRlc3RydWN0PHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+KT4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4+IGNhbGxP
bkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjaywgMCk7CisgICAgSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24pOworCisgICAgUmVmUHRyPElEQktleT4ga2V5OworCisgICAgaWYgKG9w
ZXJhdGlvbi5rZXlSYW5nZSgpLT5pc09ubHlLZXkoKSkKKyAgICAgICAga2V5ID0gb3BlcmF0aW9u
LmtleVJhbmdlKCktPmxvd2VyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKyAgICAgICAgaWYg
KG9wZXJhdGlvbi5pbmRleElEKCkgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Cisg
ICAgICAgICAgICBBU1NFUlQob3BlcmF0aW9uLmN1cnNvclR5cGUoKSAhPSBJbmRleGVkREI6OkN1
cnNvcktleU9ubHkpOworICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUgUmV0cmlldmFsIE9wZXJh
dGlvbgorICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9w
ZW5PYmplY3RTdG9yZUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9u
LmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtl
eVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAob3BlcmF0aW9uLmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvcktl
eU9ubHkpIHsKKyAgICAgICAgICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0
aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUt
Pm9wZW5JbmRleEtleUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9u
LmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmlu
ZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEluZGV4IFJlZmVyZW5jZWQg
VmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1
cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IoKmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9y
ZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlSYW5nZSgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3Mo
KS0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOworICAgIH0KKworICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXk7CisgICAgYm9vbCBvazsKKyAgICBpZiAob3BlcmF0aW9uLmluZGV4
SUQoKSA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgLy8gT2JqZWN0
IFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAgVmVjdG9yPGNoYXI+IHZhbHVlOwor
ICAgICAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQoKmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9y
ZUlEKCksICprZXksIHZhbHVlKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgb3Bl
cmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVj
b3JkLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2
YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25T
dWNjZXNzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
b3BlcmF0aW9uLmF1dG9JbmNyZW1lbnQoKSAmJiAhb3BlcmF0aW9uLmtleVBhdGgoKS5pc051bGwo
KSkgeworICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoU2hhcmVk
QnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgb3BlcmF0aW9uLmtleVBhdGgoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRpb24uY2FsbGJh
Y2tzKCktPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7CisgICAg
ICAgIHJldHVybjsKKworICAgIH0KKworICAgIC8vIEZyb20gaGVyZSB3ZSBhcmUgZGVhbGluZyBv
bmx5IHdpdGggaW5kZXhlcy4KKyAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRQcmltYXJ5S2V5
VmlhSW5kZXgoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgp
LmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksICpr
ZXksIHByaW1hcnlLZXkpOworICAgIGlmICghb2spIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUlu
ZGV4LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXByaW1hcnlLZXkpIHsK
KyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAob3BlcmF0aW9uLmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6
OkN1cnNvcktleU9ubHkpIHsKKyAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJh
dGlvbgorICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcyhwcmltYXJ5S2V5
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEluZGV4IFJlZmVyZW5j
ZWQgVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAg
ICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCks
ICpwcmltYXJ5S2V5LCB2YWx1ZSk7CisgICAgaWYgKCFvaykgeworICAgICAgICBvcGVyYXRpb24u
Y2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewor
ICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChvcGVyYXRpb24uYXV0b0luY3JlbWVudCgpICYmICFvcGVyYXRp
b24ua2V5UGF0aCgpLmlzTnVsbCgpKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+
b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBwcmltYXJ5S2V5LCBv
cGVyYXRpb24ua2V5UGF0aCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBvcGVyYXRp
b24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVl
KSk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnB1dChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBQdXRPcGVyYXRpb24mIG9wZXJhdGlvbiwg
c3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0
aW9uQ2FsbGJhY2spCit7CisgICAgQ2FsbE9uRGVzdHJ1Y3Q8c3RkOjpmdW5jdGlvbjx2b2lkKFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9y
Pj4gY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrLCAwKTsKKyAgICBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChi
YWNraW5nU3RvcmVUcmFuc2FjdGlvbik7CisKKyAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZh
bHNlOworCisgICAgUmVmUHRyPElEQktleT4ga2V5OworICAgIGlmIChvcGVyYXRpb24ucHV0TW9k
ZSgpICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIG9wZXJhdGlvbi5vYmpl
Y3RTdG9yZSgpLmF1dG9JbmNyZW1lbnQgJiYgIW9wZXJhdGlvbi5rZXkoKSkgeworICAgICAgICBS
ZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gbV9iYWNraW5nU3RvcmUtPmdlbmVyYXRlS2V5KHRy
YW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RT
dG9yZSgpLmlkKTsKKyAgICAgICAga2V5V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYg
KCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OkNvbnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVk
LiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBrZXkgPSBhdXRv
SW5jS2V5OworICAgIH0gZWxzZQorICAgICAgICBrZXkgPSBvcGVyYXRpb24ua2V5KCk7CisKKyAg
ICBBU1NFUlQoa2V5KTsKKyAgICBBU1NFUlQoa2V5LT5pc1ZhbGlkKCkpOworCisgICAgUmVmUHRy
PElEQlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXI7CisgICAgaWYgKG9wZXJhdGlv
bi5wdXRNb2RlKCkgPT0gSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5KSB7CisgICAgICAgIGJv
b2wgb2sgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSgqYmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9i
amVjdFN0b3JlKCkuaWQsICprZXksIHJlY29yZElkZW50aWZpZXIpOworICAgICAgICBpZiAoIW9r
KSB7CisgICAgICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjb3JkSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhp
c3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+IGluZGV4V3Jp
dGVyczsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJhaW50
cyA9IGZhbHNlOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3Jl
LT5tYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLmlkKCksIHRyYW5zYWN0aW9uLmRhdGFiYXNl
KCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCksICprZXksIGtleVdhc0dlbmVyYXRlZCwg
b3BlcmF0aW9uLmluZGV4SURzKCksIG9wZXJhdGlvbi5pbmRleEtleXMoKSwgaW5kZXhXcml0ZXJz
LCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9y
ZVN1Y2Nlc3MpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
SW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5cy4i
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFvYmV5c0NvbnN0cmFpbnRzKSB7
CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNz
YWdlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBCZWZvcmUgdGhpcyBwb2lu
dCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUg
dHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KKyAgICBiYWNraW5nU3RvcmVTdWNjZXNzID0g
bV9iYWNraW5nU3RvcmUtPnB1dFJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuaWQsICprZXks
IG9wZXJhdGlvbi52YWx1ZSgpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICBpZiAoIWJh
Y2tpbmdTdG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWluZyBw
dXQvYWRkLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIElEQkluZGV4V3Jp
dGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKKyAgICAgICAgaW5kZXhX
cml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICptX2JhY2tpbmdT
dG9yZSwgKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlk
KCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmlkKTsKKyAgICB9CisKKyAgICBpZiAob3BlcmF0
aW9uLm9iamVjdFN0b3JlKCkuYXV0b0luY3JlbWVudCAmJiBvcGVyYXRpb24ucHV0TW9kZSgpICE9
IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktl
eTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPnVwZGF0
ZUtleUdlbmVyYXRvcih0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBv
cGVyYXRpb24ub2JqZWN0U3RvcmUoKS5pZCwgKmtleSwgIWtleVdhc0dlbmVyYXRlZCk7CisgICAg
ICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgb3BlcmF0aW9uLmNhbGxiYWNr
cygpLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREI6Om9wZW5DdXJzb3IoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlv
biwgY29uc3QgT3BlbkN1cnNvck9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sK
KyAgICBDYWxsT25EZXN0cnVjdDxzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPik+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+PiBjYWxsT25EZXN0cnVj
dChjb21wbGV0aW9uQ2FsbGJhY2ssIDApOworICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKTsKKworICAgIC8vIFRoZSBmcm9udGVuZCBoYXMgYmVndW4gaW5kZXhpbmcsIHNvIHRo
aXMgcGF1c2VzIHRoZSB0cmFuc2FjdGlvbgorICAgIC8vIHVudGlsIHRoZSBpbmRleGluZyBpcyBj
b21wbGV0ZS4gVGhpcyBjYW4ndCBoYXBwZW4gYW55IGVhcmxpZXIKKyAgICAvLyBiZWNhdXNlIHdl
IGRvbid0IHdhbnQgdG8gc3dpdGNoIHRvIGVhcmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBsZQorICAg
IC8vIGluZGV4ZXMgYXJlIGJlaW5nIGNyZWF0ZWQgaW4gYSByb3csIHdpdGggcHV0KCkncyBpbiBi
ZXR3ZWVuLgorICAgIGlmIChvcGVyYXRpb24udGFza1R5cGUoKSA9PSBJREJEYXRhYmFzZUJhY2tl
bmQ6OlByZWVtcHRpdmVUYXNrKQorICAgICAgICB0cmFuc2FjdGlvbi5hZGRQcmVlbXB0aXZlRXZl
bnQoKTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tp
bmdTdG9yZUN1cnNvcjsKKyAgICBpZiAob3BlcmF0aW9uLmluZGV4SUQoKSA9PSBJREJJbmRleE1l
dGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhdGlvbi5jdXJzb3JUeXBl
KCkgIT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KTsKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcigqYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVj
dFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIG9wZXJhdGlvbi5kaXJlY3Rpb24oKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG9wZXJhdGlvbi50YXNrVHlwZSgpID09IElE
QkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzayk7CisgICAgICAgIGlmIChvcGVyYXRpb24uY3Vy
c29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKKyAgICAgICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IoKmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlv
bi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlSYW5n
ZSgpLCBvcGVyYXRpb24uZGlyZWN0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBi
YWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKCpiYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRp
b24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVyYXRpb24ua2V5UmFu
Z2UoKSwgb3BlcmF0aW9uLmRpcmVjdGlvbigpKTsKKyAgICB9CisKKyAgICBpZiAoIWJhY2tpbmdT
dG9yZUN1cnNvcikgeworICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2Vzcyhz
dGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPigwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElE
QkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGU+KG9wZXJhdGlvbi50YXNrVHlwZSgpKSk7CisKKyAg
ICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gY3Vyc29yID0gdHJhbnNhY3Rpb24uY3JlYXRlQ3Vy
c29yQmFja2VuZCgqYmFja2luZ1N0b3JlQ3Vyc29yLCBvcGVyYXRpb24uY3Vyc29yVHlwZSgpLCB0
YXNrVHlwZSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSk7CisgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlL
ZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKKworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCOjpjb3VudChJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBD
b3VudE9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBDYWxsT25EZXN0
cnVjdDxzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+LCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+PiBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2Fs
bGJhY2ssIDApOworICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb24uaWQoKSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKTsKKworICAg
IHVpbnQzMl90IGNvdW50ID0gMDsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50
ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7CisKKyAgICBpZiAob3BlcmF0aW9uLmluZGV4SUQo
KSA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCisgICAgICAgIGJhY2tpbmdTdG9yZUN1
cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoKmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5v
YmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5rZXlSYW5nZSgpLCBJbmRleGVkREI6OkN1cnNvck5l
eHQpOworICAgIGVsc2UKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3Rv
cmUtPm9wZW5JbmRleEtleUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0
aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9u
LmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
CisgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3MoY291bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZG8geworICAgICAgICArK2NvdW50OworICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+
Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3Vj
Y2Vzcyhjb3VudCk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0
ZVJhbmdlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IERlbGV0ZVJh
bmdlT3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIENhbGxPbkRlc3Ry
dWN0PHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4+IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxs
YmFjaywgMCk7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5n
U3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOworCisgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9yZUN1cnNvcigqYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0
b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7Cisg
ICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVSZWNvcmQoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCks
IGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKSkgeworICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGRlbGV0aW5nIGRh
dGEgaW4gcmFuZ2UiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkp
OworICAgIH0KKworICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKCk7Cit9CisK
K3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNsZWFyT2JqZWN0U3RvcmUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgQ2xlYXJPYmplY3RTdG9yZU9wZXJh
dGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBDYWxsT25EZXN0cnVjdDxzdGQ6
OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+LCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+PiBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2ssIDAp
OworICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQo
KSk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKTsKKworICAgIGlmICghbV9i
YWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCkpKSB7
CisgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgY2xl
YXJpbmcgb2JqZWN0IHN0b3JlIik7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25F
cnJvcihlcnJvcik7CisgICAgICAgIGNhbGxPbkRlc3RydWN0LnNldEFyZ3VtZW50cyhlcnJvci5y
ZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6
OmRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNv
bnN0IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248
dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQor
eworICAgIENhbGxPbkRlc3RydWN0PHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+KT4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4+IGNhbGxPbkRlc3Ry
dWN0KGNvbXBsZXRpb25DYWxsYmFjaywgMCk7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24pOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3Rv
cmVNZXRhZGF0YSA9IG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCk7CisKKyAgICBpZiAo
IW1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSgqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkp
IHsKKyAgICAgICAgY2FsbE9uRGVzdHJ1Y3Quc2V0QXJndW1lbnRzKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1h
dCgiSW50ZXJuYWwgZXJyb3IgZGVsZXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgb2JqZWN0U3Rv
cmVNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNoYW5nZURhdGFiYXNlVmVy
c2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlv
bjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2sp
Cit7CisgICAgQ2FsbE9uRGVzdHJ1Y3Q8c3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4pPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPj4gY2FsbE9uRGVz
dHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrLCAwKTsKKyAgICBJREJCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVU
cmFuc2FjdGlvbik7CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFiYXNlID0gdHJhbnNh
Y3Rpb24uZGF0YWJhc2UoKTsKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS5pZCgp
OworICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb247
CisKKyAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVpbnQ2
NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCisgICAgQVNTRVJUKG9wZXJhdGlv
bi52ZXJzaW9uKCkgPiAoaW50NjRfdClvbGRWZXJzaW9uKTsKKyAgICBkYXRhYmFzZS5zZXRDdXJy
ZW50VmVyc2lvbihvcGVyYXRpb24udmVyc2lvbigpKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3Jl
LT51cGRhdGVJREJEYXRhYmFzZVZlcnNpb24oKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCBkYXRh
YmFzZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb24pKSB7CisgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJs
ZSBzdG9yYWdlIHdoZW4gdXBkYXRpbmcgdmVyc2lvbi4iKTsKKyAgICAgICAgb3BlcmF0aW9uLmNh
bGxiYWNrcygpLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgY2FsbE9uRGVzdHJ1Y3Quc2V0QXJn
dW1lbnRzKGVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKCFkYXRhYmFzZS5oYXNQZW5kaW5nU2Vjb25kSGFsZk9wZW4oKSk7CisgICAgZGF0YWJhc2Uu
c2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCpvcGVy
YXRpb24uY2FsbGJhY2tzKCksICpvcGVyYXRpb24uZGF0YWJhc2VDYWxsYmFja3MoKSwgdHJhbnNh
Y3Rpb24uaWQoKSwgb3BlcmF0aW9uLnZlcnNpb24oKSkpOworICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sICZkYXRhYmFzZSwgZGF0YWJhc2UubWV0
YWRhdGEoKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oCmluZGV4IDZjNDhiMTIuLmQ5ZGVlZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29u
bmVjdGlvbkxldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmgKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBzZXJ2ZXIgY29ubmVjdGlvbiBwcm92aWRlcyBh
IHN5bmNocm9ub3VzIGFjY2Vzc29yIHRvIHRoZSBpbi1wcm9jZXNzIGJhY2tpbmcgc3RvcmUgb2Jq
ZWN0cy4KICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24u
CiAgICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5n
U3RvcmUoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
SW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFu
c2FjdGlvbklEKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpIE9WRVJS
SURFOwogCkBAIC02NSw2ICs2NCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJvbGxi
YWNrVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5k
ZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2NF90
IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJLZXkmIHBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3RvcjxW
ZWN0b3I8UmVmUHRyPElEQktleT4+PiYgaW5kZXhLZXlzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjayk7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29u
c3QgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0
IENyZWF0ZUluZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBEZWxldGVJ
bmRleE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IEdldE9wZXJhdGlvbiYsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxi
YWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYsIGNvbnN0IFB1dE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgb3BlbkN1cnNvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBPcGVuQ3Vy
c29yT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBj
b3VudChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDb3VudE9wZXJhdGlvbiYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNh
bGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlUmFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rp
b25CYWNrZW5kJiwgY29uc3QgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rp
b248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNr
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxs
YmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZURhdGFiYXNlVmVyc2lvbihJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25D
aGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CiBwcml2YXRlOgogICAgIElE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUxldmVsREIqKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDQ4OTE3ZWMuLjM0MzlmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNjQsNyArMzA2NCw3IEBACiAJCTkzQjcwRDYzMDlF
QjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9N
QmluZGluZy5jcHAgKi87IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJp
bmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
QjcwRDQ4MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0I3MEQ2OTA5RUIwQzdDMDA5RDg0
NjggLyogSlNFdmVudExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzQjcwRDREMDlFQjBDN0MwMDlEODQ2OCAvKiBKU0V2ZW50TGlzdGVu
ZXIuY3BwICovOyB9OwotCQk5M0I3MEQ2QTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExpc3Rl
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3
MEQ0RTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmggKi87IH07CisJCTkzQjcw
RDZBMDlFQjBDN0MwMDlEODQ2OCAvKiBKU0V2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDRFMDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0V2ZW50TGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5M0I3MEQ2QjA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVtZW50
RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2OCAvKiBKU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMu
Y3BwICovOyB9OwogCQk5M0I3MEQ2QzA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVtZW50
RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNCNzBE
NkYwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4
IC8qIFNjcmlwdENvbnRyb2xsZXIuY3BwICovOyB9OwpAQCAtNTEwNyw3ICs1MTA3LDcgQEAKIAkJ
QkNFMzJCOUUxNTE3QzIyNzAwRjU0MkVDIC8qIFJlbmRlck11bHRpQ29sdW1uU2V0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTMyQjlEMTUxN0My
MjcwMEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNvbHVtblNldC5jcHAgKi87IH07CiAJCUJDRTNCRUMy
MEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UzQkVDMDBEMjIyQjFEMDA3RTA2RTQgLyogVGFn
Tm9kZUxpc3QuY3BwICovOyB9OwogCQlCQ0UzQkVDMzBEMjIyQjFEMDA3RTA2RTQgLyogVGFnTm9k
ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RTNCRUMxMEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdOb2RlTGlzdC5oICovOyB9OwotCQlCQ0U0Mzg5
QzE0MEIxQkE4MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U0Mzg5QjE0MEIxQkE3MDA1RTQzN0UgLyogSlNE
aWN0aW9uYXJ5LmggKi87IH07CisJCUJDRTQzODlDMTQwQjFCQTgwMDVFNDM3RSAvKiBKU0RpY3Rp
b25hcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RTQzODlCMTQwQjFCQTcwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0U0MzhBMjE0MEMwREMwMDA1RTQz
N0UgLyogSlNEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRTQzOEExMTQwQzBEQkYwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnkuY3Bw
ICovOyB9OwogCQlCQ0U0NDEzMzEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFNDQx
MzExMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmNwcCAqLzsgfTsKIAkJQkNF
NDQxMzQxMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U0NDEzMjEyRjc0OEUyMDA5Qjg0
QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3OTdkNTA0Li40
MjIxNzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMTEtMTQgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgZXhlY3V0aW9uIG9mIElE
QlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMgdG8gdGhlIElEQlNlcnZlckNvbm5lY3Rpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDM4NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuaDoK
KwogMjAxMy0xMS0xNCAgR2VyZ28gQmFsb2doICA8Z2VyeXh5ekBpbmYudS1zemVnZWQuaHU+CiAK
ICAgICAgICAgZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weSBjYW4ndCBoYW5kbGUgbmVzdGVk
ICNpZnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0lu
ZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2Vu
ZC5oCmluZGV4IDE5ZTZkZTMuLmNlZjAyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5k
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dl
YlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBX
ZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kX2gKIAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VCYWNrZW5kLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkK
</data>
<flag name="commit-queue"
          id="240078"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217058</attachid>
            <date>2013-11-15 09:40:05 -0800</date>
            <delta_ts>2013-11-15 10:19:26 -0800</delta_ts>
            <desc>Patch v3 - Macros, and hopefully a successful build</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>94231</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZmE2YzQ0Li5jN2ExZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMw
IEBACisyMDEzLTExLTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb3ZlIGV4ZWN1dGlvbiBvZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zIHRv
IHRoZSBJREJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjQzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFYWNoIElEQk9wZXJhdGlvbiBoYXMgaXTigJlzIDo6cGVyZm9ybSgp
IG1vdmVkIHRvIGEgbWV0aG9kIG9uIElEQlNlcnZlckNvbm5lY3Rpb24uCisgICAgICAgIFRoaXMg
YWxtb3N0IHJlbW92ZXMgYWxsIGtub3dsZWRnZSBvZiB0aGUgYmFja2luZyBzdG9yZXMgZnJvbSB0
aGUgZnJvbnQgZW5kLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIp
OgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIHJlZmxlY3QgZWFjaCB0cmFuc2FjdGlvbiBiYWNr
ZW5kIG9wZXJhdGlvbjoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uLmg6CisKKyAgICAgICAgU2NoZWR1bGUgY2VydGFpbiBvcGVyYXRpb25zIHdpdGggY2Fs
bGJhY2tzOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxl
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlUHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRl
UmFuZ2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oOgorCisgICAgICAgIE1ha2UgZWFjaCBv
cGVyYXRpb27igJlzIHBlcmZvcm0oKSBtZXRob2QgZGVmZXIgdG8gdGhlIElEQlNlcnZlckNvbm5l
Y3Rpb24gKHdpdGggYSBjYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5n
ZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKworICAgICAgICBBZGQg
YWNjZXNzb3JzIHRvIGVhY2ggb3BlcmF0aW9u4oCZcyBkYXRhIG1lbWJlcnMgc28gdGhlIElEQlNl
cnZlckNvbm5lY3Rpb24gaGFzIGV2ZXJ5dGhpbmcgaXQgbmVlZHM6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0b3JlTWV0YWRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0
b3JlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjp2ZXJzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y2FsbGJh
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbjo6ZGF0YWJhc2VDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246
OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3JlSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q3JlYXRlSW5kZXhPcGVyYXRpb246OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3Jl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0
YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUlu
ZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b246OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3Bl
cmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6
aW5kZXhJRCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVyYXRpb246OmN1cnNvclR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZXRPcGVyYXRpb246OmNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVy
YXRpb246OmF1dG9JbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpr
ZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlB1dE9wZXJhdGlvbjo6cHV0TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRp
b246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6a2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6aW5kZXhJRHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UHV0T3BlcmF0aW9uOjppbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3Bl
cmF0aW9uOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjp2YWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246OlB1dE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJRCk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5DdXJzb3JPcGVyYXRpb246OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vy
c29yT3BlcmF0aW9uOjpjdXJzb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JP
cGVyYXRpb246OnRhc2tUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRp
b246OmtleVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmN1
cnNvckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6T3BlbkN1
cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvdW50T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9w
ZXJhdGlvbjo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpD
b3VudE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5nZU9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpvYmplY3RT
dG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjYWxsYmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OmtleVJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpEZWxldGVSYW5nZU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6b2JqZWN0
U3RvcmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6
Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbik6CisKKyAgICAgICAgSW1wbGVtZW50IGVhY2ggb3Bl
cmF0aW9uIGluIHRlcm1zIG9mIHRoZSBhcHByb3ByaWF0ZSBiYWNraW5nIHN0b3JlLCB0aGVuIHBl
cmZvcm0gdGhlIGNhbGxiYWNrOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREI6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNsZWFyT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpj
aGFuZ2VEYXRhYmFzZVZlcnNpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaDoKKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0xMS0xNSAgUmFkdSBTdGF2aWxhICA8c3Rh
dmlsYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBSZWdpb25zXSBJbXBsZW1lbnQgdmlzdWFs
IG92ZXJmbG93IGZvciBmaXJzdCAmIGxhc3QgcmVnaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKaW5kZXggMzE0
YzA4Yi4uMDI4YzIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgogI2luY2x1ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJREJTZXJ2ZXJD
b25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAg
LTMwMSw3ICszMDIsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlUmFuZ2UoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSQogICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBj
YWxsYmFja3MpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXIoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJPYmplY3RTdG9y
ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRh
dGFiYXNlQmFja2VuZDo6Y2xlYXIiKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwpAQCAtMzA5LDcgKzMx
MCw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkp
OwogCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ2xlYXJPcGVyYXRpb24ob2JqZWN0U3RvcmVJ
ZCwgY2FsbGJhY2tzKTsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDbGVhck9iamVjdFN0b3Jl
T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7CiB9CiAKIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjp0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbikKQEAgLTUyNCw3ICs1MjUsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cnVu
SW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPgogICAg
IGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmpl
Y3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwogICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwogCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3Ms
IGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0
YWJhc2VDYWxsYmFja3MsIG1fbWV0YWRhdGEpOwogCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbik7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxs
YmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmQuaAppbmRleCBiZTcwN2U3Li5kMjdkNzE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaApAQCAt
MjYsMTIgKzI2LDExIEBACiAjaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZF9oCiAjZGVmaW5lIElE
QkRhdGFiYXNlQmFja2VuZF9oCiAKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNp
bmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgi
CiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKICNpbmNsdWRlICJJREJQZW5kaW5nRGVsZXRlQ2Fs
bC5oIgogI2luY2x1ZGUgIklEQlBlbmRpbmdPcGVuQ2FsbC5oIgotI2luY2x1ZGUgIklEQlNlcnZl
ckNvbm5lY3Rpb24uaCIKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgpAQCAtNDYsNyArNDUsNyBAQCBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UGF0aDsKLWNs
YXNzIElEQktleVJhbmdlOworY2xhc3MgSURCU2VydmVyQ29ubmVjdGlvbjsKIGNsYXNzIElEQlRy
YW5zYWN0aW9uQmFja2VuZDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiBjbGFz
cyBTaGFyZWRCdWZmZXI7CkBAIC0xMTQsNyArMTEzLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3Bl
bkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7CiAgICAgdm9pZCBjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0
YTsgfQogICAgIHZvaWQgc2V0Q3VycmVudFZlcnNpb24odWludDY0X3QgdmVyc2lvbikgeyBtX21l
dGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNTIwYzk0Mi4uNjliYWJmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4CiAgICAg
fQogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IGJhY2tlbmREQigpLT5jbGVhcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCByZXF1ZXN0KTsK
KyAgICBiYWNrZW5kREIoKS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBp
ZCgpLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaAppbmRleCA3N2JlOTgyLi4zNDZlYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIElEQlNlcnZlckNvbm5lY3Rpb25faAogCiAjaW5jbHVkZSAiSURCTWV0YWRh
dGEuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSW5kZXhlZERCLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgpAQCAtNDEsNyArNDIsOSBAQCBjbGFzcyBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2U7CiBjbGFzcyBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZTsKIGNsYXNzIElE
QkRhdGFiYXNlRXJyb3I7CiBjbGFzcyBJREJLZXk7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ7CiAKK3N0cnVjdCBJREJJbmRleE1ldGFkYXRhOwogc3RydWN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGE7CiAKIC8vIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgc2luZ2xlIGFzeW5jaHJvbm91
cyBsYXllciBiZXR3ZWVuIHRoZSB3ZWItZmFjaW5nIGZyb250ZW5kCkBAIC01NCw3ICs1Nyw2IEBA
IHB1YmxpYzoKICAgICAvLyBGSVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlk
ZXMgYSBzeW5jaHJvbm91cyBhY2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3Jl
IG9iamVjdHMuCiAgICAgLy8gVGhpcyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBz
b29uLgogICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCkgPSAwOwotICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25J
bnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5z
YWN0aW9uSUQpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpID0gMDsKIApAQCAt
NzIsOCArNzQsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmFuc2FjdGlv
bihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxs
YmFjaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXNldFRyYW5zYWN0aW9uKGludDY0X3QgdHJh
bnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rp
b25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworCiAg
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0
X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4mIGluZGV4S2V5cywg
c3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0
aW9uQ2FsbGJhY2spID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiYs
IHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxl
dGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KElEQlRyYW5z
YWN0aW9uQmFja2VuZCYsIGNvbnN0IENyZWF0ZUluZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlv
bjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2sp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5k
JiwgY29uc3QgRGVsZXRlSW5kZXhPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBnZXQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgR2V0T3BlcmF0aW9u
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21w
bGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KElEQlRyYW5zYWN0aW9u
QmFja2VuZCYsIGNvbnN0IFB1dE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIG9wZW5DdXJzb3IoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgT3BlbkN1
cnNvck9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvdW50
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IENvdW50T3BlcmF0aW9uJiwgc3RkOjpmdW5j
dGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJh
Y2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiwgY29uc3QgRGVsZXRlUmFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNv
bnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25z
dCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNoYW5nZURhdGFiYXNlVmVyc2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBj
b25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxs
YmFjaykgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5j
cHAKaW5kZXggYjk1YWFjZi4uN2MzMTI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCkBAIC04NSwx
NSArODUsNiBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tlbmQo
KQogewogICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8g
Z2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KICAgICBB
U1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Ci0gICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgdHJh
bnNhY3Rpb24gc2hvdWxkIGFsc28gYmUgZ29uZSBieSBub3cuCi0gICAgQVNTRVJUKCFtX2RhdGFi
YXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KG1faWQpKTsKLX0KLQotSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkKLXsK
LSAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSogYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24gPSBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKG1faWQpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbik7Ci0gICAgcmV0dXJuICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKIH0KIAogdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRh
c2tUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElE
QlN5bmNocm9ub3VzT3BlcmF0aW9uPiBhYm9ydFRhc2spCkBAIC0zMTEsOSArMzAyLDkgQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b24oY29uc3QgSURCT2JqZWN0U3QKICAgICBzY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgRGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsK
IH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
IG1ldGFkYXRhKQordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFi
YXNlQ2FsbGJhY2tzLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKIHsKLSAg
ICBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tz
LCBkYXRhYmFzZUNhbGxiYWNrcyksIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgU3RyaW5nOjpudW1iZXIobWV0YWRhdGEudmVyc2lv
biksIG1ldGFkYXRhLnZlcnNpb24pKTsKKyAgICBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNr
ZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmVxdWVzdGVkVmVyc2lv
biwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIElEQkRhdGFiYXNlQmFja2VuZDo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgU3RyaW5nOjpudW1iZXIobWV0
YWRhdGEudmVyc2lvbiksIG1ldGFkYXRhLnZlcnNpb24pKTsKIH0KIAogdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQpAQCAtMzMzLDcg
KzMyNCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUdldE9wZXJhdGlv
bihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhCiAKIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZU1ldGFkYXRhLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewotICAg
IHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBkYXRhYmFzZSgpLmlkKCks
IG9iamVjdFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5k
ZXhJZHMsIGluZGV4S2V5cykpOworICAgIHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFj
a3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQpA
QCAtMzQzLDIyICszMzQsMjIgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxl
U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQogCiB2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1
cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBzY2hlZHVsZVRh
c2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGRhdGFiYXNlKCkuaWQoKSwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIGNhbGxiYWNrcykpOworICAgIHNjaGVkdWxlVGFzayhPcGVuQ3Vyc29yT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlv
biwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwogfQogCiB2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgc2NoZWR1bGVUYXNrKENv
dW50T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgc2NoZWR1bGVUYXNrKENvdW50
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVE
ZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewotICAgIHNjaGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGRh
dGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAg
IHNjaGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0
b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlQ2xlYXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnNjaGVkdWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgc2NoZWR1bGVU
YXNrKENsZWFyT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RT
dG9yZUlkLCBjYWxsYmFja3MpKTsKKyAgICBzY2hlZHVsZVRhc2soQ2xlYXJPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwogfQogCiBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRl
Q3Vyc29yQmFja2VuZChJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmIGN1cnNvciwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5
cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKaW5kZXgg
M2Y1ZWViNy4uY2ZjNDEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9y
LmgiCiAjaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNjQsMTMgKzYzLDEyIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysr
OyB9CiAgICAgdm9pZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7
IH0KLSAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgZGVwcmVjYXRlZEJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCk7CiAKICAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFi
YXNlKCkgY29uc3QgIHsgcmV0dXJuICptX2RhdGFiYXNlOyB9CiAKICAgICB2b2lkIHNjaGVkdWxl
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYp
OwogICAgIHZvaWQgc2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJik7Ci0gICAgdm9pZCBzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4s
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKKyAgICB2b2lkIHNjaGVkdWxlVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmKTsKICAgICB2b2lkIHNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7CiAgICAgdm9pZCBz
Y2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYpOwogICAgIHZvaWQgc2NoZWR1bGVHZXRPcGVyYXRpb24oY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOwpAQCAtNzksNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZvaWQgc2NoZWR1bGVDb3VudE9w
ZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBzY2hl
ZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBzY2hl
ZHVsZUNsZWFyT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKKyAgICB2b2lkIHNjaGVkdWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2lu
Z1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCmluZGV4IDI5ZjQyZmEuLmZkNDZjN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCkBAIC0zMSwzODEgKzMxLDE1OSBA
QAogI2luY2x1ZGUgIklEQkluZGV4V3JpdGVyLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIK
ICNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSURCU2VydmVyQ29u
bmVjdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBDYWxsT25EZXN0cnVjdCB7Ci1wdWJsaWM6Ci0gICAgQ2FsbE9uRGVzdHJ1
Y3Qoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNhbGxiYWNrKQotICAgICAgICA6IG1fY2FsbGJhY2so
Y2FsbGJhY2spCi0gICAgeyB9Ci0KLSAgICB+Q2FsbE9uRGVzdHJ1Y3QoKQotICAgIHsKLSAgICAg
ICAgbV9jYWxsYmFjaygpOwotICAgIH0KKyNkZWZpbmUgU1RBTkRBUkRfREFUQUJBU0VfRVJST1Jf
Q0FMTEJBQ0sgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBvcGVyYXRpb25DYWxsYmFjayA9IFwKKyAgICBbb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJh
Y2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsgXAorICAgICAgICBpZiAo
ZXJyb3IpIFwKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+bV90cmFuc2FjdGlvbi0+YWJvcnQoZXJy
b3IpOyBcCisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOyBcCisgICAgfTsKIAotcHJpdmF0
ZToKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07CituYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0
cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3Jh
Z2VBUEksICJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5jcmVhdGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVj
dFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLCBtX29iamVjdFN0
b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQp
KSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6
OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBtX3RyYW5z
YWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
CisgICAgUmVmUHRyPENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7
CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVPYmplY3RTdG9yZSgqbV90
cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBDcmVhdGVJ
bmRleE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25D
YWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7
Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLmlkLCBtX2luZGV4TWV0YWRh
dGEubmFtZSwgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgsIG1faW5kZXhNZXRhZGF0YS51bmlxdWUs
IG1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgewotICAgICAgICBtX3RyYW5zYWN0aW9uLT5h
Ym9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNy
ZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisKKyAgICBSZWZQdHI8Q3JlYXRlSW5kZXhPcGVyYXRp
b24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFD
SzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNy
ZWF0ZUluZGV4KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQog
CiB2b2lkIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQogewogICAgIExPRyhT
dG9yYWdlQVBJLCAiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkucmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOwor
ICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlE
LCBtX2luZGV4SUQpOwogfQogCiB2b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVz
dHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9y
YWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhNZXRhZGF0YS5pZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVy
cm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSkpOwotICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAgfQorCisg
ICAgUmVmUHRyPERlbGV0ZUluZGV4T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RB
TkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVJbmRleCgqbV90cmFuc2FjdGlvbiwgKnRo
aXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBEZWxldGVJbmRleEFib3J0T3BlcmF0
aW9uOjpwZXJmb3JtKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmFkZEluZGV4KG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
OworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuYWRkSW5kZXgobV9vYmplY3RTdG9yZUlE
LCBtX2luZGV4TWV0YWRhdGEsIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiB9CiAKIHZv
aWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9u
Q2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlv
bkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiR2V0T3BlcmF0aW9uIik7CiAKLSAg
ICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0KLSAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkp
Ci0gICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNv
cjsKLSAgICAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JL
ZXlPbmx5KTsKLSAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24K
LSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
SW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgICAg
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1f
dHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRl
eGVkREI6OkN1cnNvck5leHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNl
cnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNv
cihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
SW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBr
ZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXk7Ci0gICAgYm9vbCBvazsKLSAgICBpZiAobV9pbmRleElkID09IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICAvLyBPYmplY3QgU3RvcmUgUmV0cmll
dmFsIE9wZXJhdGlvbgotICAgICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgICAgIG9rID0g
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJh
Y2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqa2V5LCB2
YWx1ZSk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051
bGwoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6
OmFkb3B0VmVjdG9yKHZhbHVlKSwga2V5LCBtX2tleVBhdGgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIH0KLQotICAg
IC8vIEZyb20gaGVyZSB3ZSBhcmUgZGVhbGluZyBvbmx5IHdpdGggaW5kZXhlcy4KLSAgICBvayA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKLSAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFy
eUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXByaW1h
cnlLZXkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlP
bmx5KSB7Ci0gICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFsIE9w
ZXJhdGlvbgotICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKLSAgICBvayA9IG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+
Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsK
LSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1f
a2V5UGF0aC5pc051bGwoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJl
ZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBhdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVm
ZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOworICAgIFJlZlB0cjxHZXRPcGVyYXRpb24+IG9wZXJh
dGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmdldCgqbV90cmFu
c2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBQdXRPcGVyYXRp
b246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsK
LSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwot
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJQdXRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQobV90cmFu
c2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0gICAg
QVNTRVJUKG1faW5kZXhJZHMuc2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7Ci0gICAgYm9v
bCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLSAg
ICBpZiAobV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIG1f
b2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKLSAgICAgICAgUmVmUHRyPElE
QktleT4gYXV0b0luY0tleSA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVj
dGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2VuZXJhdGVLZXkoKm1fdHJhbnNhY3Rp
b24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7Ci0gICAgICAgIGtleVdhc0dlbmVy
YXRlZCA9IHRydWU7Ci0gICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7Ci0gICAg
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdlbmVyYXRv
ciB2YWx1ZSByZWFjaGVkLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBrZXkgPSBhdXRvSW5jS2V5OwotICAgIH0gZWxzZQotICAgICAgICBrZXkgPSBtX2tleTsK
LQotICAgIEFTU0VSVChrZXkpOwotICAgIEFTU0VSVChrZXktPmlzVmFsaWQoKSk7Ci0KLSAgICBS
ZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKLSAgICBpZiAobV9w
dXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSkgewotICAgICAgICBib29sIG9r
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmUuaWQsICprZXksIHJlY29yZElkZW50aWZpZXIpOwotICAgICAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNr
aW5nIGtleSBleGlzdGVuY2UuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChyZWNvcmRJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZlY3RvcjxS
ZWZQdHI8SURCSW5kZXhXcml0ZXI+PiBpbmRleFdyaXRlcnM7Ci0gICAgU3RyaW5nIGVycm9yTWVz
c2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKLSAgICBib29sIGJhY2tp
bmdTdG9yZVN1Y2Nlc3MgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm1ha2VJbmRleFdyaXRlcnMobV90cmFuc2Fj
dGlvbi0+aWQoKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLCAqa2V5LCBrZXlXYXNHZW5l
cmF0ZWQsIG1faW5kZXhJZHMsIG1faW5kZXhLZXlzLCBpbmRleFdyaXRlcnMsICZlcnJvck1lc3Nh
Z2UsIG9iZXlzQ29uc3RyYWludHMpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vzcykgewot
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5n
IHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghb2JleXNDb25zdHJhaW50cykgewotICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiBBZnRlciB0
aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLSAg
ICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2Fj
dGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwg
bV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWlu
ZyBwdXQvYWRkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIElEQkluZGV4
V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAgICAgaW5k
ZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICptX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0
b3JlKCksIG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOwotICAgIH0KLQotICAgIGlmIChtX29i
amVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2Vu
ZDo6Q3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgewot
ICAgICAgICBib29sIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT51cGRhdGVLZXlHZW5lcmF0b3IoKm1fdHJh
bnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgIWtleVdhc0dl
bmVyYXRlZCk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRvci4iKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKGtleS5yZWxlYXNlKCkpOworICAgIEFTU0VSVChtX2luZGV4SURzLnNpemUoKSA9
PSBtX2luZGV4S2V5cy5zaXplKCkpOworCisgICAgUmVmUHRyPFB1dE9wZXJhdGlvbj4gb3BlcmF0
aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkucHV0KCptX3RyYW5z
YWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIFNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25D
YWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
biIpOworCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4Q291bnQ7ICsraSkKICAg
ICAgICAgbV90cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKKworICAg
IGNhbGxPbk1haW5UaHJlYWQoY29tcGxldGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBPcGVuQ3Vy
c29yT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNh
bGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiT3BlbkN1cnNvck9wZXJhdGlvbiIpOwog
Ci0gICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMg
dGhlIHRyYW5zYWN0aW9uCi0gICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBU
aGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2Fu
dCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhl
cyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0g
ICAgaWYgKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0aXZlVGFzaykK
LSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWRkUHJlZW1wdGl2ZUV2ZW50KCk7Ci0KLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0g
ICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAg
ICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1
cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0
aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRh
YmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2spOwotICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IElu
ZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbklu
ZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdl
LmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJz
b3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRC
dWZmZXIqPigwKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJREJEYXRhYmFzZUJh
Y2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGU+KG1fdGFza1R5cGUpKTsKLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBj
dXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVDdXJzb3JCYWNrZW5kKCpiYWNraW5nU3RvcmVD
dXJzb3IsIG1fY3Vyc29yVHlwZSwgdGFza1R5cGUsIG1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFy
eUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOworICAgIFJlZlB0cjxPcGVuQ3Vyc29yT3BlcmF0aW9u
PiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7
CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5vcGVu
Q3Vyc29yKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2
b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0
aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxl
dGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiQ291bnRPcGVyYXRpb24iKTsK
LSAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNv
ckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yOwotCi0gICAgaWYgKG1faW5kZXhJZCA9PSBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCi0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICBl
bHNlCi0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4
S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdl
LmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vy
c29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZG8gewotICAgICAgICArK2NvdW50OwotICAgIH0gd2hpbGUg
KGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGNvdW50KTsKKworICAgIFJlZlB0cjxDb3VudE9wZXJhdGlvbj4gb3Bl
cmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisg
ICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY291bnQoKm1f
dHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgRGVsZXRl
UmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25D
YWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9u
Q2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVSYW5nZU9wZXJhdGlvbiIp
OwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rp
b24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsK
LSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVSZWNvcmQobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlk
LCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSkpIHsKLSAgICAgICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGRlbGV0aW5nIGRhdGEgaW4gcmFu
Z2UiKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotICAgIH0K
LQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKworICAgIFJlZlB0cjxEZWxldGVSYW5n
ZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9S
X0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVsZXRlUmFuZ2UoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFj
ayk7CiB9CiAKLXZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3ZvaWQgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogewotICAg
IENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KLSAg
ICBMT0coU3RvcmFnZUFQSSwgIk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24iKTsKLSAgICBpZiAo
IW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVk
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQp
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2Jq
ZWN0IHN0b3JlIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIkNsZWFyT2JqZWN0U3RvcmVPcGVyYXRp
b24iKTsKKworICAgIFJlZlB0cjxDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24o
dGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jbGVhck9iamVjdFN0b3Jl
KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIERl
bGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBj
b21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3Qo
Y29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24iKTsKLSAgICBib29sIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmpl
Y3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEu
aWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qg
c3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7
Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICB9CisKKyAgICBSZWZQ
dHI8RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFO
REFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZU9iamVjdFN0b3JlKCptX3RyYW5zYWN0aW9u
LCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
Y29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0
KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFu
Z2VPcGVyYXRpb24iKTsKLSAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFiYXNlID0gbV90cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKTsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS5p
ZCgpOwotICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNp
b247Ci0KLSAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVp
bnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgQVNTRVJUKG1fdmVy
c2lvbiA+IChpbnQ2NF90KW9sZFZlcnNpb24pOwotICAgIGRhdGFiYXNlLnNldEN1cnJlbnRWZXJz
aW9uKG1fdmVyc2lvbik7Ci0gICAgaWYgKCFkYXRhYmFzZS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT51cGRhdGVJREJEYXRhYmFzZVZlcnNpb24obV90cmFuc2Fj
dGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRh
dGFiYXNlLm1ldGFkYXRhKCkudmVyc2lvbikpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ug
d2hlbiB1cGRhdGluZyB2ZXJzaW9uLiIpOwotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihl
cnJvcik7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBBU1NFUlQoIWRhdGFiYXNlLmhhc1BlbmRpbmdTZWNvbmRIYWxmT3Bl
bigpKTsKLSAgICBkYXRhYmFzZS5zZXRQZW5kaW5nU2Vjb25kSGFsZk9wZW4oSURCUGVuZGluZ09w
ZW5DYWxsOjpjcmVhdGUoKm1fY2FsbGJhY2tzLCAqbV9kYXRhYmFzZUNhbGxiYWNrcywgbV90cmFu
c2FjdGlvbklkLCBtX3ZlcnNpb24pKTsKLSAgICBtX2NhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVk
KG9sZFZlcnNpb24sICZkYXRhYmFzZSwgZGF0YWJhc2UubWV0YWRhdGEoKSk7CisKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uPiBvcGVyYXRpb24o
dGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jaGFuZ2VEYXRhYmFzZVZl
cnNpb24oKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZv
aWQgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCiB7CiAgICAgTE9H
KFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVPYmplY3RTdG9yZShtX29iamVjdFN0b3JlSWQp
OworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlT2JqZWN0U3RvcmUobV9vYmpl
Y3RTdG9yZUlEKTsKIH0KIAogdm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpw
ZXJmb3JtKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaAppbmRleCBjNGUzOWIz
Li45MmJhYTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCkBAIC0yOCwx
MyArMjgsMTQgQEAKIAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUg
IklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQlNlcnZlckNvbm5lY3Rpb247
CisKIGNsYXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlv
biB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURF
IEZJTkFMOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVN
ZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsgfQorCiBwcml2
YXRlOgogICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
TWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKQEAgLTYwLDYg
KzY0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNz
Q2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVN
ZXRhZGF0YTsgfQorCiBwcml2YXRlOgogICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKQEAgLTczLDE1ICs4MCwxOSBAQCBwcml2YXRlOgogCiBjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNr
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmVyc2lvbkNoYW5nZU9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRh
YmFzZUNhbGxiYWNrcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZlcnNpb25DaGFu
Z2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CisKKyAgICBpbnQ2NF90IHZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICBJREJDYWxsYmFja3MqIGNh
bGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tzLmdldCgpOyB9CisgICAgSURCRGF0
YWJhc2VDYWxsYmFja3MqIGRhdGFiYXNlQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
YmFzZUNhbGxiYWNrcy5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIFZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQor
ICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKICAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fdHJhbnNhY3Rp
b25JZCh0cmFuc2FjdGlvbklkKQogICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQogICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tz
KGRhdGFiYXNlQ2FsbGJhY2tzKQpAQCAtODksNyArMTAwLDYgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGlu
dDY0X3QgbV90cmFuc2FjdGlvbklkOwogICAgIGludDY0X3QgbV92ZXJzaW9uOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKQEAgLTEwNSwxMiArMTE1LDEyIEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgICAg
IDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQo
b2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkK
ICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFu
c2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKIH07CiAKIGNsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewpAQCAtMTU4LDE2
ICsxNjgsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUlu
ZGV4T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7
CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBz
dWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9y
ZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9CisgICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaWRiSW5kZXhNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRh
ZGF0YTsgfQorCiBwcml2YXRlOgogICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwogICAgIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogfTsKIApAQCAtMTgxLDE0ICsxOTUs
MTQgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRl
eElkKGluZGV4SWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisg
ICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAg
Y29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4
SUQ7CiB9OwogCiBjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRp
b24gewpAQCAtMTk4LDE2ICsyMTIsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50
NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9Cisg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaWRiSW5kZXhNZXRhZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhNZXRhZGF0YTsgfQorCiBwcml2YXRlOgogICAgIERlbGV0ZUluZGV4T3BlcmF0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBt
X3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmpl
Y3RTdG9yZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQogICAg
ICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICB9CiAKICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlEOwogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogfTsKIApA
QCAtMjIxLDEzICsyMzksMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3Rv
cmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9y
ZUlkKQogICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAg
ICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwot
ICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9v
YmplY3RTdG9yZUlEOwogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRh
OwogfTsKIApAQCAtMjM4LDEyICsyNTYsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdldE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgbWV0YWRhdGEsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKICAgICB9CiAg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxs
YmFjaykgT1ZFUlJJREUgRklOQUw7CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25z
dCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KKyAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4SUQ7IH0KKyAgICBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQorICAgIElEQktleVJhbmdlKiBr
ZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2UuZ2V0KCk7IH0KKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQo
KTsgfQorICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3Jl
bWVudDsgfQorICAgIElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UGF0
aDsgfQorCiBwcml2YXRlOgogICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChtZXRhZGF0YS5pZCkKLSAgICAgICAgLCBtX29i
amVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkK
KyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2lu
ZGV4SUQoaW5kZXhJZCkKICAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEub2JqZWN0U3RvcmVz
LmdldChvYmplY3RTdG9yZUlkKS5rZXlQYXRoKQogICAgICAgICAsIG1fYXV0b0luY3JlbWVudCht
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9JbmNyZW1lbnQpCiAg
ICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKQEAgLTI1NSw5ICsyODEsOCBAQCBwcml2YXRl
OgogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rp
b247Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SUQ7CiAg
ICAgY29uc3QgSURCS2V5UGF0aCBtX2tleVBhdGg7CiAgICAgY29uc3QgYm9vbCBtX2F1dG9JbmNy
ZW1lbnQ7CiAgICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwpAQCAtMjY3
LDMzICsyOTIsNDAgQEAgcHJpdmF0ZToKIAogY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9u
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRh
YmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mIGluZGV4S2V5cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUg
cHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHV0T3BlcmF0aW9uKHRyYW5zYWN0
aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJh
Y2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UHV0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9k
ZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJS
SURFIEZJTkFMOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX3B1dE1vZGU7IH0KKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KKyAgICBJ
REJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9CisgICAgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElEcygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRHM7IH0KKyAg
ICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleEtleXM7IH0KKyAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGJhY2tzLmdldCgpOyB9CisgICAgU2hhcmVkQnVmZmVyKiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBQdXRPcGVyYXRpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5k
OjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMpCisgICAgUHV0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4mIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRh
YmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mIGluZGV4S2V5cykKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQogICAgICAgICAsIG1fb2JqZWN0
U3RvcmUob2JqZWN0U3RvcmUpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBt
X2tleShrZXkpCiAgICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCiAgICAgICAgICwgbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMpCisgICAgICAg
ICwgbV9pbmRleElEcyhpbmRleElkcykKICAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMp
CiAgICAgewogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJh
bnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOwogICAgIGNvbnN0IFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1fdmFsdWU7CiAgICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7CiAgICAg
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIG1fcHV0TW9kZTsKICAgICBjb25zdCBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBjb25zdCBWZWN0b3I8aW50NjRf
dD4gbV9pbmRleElkczsKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9pbmRleElEczsKICAg
ICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiBtX2luZGV4S2V5czsKIH07CiAKQEAgLTMxNywxNyAr
MzQ5LDI2IEBAIHByaXZhdGU6CiAKIGNsYXNzIE9wZW5DdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMg
SURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9w
ZW5DdXJzb3JPcGVyYXRpb24odHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxs
YmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJS
SURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4g
bV9vYmplY3RTdG9yZUlEOyB9CisgICAgaW50NjRfdCBpbmRleElEKCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleElEOyB9CisgICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyAgICBJbmRleGVkREI6OkN1cnNvclR5cGUg
Y3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQorICAgIElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Rhc2tUeXBl
OyB9CisgICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5n
ZS5nZXQoKTsgfQorICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorCiBwcml2YXRlOgot
ICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElE
QkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCisgICAgT3BlbkN1cnNvck9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRh
dGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAg
ICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQo
b2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICAgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4SUQoaW5kZXhJ
ZCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQogICAgICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKICAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKQEAgLTMzNyw5
ICszNzgsOCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0g
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2lu
ZGV4SWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50
NjRfdCBtX2luZGV4SUQ7CiAgICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsK
ICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwpAQCAtMzQ5LDcz
ICszODksODEgQEAgcHJpdmF0ZToKIAogY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURC
T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENvdW50T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ291bnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eVJhbmdlLCBjYWxsYmFja3MpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CisKKyAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7
IH0KKyAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4SUQ7IH0KKyAg
ICBJREJLZXlSYW5nZSoga2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgp
OyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxi
YWNrcy5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBDb3VudE9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBDb3VudE9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAg
ICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQo
aW5kZXhJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAg
ICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQog
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICB7CiAgICAgfQogCiAgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2
NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAg
ICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJRDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKICAgICBjb25zdCBSZWZQdHI8SURC
S2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CiAgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CiB9OwogCiBjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJP
cGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4g
Y3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJS
SURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4g
bV9vYmplY3RTdG9yZUlEOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2UuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBEZWxl
dGVSYW5nZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAg
RGVsZXRlUmFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJRChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCiAg
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0
X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwogICAgIGNvbnN0IFJlZlB0cjxJREJLZXlS
YW5nZT4gbV9rZXlSYW5nZTsKICAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxi
YWNrczsKIH07CiAKLWNsYXNzIENsZWFyT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CitjbGFzcyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDbGVhck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
Y2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xlYXJPYmplY3RTdG9y
ZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNz
Q2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkg
Y29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorCiBwcml2YXRlOgot
ICAgIENsZWFyT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9y
ZUlEKG9iamVjdFN0b3JlSWQpCiAgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQogICAg
IHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3Qg
bV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwogICAg
IGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3Rv
cmVMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAKaW5kZXggMGViZDJlNi4uMDYwNTQ2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5n
U3RvcmVMZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCkBAIC0xOTIyLDExICsxOTIyLDYgQEAg
dm9pZCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjplc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW8KICAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5z
ZXQodHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpjcmVh
dGUodHJhbnNhY3Rpb25JRCwgdGhpcykpOwogfQogCi1JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkludGVyZmFjZSogSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKLXsKLSAgICByZXR1cm4gbV9iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSUQpOwotfQotCiB2b2lkIElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT50cmFuc2FjdGlv
bklEKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKaW5kZXggM2RhNGZiMy4u
MGM2OTUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKQEAgLTExMCw3ICsx
MTAsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVJbmRleEtleXMoY29uc3Qg
TGV2ZWxEQlNsaWNlJiwgY29uc3QgTGV2ZWxEQlNsaWNlJik7CiAKLSAgICBJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkludGVyZmFjZSogZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAgICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqKTsKIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAppbmRleCBiNWNm
ODIxLi45MGNiMjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
LmNwcApAQCAtMzEsOSArMzEsMjAgQEAKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVs
REIuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuaCIKKyNp
bmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhXcml0ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCisjZGVmaW5lIEFTWU5DX0NPTVBMRVRJT05f
Q0FMTEJBQ0soY2FsbGJhY2ssIGFyZykgXAorICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNr
LCBhcmddKCkgeyBcCisgICAgICAgIGNhbGxiYWNrKGFyZyk7IFwKKyAgICB9KTsKKworI2RlZmlu
ZSBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNhbGxiYWNrKSBcCisgICAgY2FsbE9u
TWFpblRocmVhZChbY2FsbGJhY2tdKCkgeyBcCisgICAgICAgIGNhbGxiYWNrKDApOyBcCisgICAg
fSk7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6
OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUxldmVsREIqIGJhY2tp
bmdTdG9yZSkKQEAgLTUxLDEzICs2Miw2IEBAIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogSURC
U2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKQogICAgIHJl
dHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKIH0KIAotSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25JbnRlcmZhY2UqIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZXByZWNhdGVkQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKQotewotICAgIGlmICghbV9i
YWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2JhY2tpbmdTdG9y
ZS0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSUQpOwotfQot
CiBib29sIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjppc0Nsb3NlZCgpCiB7CiAgICAgcmV0
dXJuIG1fY2xvc2VkOwpAQCAtMTgxLDExICsxODUsMzg2IEBAIHZvaWQgSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qg
ZGF0CiAgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVy
LmdldCgpLCAqbV9iYWNraW5nU3RvcmUsICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgZGF0YWJh
c2VJRCwgb2JqZWN0U3RvcmVJRCk7CiAgICAgfQogCi0gICAgY2FsbE9uTWFpblRocmVhZChbY29t
cGxldGlvbkNhbGxiYWNrXSgpIHsKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKDApOwotICAg
IH0pOworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxi
YWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0
U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgQ3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1f
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NF
UlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOworCisgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFt
ZSA9IG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCkubmFtZTsKKworICAgIGlmICghbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwg
dHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVNZXRhZGF0
YSgpLmlkLCBvYmplY3RTdG9yZU5hbWUsIG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCku
a2V5UGF0aCwgb3BlcmF0aW9uLm9iamVjdFN0b3JlTWV0YWRhdGEoKS5hdXRvSW5jcmVtZW50KSkg
eworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2ssIG9iamVjdFN0
b3JlTmFtZV0oKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6
Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBvYmpl
Y3RTdG9yZU5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9u
Q2FsbGJhY2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVJ
bmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDcmVhdGVJbmRl
eE9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbik7CisKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhID0gb3BlcmF0aW9uLmlkYkluZGV4TWV0YWRhdGEoKTsKKyAgICBpZiAoIW1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVJbmRleCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0
aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgaW5kZXhNZXRh
ZGF0YS5pZCwgaW5kZXhNZXRhZGF0YS5uYW1lLCBpbmRleE1ldGFkYXRhLmtleVBhdGgsIGluZGV4
TWV0YWRhdGEudW5pcXVlLCBpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywgaW5kZXhNZXRhZGF0YV0oKSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5h
bCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVhdGUgaW5kZXggJyVzJy4iLCBpbmRleE1ldGFkYXRh
Lm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJh
Y2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZWxldGVJbmRleChJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBEZWxldGVJbmRleE9wZXJh
dGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbik7CisKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFk
YXRhID0gb3BlcmF0aW9uLmlkYkluZGV4TWV0YWRhdGEoKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0
b3JlLT5kZWxldGVJbmRleCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRh
dGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgaW5kZXhNZXRhZGF0YS5p
ZCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBpbmRl
eE1ldGFkYXRhXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5n
Ojpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgaW5kZXhNZXRh
ZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNh
bGxiYWNrKTsKIH0KIAordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Z2V0KElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IEdldE9wZXJhdGlvbiYgb3BlcmF0
aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNv
bXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVs
REIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlv
bik7CisKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisKKyAgICBpZiAob3BlcmF0aW9uLmtleVJh
bmdlKCktPmlzT25seUtleSgpKQorICAgICAgICBrZXkgPSBvcGVyYXRpb24ua2V5UmFuZ2UoKS0+
bG93ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNv
ckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgICAgICBpZiAob3BlcmF0aW9uLmlu
ZGV4SUQoKSA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgICAgIEFT
U0VSVChvcGVyYXRpb24uY3Vyc29yVHlwZSgpICE9IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSk7
CisgICAgICAgICAgICAvLyBPYmplY3RTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5p
ZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgSW5k
ZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChv
cGVyYXRpb24uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgeworICAg
ICAgICAgICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5
Q3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5p
ZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVy
YXRpb24ua2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRyaWV2
YWwgT3BlcmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNr
aW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0
aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJhY2tpbmdTdG9y
ZUN1cnNvcikgeworICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3Mo
KTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlv
bkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGtl
eSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleTsKKyAgICBib29sIG9rOworICAgIGlmIChvcGVyYXRpb24uaW5kZXhJRCgp
ID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICAvLyBPYmplY3QgU3Rv
cmUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CisgICAg
ICAgIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQo
KSwgKmtleSwgdmFsdWUpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBvcGVyYXRp
b24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQu
IikpOworICAgICAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0
aW9uQ2FsbGJhY2spOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygp
LT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJB
Q0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChvcGVyYXRpb24uYXV0b0luY3JlbWVudCgpICYmICFvcGVyYXRpb24ua2V5
UGF0aCgpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9u
U3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSwga2V5LCBvcGVyYXRpb24u
a2V5UGF0aCgpKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0so
Y29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRv
cHRWZWN0b3IodmFsdWUpKTsKKyAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFD
Syhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICByZXR1cm47CisKKyAgICB9CisKKyAgICAv
LyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGluZGV4ZXMuCisgICAgb2sgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KCpiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJ
RCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGluIGdldFByaW1hcnlLZXlWaWFJbmRleC4iKSk7CisgICAgICAgIEVNUFRZX0FTWU5D
X0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIXByaW1hcnlLZXkpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxM
QkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
IChvcGVyYXRpb24uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgewor
ICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgIG9wZXJh
dGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHByaW1hcnlLZXkuZ2V0KCkpOworICAgICAgICBF
TVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJp
ZXZhbCBPcGVyYXRpb24KKyAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CisgICAgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+Z2V0UmVjb3JkKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCAqcHJpbWFyeUtleSwg
dmFsdWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKKyAgICAgICAgRU1Q
VFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBv
cGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOworICAgICAgICBFTVBUWV9BU1lOQ19D
T01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKG9wZXJhdGlvbi5hdXRvSW5jcmVtZW50KCkgJiYgIW9wZXJhdGlvbi5r
ZXlQYXRoKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1
Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHByaW1hcnlLZXksIG9wZXJh
dGlvbi5rZXlQYXRoKCkpOworICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNL
KGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3BlcmF0
aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1
ZSkpOworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxi
YWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KElEQlRyYW5z
YWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFB1dE9wZXJhdGlvbiYgb3BlcmF0aW9u
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBs
ZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIq
IGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7
CisKKyAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOworCisgICAgUmVmUHRyPElEQktl
eT4ga2V5OworICAgIGlmIChvcGVyYXRpb24ucHV0TW9kZSgpICE9IElEQkRhdGFiYXNlQmFja2Vu
ZDo6Q3Vyc29yVXBkYXRlICYmIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmF1dG9JbmNyZW1lbnQg
JiYgIW9wZXJhdGlvbi5rZXkoKSkgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5
ID0gbV9iYWNraW5nU3RvcmUtPmdlbmVyYXRlS2V5KHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmlkKTsKKyAgICAgICAga2V5
V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1h
eGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKKyAgICAgICAgICAgIEVNUFRZ
X0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgIH0g
ZWxzZQorICAgICAgICBrZXkgPSBvcGVyYXRpb24ua2V5KCk7CisKKyAgICBBU1NFUlQoa2V5KTsK
KyAgICBBU1NFUlQoa2V5LT5pc1ZhbGlkKCkpOworCisgICAgUmVmUHRyPElEQlJlY29yZElkZW50
aWZpZXI+IHJlY29yZElkZW50aWZpZXI7CisgICAgaWYgKG9wZXJhdGlvbi5wdXRNb2RlKCkgPT0g
SURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5KSB7CisgICAgICAgIGJvb2wgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24s
IHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuaWQs
ICprZXksIHJlY29yZElkZW50aWZpZXIpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAg
ICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjaGVj
a2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJ
T05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocmVjb3JkSWRlbnRpZmllcikgeworICAgICAgICAgICAgb3Bl
cmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGlu
IHRoZSBvYmplY3Qgc3RvcmUuIikpOworICAgICAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElP
Tl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+IGluZGV4
V3JpdGVyczsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJh
aW50cyA9IGZhbHNlOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0
b3JlLT5tYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLmlkKCksIHRyYW5zYWN0aW9uLmRhdGFi
YXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCksICprZXksIGtleVdhc0dlbmVyYXRl
ZCwgb3BlcmF0aW9uLmluZGV4SURzKCksIG9wZXJhdGlvbi5pbmRleEtleXMoKSwgaW5kZXhXcml0
ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tpbmdT
dG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5
cy4iKSk7CisgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlv
bkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3Ry
YWludHMpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBl
cnJvck1lc3NhZ2UpKTsKKyAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhj
b21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQmVm
b3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwg
cm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCisgICAgYmFja2luZ1N0
b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQoKmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9y
ZSgpLmlkLCAqa2V5LCBvcGVyYXRpb24udmFsdWUoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7
CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxs
YmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9y
IHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7CisgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05f
Q0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQo
KTsKKyAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIu
Z2V0KCksICptX2JhY2tpbmdTdG9yZSwgKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2Fj
dGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmlkKTsKKyAgICB9
CisKKyAgICBpZiAob3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuYXV0b0luY3JlbWVudCAmJiBvcGVy
YXRpb24ucHV0TW9kZSgpICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIGtl
eS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gbV9i
YWNraW5nU3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmUoKS5pZCwgKmtleSwgIWtleVdh
c0dlbmVyYXRlZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5j
YWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5l
cmF0b3IuIikpOworICAgICAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhj
b21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7
CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2sp
OworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuQ3Vyc29yKElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IE9wZW5DdXJzb3JPcGVyYXRpb24m
IG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24pOworCisgICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28g
dGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCisgICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlz
IGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgorICAgIC8vIGJlY2F1c2Ug
d2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCisg
ICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGlu
IGJldHdlZW4uCisgICAgaWYgKG9wZXJhdGlvbi50YXNrVHlwZSgpID09IElEQkRhdGFiYXNlQmFj
a2VuZDo6UHJlZW1wdGl2ZVRhc2spCisgICAgICAgIHRyYW5zYWN0aW9uLmFkZFByZWVtcHRpdmVF
dmVudCgpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFj
a2luZ1N0b3JlQ3Vyc29yOworICAgIGlmIChvcGVyYXRpb24uaW5kZXhJRCgpID09IElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQob3BlcmF0aW9uLmN1cnNvclR5
cGUoKSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKCpiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2Jq
ZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgb3BlcmF0aW9uLmRpcmVjdGlvbigp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQob3BlcmF0aW9uLnRhc2tUeXBlKCkgPT0g
SURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrKTsKKyAgICAgICAgaWYgKG9wZXJhdGlvbi5j
dXJzb3JUeXBlKCkgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KQorICAgICAgICAgICAgYmFj
a2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcigqYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0
aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJh
bmdlKCksIG9wZXJhdGlvbi5kaXJlY3Rpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IoKmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJh
dGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlS
YW5nZSgpLCBvcGVyYXRpb24uZGlyZWN0aW9uKCkpOworICAgIH0KKworICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNz
KHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFj
aygwKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJREJEYXRh
YmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFj
a2VuZDo6VGFza1R5cGU+KG9wZXJhdGlvbi50YXNrVHlwZSgpKSk7CisKKyAgICBSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZD4gY3Vyc29yID0gdHJhbnNhY3Rpb24uY3JlYXRlQ3Vyc29yQmFja2VuZCgq
YmFja2luZ1N0b3JlQ3Vyc29yLCBvcGVyYXRpb24uY3Vyc29yVHlwZSgpLCB0YXNrVHlwZSwgb3Bl
cmF0aW9uLm9iamVjdFN0b3JlSUQoKSk7CisgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1
Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29y
LT52YWx1ZSgpKTsKKworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxl
dGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y291
bnQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgQ291bnRPcGVyYXRp
b24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24pOworCisgICAgdWludDMyX3QgY291bnQgPSAwOworICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlm
IChvcGVyYXRpb24uaW5kZXhJRCgpID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkKKyAg
ICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9y
ZUtleUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNl
KCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCks
IEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgZWxzZQorICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKCpiYWNraW5nU3RvcmVU
cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0
U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgSW5k
ZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgeworICAg
ICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7CisgICAgICAgICAgICBjb21w
bGV0aW9uQ2FsbGJhY2soMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZG8geworICAgICAgICArK2NvdW50OworICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1
cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCkt
Pm9uU3VjY2Vzcyhjb3VudCk7CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhj
b21wbGV0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpkZWxldGVSYW5nZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBE
ZWxldGVSYW5nZU9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0g
bV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFT
U0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24u
a2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBpZiAoYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUt
PmRlbGV0ZVJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFi
YXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgYmFja2luZ1N0b3JlQ3Vyc29y
LT5yZWNvcmRJZGVudGlmaWVyKCkpKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIpKTsKKyAg
ICAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2tdKCkgewor
ICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soMCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOworICAgIH0K
KworICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKCk7CisgICAgRU1QVFlfQVNZ
TkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIElE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mIG9w
ZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24pOworCisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSgqYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0
aW9uLm9iamVjdFN0b3JlSUQoKSkpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2JqZWN0IHN0b3JlIikpOworICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2tdKCkgeworICAgICAgICAgICAgY29tcGxl
dGlvbkNhbGxiYWNrKDApOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOworICAgIEVNUFRZX0FTWU5DX0NP
TVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mIG9wZXJh
dGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBj
b21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24pOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSA9IG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCk7CisKKyAgICBpZiAoIW1fYmFj
a2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRy
YW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpIHsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBvYmplY3RTdG9yZU1l
dGFkYXRhXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpm
b3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG9iamVj
dFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNv
bXBsZXRpb25DYWxsYmFjayk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6
OmNoYW5nZURhdGFiYXNlVmVyc2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24mIG9wZXJh
dGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBj
b21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24pOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLmRh
dGFiYXNlKCk7CisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJhc2UuaWQoKTsKKyAgICB1
aW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UubWV0YWRhdGEoKS52ZXJzaW9uOworCisgICAg
Ly8gRklYTUU6IERhdGFiYXNlIHZlcnNpb25zIGFyZSBub3cgb2YgdHlwZSB1aW50NjRfdCwgYnV0
IHRoaXMgY29kZSBleHBlY3RlZCBpbnQ2NF90LgorICAgIEFTU0VSVChvcGVyYXRpb24udmVyc2lv
bigpID4gKGludDY0X3Qpb2xkVmVyc2lvbik7CisgICAgZGF0YWJhc2Uuc2V0Q3VycmVudFZlcnNp
b24ob3BlcmF0aW9uLnZlcnNpb24oKSk7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+dXBkYXRl
SURCRGF0YWJhc2VWZXJzaW9uKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
ZGF0YWJhc2UubWV0YWRhdGEoKS52ZXJzaW9uKSkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZSB3aGVuIHVwZGF0aW5nIHZlcnNpb24uIik7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3Mo
KS0+b25FcnJvcihlcnJvcik7CisgICAgICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29t
cGxldGlvbkNhbGxiYWNrLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKCFkYXRhYmFzZS5oYXNQZW5kaW5nU2Vjb25kSGFsZk9wZW4oKSk7CisgICAgZGF0YWJhc2Uu
c2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCpvcGVy
YXRpb24uY2FsbGJhY2tzKCksICpvcGVyYXRpb24uZGF0YWJhc2VDYWxsYmFja3MoKSwgdHJhbnNh
Y3Rpb24uaWQoKSwgb3BlcmF0aW9uLnZlcnNpb24oKSkpOworICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sICZkYXRhYmFzZSwgZGF0YWJhc2UubWV0
YWRhdGEoKSk7CisKKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRp
b25DYWxsYmFjayk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0
aW9uTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oCmluZGV4IDZjNDhiMTIuLmQ5ZGVlZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVy
Q29ubmVjdGlvbkxldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmgKQEAgLTQ4LDcgKzQ4LDYgQEAg
cHVibGljOgogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBzZXJ2ZXIgY29ubmVjdGlvbiBwcm92aWRl
cyBhIHN5bmNocm9ub3VzIGFjY2Vzc29yIHRvIHRoZSBpbi1wcm9jZXNzIGJhY2tpbmcgc3RvcmUg
b2JqZWN0cy4KICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZW1vdmVkIHNv
b24uCiAgICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0
cmFuc2FjdGlvbklEKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpIE9W
RVJSSURFOwogCkBAIC02NSw2ICs2NCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJv
bGxiYWNrVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJLZXkm
IHByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3Rv
cjxWZWN0b3I8UmVmUHRyPElEQktleT4+PiYgaW5kZXhLZXlzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjayk7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwg
Y29uc3QgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNv
bnN0IENyZWF0ZUluZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBEZWxl
dGVJbmRleE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IEdldE9wZXJhdGlvbiYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNh
bGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KElEQlRyYW5zYWN0aW9uQmFj
a2VuZCYsIGNvbnN0IFB1dE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBPcGVu
Q3Vyc29yT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBjb3VudChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDb3VudE9wZXJhdGlvbiYsIHN0
ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlv
bkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlUmFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFj
aykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiwgY29uc3QgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbiYsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxi
YWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25D
YWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZURhdGFiYXNlVmVyc2lv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CiBwcml2YXRlOgogICAg
IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUxldmVsREIqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQ4OTE3ZWMuLmFkZTAzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNjQsNyArMzA2NCw3IEBACiAJCTkzQjcwRDYz
MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpT
RE9NQmluZGluZy5jcHAgKi87IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RP
TUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzQjcwRDQ4MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0I3MEQ2OTA5RUIwQzdDMDA5
RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDREMDlFQjBDN0MwMDlEODQ2OCAvKiBKU0V2ZW50TGlz
dGVuZXIuY3BwICovOyB9OwotCQk5M0I3MEQ2QTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExp
c3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I3MEQ0RTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmggKi87IH07CisJCTkz
QjcwRDZBMDlFQjBDN0MwMDlEODQ2OCAvKiBKU0V2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDRFMDlFQjBDN0MwMDlEODQ2
OCAvKiBKU0V2ZW50TGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5M0I3MEQ2QjA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVt
ZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2OCAvKiBKU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuY3BwICovOyB9OwogCQk5M0I3MEQ2QzA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVt
ZW50RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNC
NzBENkYwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTMwOUVCMEM3QzAwOUQ4
NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuY3BwICovOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGJmYmE4NDcu
Ljk2NzNjYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMS0xNSAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBleGVjdXRpb24gb2Yg
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucyB0byB0aGUgSURCU2VydmVyQ29ubmVjdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0Mzg1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5o
OgorCiAyMDEzLTExLTE1ICBUaWJvciBNZXN6YXJvcyAgPG10aWJvckBpbmYudS1zemVnZWQuaHU+
CiAKICAgICAgICAgQ2xlYW51cCB0aGUgYnVpbGQgZnJvbSB1bnVzZWQgcGFyYW1ldGVycyBpbiBX
ZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9J
bmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tl
bmQuaAppbmRleCAxOWU2ZGUzLi5jZWYwMjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2Vu
ZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9X
ZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNrZW5kLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUg
V2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZF9oCiAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlQmFja2VuZC5oPgogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCg==
</data>
<flag name="commit-queue"
          id="240131"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217061</attachid>
            <date>2013-11-15 10:19:26 -0800</date>
            <delta_ts>2013-11-15 12:43:44 -0800</delta_ts>
            <desc>Patch v4 - All the WebCore.xcodeproj changes needed...</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>95486</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZmE2YzQ0Li5jN2ExZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMw
IEBACisyMDEzLTExLTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb3ZlIGV4ZWN1dGlvbiBvZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zIHRv
IHRoZSBJREJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjQzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBFYWNoIElEQk9wZXJhdGlvbiBoYXMgaXTigJlzIDo6cGVyZm9ybSgp
IG1vdmVkIHRvIGEgbWV0aG9kIG9uIElEQlNlcnZlckNvbm5lY3Rpb24uCisgICAgICAgIFRoaXMg
YWxtb3N0IHJlbW92ZXMgYWxsIGtub3dsZWRnZSBvZiB0aGUgYmFja2luZyBzdG9yZXMgZnJvbSB0
aGUgZnJvbnQgZW5kLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OnJ1bklu
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIp
OgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIHJlZmxlY3QgZWFjaCB0cmFuc2FjdGlvbiBiYWNr
ZW5kIG9wZXJhdGlvbjoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uLmg6CisKKyAgICAgICAgU2NoZWR1bGUgY2VydGFpbiBvcGVyYXRpb25zIHdpdGggY2Fs
bGJhY2tzOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxl
VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnNjaGVkdWxlUHV0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRl
UmFuZ2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oOgorCisgICAgICAgIE1ha2UgZWFjaCBv
cGVyYXRpb27igJlzIHBlcmZvcm0oKSBtZXRob2QgZGVmZXIgdG8gdGhlIElEQlNlcnZlckNvbm5l
Y3Rpb24gKHdpdGggYSBjYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVh
dGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDcmVhdGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5n
ZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpD
cmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKworICAgICAgICBBZGQg
YWNjZXNzb3JzIHRvIGVhY2ggb3BlcmF0aW9u4oCZcyBkYXRhIG1lbWJlcnMgc28gdGhlIElEQlNl
cnZlckNvbm5lY3Rpb24gaGFzIGV2ZXJ5dGhpbmcgaXQgbmVlZHM6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0b3JlTWV0YWRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246Om9iamVjdFN0
b3JlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjp2ZXJzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y2FsbGJh
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbjo6ZGF0YWJhc2VDYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246
OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3JlSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q3JlYXRlSW5kZXhPcGVyYXRpb246OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246Om9iamVjdFN0b3Jl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmlkYkluZGV4TWV0
YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246OkRlbGV0ZUlu
ZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b246OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3Bl
cmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6
aW5kZXhJRCk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVyYXRpb246OmN1cnNvclR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZXRPcGVyYXRpb246OmNhbGxiYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpHZXRPcGVy
YXRpb246OmF1dG9JbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpr
ZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdldE9wZXJhdGlvbjo6R2V0T3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlB1dE9wZXJhdGlvbjo6cHV0TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRp
b246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6a2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6aW5kZXhJRHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UHV0T3BlcmF0aW9uOjppbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3Bl
cmF0aW9uOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UHV0T3BlcmF0aW9uOjp2YWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQdXRPcGVyYXRpb246OlB1dE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJRCk6CisgICAgICAgIChXZWJD
b3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5DdXJzb3JPcGVyYXRpb246OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vy
c29yT3BlcmF0aW9uOjpjdXJzb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JP
cGVyYXRpb246OnRhc2tUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRp
b246OmtleVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DdXJzb3JPcGVyYXRpb246OmN1
cnNvckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbjo6T3BlbkN1
cnNvck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpvYmplY3RTdG9yZUlEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjppbmRleElEKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvdW50T3BlcmF0aW9uOjprZXlSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDb3VudE9w
ZXJhdGlvbjo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uOjpD
b3VudE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVSYW5nZU9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpvYmplY3RT
dG9yZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpjYWxsYmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlUmFuZ2VPcGVyYXRpb246OmtleVJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0aW9uOjpEZWxldGVSYW5nZU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6b2JqZWN0
U3RvcmVJRCk6CisgICAgICAgIChXZWJDb3JlOjpDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpj
YWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6
Q2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbik6CisKKyAgICAgICAgSW1wbGVtZW50IGVhY2ggb3Bl
cmF0aW9uIGluIHRlcm1zIG9mIHRoZSBhcHByb3ByaWF0ZSBiYWNraW5nIHN0b3JlLCB0aGVuIHBl
cmZvcm0gdGhlIGNhbGxiYWNrOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREI6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNsZWFyT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpj
aGFuZ2VEYXRhYmFzZVZlcnNpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaDoKKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0xMS0xNSAgUmFkdSBTdGF2aWxhICA8c3Rh
dmlsYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBSZWdpb25zXSBJbXBsZW1lbnQgdmlzdWFs
IG92ZXJmbG93IGZvciBmaXJzdCAmIGxhc3QgcmVnaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKaW5kZXggMzE0
YzA4Yi4uMDI4YzIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5o
IgogI2luY2x1ZGUgIklEQlJlY29yZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJREJTZXJ2ZXJD
b25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCiAjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAg
LTMwMSw3ICszMDIsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlUmFuZ2UoaW50
NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSQogICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBj
YWxsYmFja3MpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXIoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJPYmplY3RTdG9y
ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRh
dGFiYXNlQmFja2VuZDo6Y2xlYXIiKTsKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwpAQCAtMzA5LDcgKzMx
MCw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpjbGVhcihpbnQ2NF90IHRyYW5zYWN0aW9u
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uUmVhZE9ubHkp
OwogCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlQ2xlYXJPcGVyYXRpb24ob2JqZWN0U3RvcmVJ
ZCwgY2FsbGJhY2tzKTsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDbGVhck9iamVjdFN0b3Jl
T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcyk7CiB9CiAKIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjp0cmFuc2FjdGlvblN0YXJ0ZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFu
c2FjdGlvbikKQEAgLTUyNCw3ICs1MjUsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cnVu
SW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPgogICAg
IGNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvYmpl
Y3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvblZlcnNpb25DaGFuZ2UpOwogICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWQpOwogCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbklkLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3Ms
IGRhdGFiYXNlQ2FsbGJhY2tzLCBtX21ldGFkYXRhKTsKKyAgICB0cmFuc2FjdGlvbi0+c2NoZWR1
bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0
YWJhc2VDYWxsYmFja3MsIG1fbWV0YWRhdGEpOwogCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdTZWNv
bmRIYWxmT3Blbik7CiAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxs
YmFja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUJhY2tlbmQuaAppbmRleCBiZTcwN2U3Li5kMjdkNzE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuaApAQCAt
MjYsMTIgKzI2LDExIEBACiAjaWZuZGVmIElEQkRhdGFiYXNlQmFja2VuZF9oCiAjZGVmaW5lIElE
QkRhdGFiYXNlQmFja2VuZF9oCiAKLSNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNp
bmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIklEQktleVJhbmdlLmgi
CiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKICNpbmNsdWRlICJJREJQZW5kaW5nRGVsZXRlQ2Fs
bC5oIgogI2luY2x1ZGUgIklEQlBlbmRpbmdPcGVuQ2FsbC5oIgotI2luY2x1ZGUgIklEQlNlcnZl
ckNvbm5lY3Rpb24uaCIKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgpAQCAtNDYsNyArNDUsNyBAQCBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UGF0aDsKLWNs
YXNzIElEQktleVJhbmdlOworY2xhc3MgSURCU2VydmVyQ29ubmVjdGlvbjsKIGNsYXNzIElEQlRy
YW5zYWN0aW9uQmFja2VuZDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiBjbGFz
cyBTaGFyZWRCdWZmZXI7CkBAIC0xMTQsNyArMTEzLDcgQEAgcHVibGljOgogICAgIHZvaWQgb3Bl
bkN1cnNvcihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24sIGJvb2wga2V5T25seSwgVGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
Pik7CiAgICAgdm9pZCBjb3VudChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICB2b2lkIGRlbGV0ZVJhbmdlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIGNsZWFyKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0
YTsgfQogICAgIHZvaWQgc2V0Q3VycmVudFZlcnNpb24odWludDY0X3QgdmVyc2lvbikgeyBtX21l
dGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNTIwYzk0Mi4uNjliYWJmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4CiAgICAg
fQogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IGJhY2tlbmREQigpLT5jbGVhcihtX3RyYW5zYWN0aW9uLT5pZCgpLCBpZCgpLCByZXF1ZXN0KTsK
KyAgICBiYWNrZW5kREIoKS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBp
ZCgpLCByZXF1ZXN0KTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaAppbmRleCA3N2JlOTgyLi4zNDZlYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIElEQlNlcnZlckNvbm5lY3Rpb25faAogCiAjaW5jbHVkZSAiSURCTWV0YWRh
dGEuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSW5kZXhlZERCLmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgpAQCAtNDEsNyArNDIsOSBAQCBjbGFzcyBJREJCYWNraW5nU3RvcmVJbnRlcmZh
Y2U7CiBjbGFzcyBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZTsKIGNsYXNzIElE
QkRhdGFiYXNlRXJyb3I7CiBjbGFzcyBJREJLZXk7CitjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ7CiAKK3N0cnVjdCBJREJJbmRleE1ldGFkYXRhOwogc3RydWN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGE7CiAKIC8vIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgc2luZ2xlIGFzeW5jaHJvbm91
cyBsYXllciBiZXR3ZWVuIHRoZSB3ZWItZmFjaW5nIGZyb250ZW5kCkBAIC01NCw3ICs1Nyw2IEBA
IHB1YmxpYzoKICAgICAvLyBGSVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlk
ZXMgYSBzeW5jaHJvbm91cyBhY2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3Jl
IG9iamVjdHMuCiAgICAgLy8gVGhpcyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBz
b29uLgogICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCkgPSAwOwotICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25J
bnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5z
YWN0aW9uSUQpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpID0gMDsKIApAQCAt
NzIsOCArNzQsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmFuc2FjdGlv
bihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxs
YmFjaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXNldFRyYW5zYWN0aW9uKGludDY0X3QgdHJh
bnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rp
b25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworCiAg
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0
X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4mIGluZGV4S2V5cywg
c3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0
aW9uQ2FsbGJhY2spID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiYs
IHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxl
dGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KElEQlRyYW5z
YWN0aW9uQmFja2VuZCYsIGNvbnN0IENyZWF0ZUluZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlv
bjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2sp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5k
JiwgY29uc3QgRGVsZXRlSW5kZXhPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBnZXQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgR2V0T3BlcmF0aW9u
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21w
bGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KElEQlRyYW5zYWN0aW9u
QmFja2VuZCYsIGNvbnN0IFB1dE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIG9wZW5DdXJzb3IoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgT3BlbkN1
cnNvck9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvdW50
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IENvdW50T3BlcmF0aW9uJiwgc3RkOjpmdW5j
dGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJh
Y2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiwgY29uc3QgRGVsZXRlUmFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNv
bnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25z
dCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVm
UHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNoYW5nZURhdGFiYXNlVmVyc2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBj
b25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxs
YmFjaykgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5j
cHAKaW5kZXggYjk1YWFjZi4uN2MzMTI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCkBAIC04NSwx
NSArODUsNiBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tlbmQo
KQogewogICAgIC8vIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8g
Z2V0IGRlbGV0ZWQgdW50aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KICAgICBB
U1NFUlQobV9zdGF0ZSA9PSBGaW5pc2hlZCk7Ci0gICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgdHJh
bnNhY3Rpb24gc2hvdWxkIGFsc28gYmUgZ29uZSBieSBub3cuCi0gICAgQVNTRVJUKCFtX2RhdGFi
YXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KG1faWQpKTsKLX0KLQotSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkKLXsK
LSAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSogYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24gPSBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKG1faWQpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbik7Ci0gICAgcmV0dXJuICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKIH0KIAogdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRh
c2tUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElE
QlN5bmNocm9ub3VzT3BlcmF0aW9uPiBhYm9ydFRhc2spCkBAIC0zMTEsOSArMzAyLDkgQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b24oY29uc3QgSURCT2JqZWN0U3QKICAgICBzY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhKSwgRGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsK
IH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEm
IG1ldGFkYXRhKQordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFi
YXNlQ2FsbGJhY2tzLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKIHsKLSAg
ICBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgdHJhbnNhY3Rpb25JZCwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tz
LCBkYXRhYmFzZUNhbGxiYWNrcyksIElEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZUFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgU3RyaW5nOjpudW1iZXIobWV0YWRhdGEudmVyc2lv
biksIG1ldGFkYXRhLnZlcnNpb24pKTsKKyAgICBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNr
ZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmVxdWVzdGVkVmVyc2lv
biwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIElEQkRhdGFiYXNlQmFja2VuZDo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgU3RyaW5nOjpudW1iZXIobWV0
YWRhdGEudmVyc2lvbiksIG1ldGFkYXRhLnZlcnNpb24pKTsKIH0KIAogdm9pZCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OnNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQpAQCAtMzMzLDcg
KzMyNCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZUdldE9wZXJhdGlv
bihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhCiAKIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiBvYmplY3RTdG9yZU1ldGFkYXRhLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKQogewotICAg
IHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBkYXRhYmFzZSgpLmlkKCks
IG9iamVjdFN0b3JlTWV0YWRhdGEsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgaW5k
ZXhJZHMsIGluZGV4S2V5cykpOworICAgIHNjaGVkdWxlVGFzayhQdXRPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFj
a3MsIGluZGV4SWRzLCBpbmRleEtleXMpKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnNjaGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQpA
QCAtMzQzLDIyICszMzQsMjIgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxl
U2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHNpemVfdCBpbmRleENvdW50KQogCiB2b2lkIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1
cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlw
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBzY2hlZHVsZVRh
c2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGRhdGFiYXNlKCkuaWQoKSwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIGNhbGxiYWNrcykpOworICAgIHNjaGVkdWxlVGFzayhPcGVuQ3Vyc29yT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlv
biwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwogfQogCiB2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDb3VudE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgc2NoZWR1bGVUYXNrKENv
dW50T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgc2NoZWR1bGVUYXNrKENvdW50
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVE
ZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewotICAgIHNjaGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGRh
dGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAg
IHNjaGVkdWxlVGFzayhEZWxldGVSYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0
b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlQ2xlYXJPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnNjaGVkdWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgc2NoZWR1bGVU
YXNrKENsZWFyT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgZGF0YWJhc2UoKS5pZCgpLCBvYmplY3RT
dG9yZUlkLCBjYWxsYmFja3MpKTsKKyAgICBzY2hlZHVsZVRhc2soQ2xlYXJPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrcykpOwogfQogCiBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y3JlYXRl
Q3Vyc29yQmFja2VuZChJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2UmIGN1cnNvciwgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5
cGUgdGFza1R5cGUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKaW5kZXgg
M2Y1ZWViNy4uY2ZjNDEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9y
LmgiCiAjaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNjQsMTMgKzYzLDEyIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysr
OyB9CiAgICAgdm9pZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7
IH0KLSAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgZGVwcmVjYXRlZEJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCk7CiAKICAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFi
YXNlKCkgY29uc3QgIHsgcmV0dXJuICptX2RhdGFiYXNlOyB9CiAKICAgICB2b2lkIHNjaGVkdWxl
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYp
OwogICAgIHZvaWQgc2NoZWR1bGVEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJik7Ci0gICAgdm9pZCBzY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4s
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKKyAgICB2b2lkIHNjaGVkdWxlVmVyc2lvbkNo
YW5nZU9wZXJhdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IElEQkRhdGFi
YXNlTWV0YWRhdGEmKTsKICAgICB2b2lkIHNjaGVkdWxlQ3JlYXRlSW5kZXhPcGVyYXRpb24oaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7CiAgICAgdm9pZCBz
Y2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCSW5kZXhNZXRhZGF0YSYpOwogICAgIHZvaWQgc2NoZWR1bGVHZXRPcGVyYXRpb24oY29uc3Qg
SURCRGF0YWJhc2VNZXRhZGF0YSYsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOwpAQCAtNzksNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzY2hlZHVsZU9wZW5DdXJzb3JPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHZvaWQgc2NoZWR1bGVDb3VudE9w
ZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBzY2hl
ZHVsZURlbGV0ZVJhbmdlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBzY2hl
ZHVsZUNsZWFyT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+KTsKKyAgICB2b2lkIHNjaGVkdWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICBQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZUN1cnNvckJhY2tlbmQoSURCQmFja2lu
Z1N0b3JlQ3Vyc29ySW50ZXJmYWNlJiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCmluZGV4IDI5ZjQyZmEuLmZkNDZjN2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCkBAIC0zMSwzODEgKzMxLDE1OSBA
QAogI2luY2x1ZGUgIklEQkluZGV4V3JpdGVyLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIK
ICNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSURCU2VydmVyQ29u
bmVjdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBDYWxsT25EZXN0cnVjdCB7Ci1wdWJsaWM6Ci0gICAgQ2FsbE9uRGVzdHJ1
Y3Qoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNhbGxiYWNrKQotICAgICAgICA6IG1fY2FsbGJhY2so
Y2FsbGJhY2spCi0gICAgeyB9Ci0KLSAgICB+Q2FsbE9uRGVzdHJ1Y3QoKQotICAgIHsKLSAgICAg
ICAgbV9jYWxsYmFjaygpOwotICAgIH0KKyNkZWZpbmUgU1RBTkRBUkRfREFUQUJBU0VfRVJST1Jf
Q0FMTEJBQ0sgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBvcGVyYXRpb25DYWxsYmFjayA9IFwKKyAgICBbb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJh
Y2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsgXAorICAgICAgICBpZiAo
ZXJyb3IpIFwKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+bV90cmFuc2FjdGlvbi0+YWJvcnQoZXJy
b3IpOyBcCisgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOyBcCisgICAgfTsKIAotcHJpdmF0
ZToKLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9jYWxsYmFjazsKLX07CituYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0
cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3Jh
Z2VBUEksICJDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5jcmVhdGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVj
dFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLCBtX29iamVjdFN0
b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQp
KSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6
OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0b3JlICclcycuIiwgbV9v
YmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBtX3RyYW5z
YWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
CisgICAgUmVmUHRyPENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7
CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVPYmplY3RTdG9yZSgqbV90
cmFuc2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBDcmVhdGVJ
bmRleE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25D
YWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7
Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLmlkLCBtX2luZGV4TWV0YWRh
dGEubmFtZSwgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgsIG1faW5kZXhNZXRhZGF0YS51bmlxdWUs
IG1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgewotICAgICAgICBtX3RyYW5zYWN0aW9uLT5h
Ym9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNy
ZWF0ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisKKyAgICBSZWZQdHI8Q3JlYXRlSW5kZXhPcGVyYXRp
b24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFD
SzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNy
ZWF0ZUluZGV4KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQog
CiB2b2lkIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQogewogICAgIExPRyhT
dG9yYWdlQVBJLCAiQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiIpOwotICAgIG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkucmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQpOwor
ICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlSW5kZXgobV9vYmplY3RTdG9yZUlE
LCBtX2luZGV4SUQpOwogfQogCiB2b2lkIERlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVz
dHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9y
YWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhNZXRhZGF0YS5pZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVy
cm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSkpOwotICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7Ci0gICAgfQorCisg
ICAgUmVmUHRyPERlbGV0ZUluZGV4T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RB
TkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRh
YmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVJbmRleCgqbV90cmFuc2FjdGlvbiwgKnRo
aXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBEZWxldGVJbmRleEFib3J0T3BlcmF0
aW9uOjpwZXJmb3JtKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmFkZEluZGV4KG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
OworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuYWRkSW5kZXgobV9vYmplY3RTdG9yZUlE
LCBtX2luZGV4TWV0YWRhdGEsIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCk7CiB9CiAKIHZv
aWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9u
Q2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlv
bkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiR2V0T3BlcmF0aW9uIik7CiAKLSAg
ICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0KLSAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkp
Ci0gICAgICAgIGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNv
cjsKLSAgICAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhlZERCOjpDdXJzb3JL
ZXlPbmx5KTsKLSAgICAgICAgICAgIC8vIE9iamVjdFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24K
LSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
SW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSW5kZXggVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgICAg
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1f
dHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRl
eGVkREI6OkN1cnNvck5leHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNl
cnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNv
cihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
SW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBr
ZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXk7Ci0gICAgYm9vbCBvazsKLSAgICBpZiAobV9pbmRleElkID09IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAgICAgICAvLyBPYmplY3QgU3RvcmUgUmV0cmll
dmFsIE9wZXJhdGlvbgotICAgICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgICAgIG9rID0g
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJh
Y2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqa2V5LCB2
YWx1ZSk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1fa2V5UGF0aC5pc051
bGwoKSkgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZmZXI6
OmFkb3B0VmVjdG9yKHZhbHVlKSwga2V5LCBtX2tleVBhdGgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTaGFyZWRCdWZm
ZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIH0KLQotICAg
IC8vIEZyb20gaGVyZSB3ZSBhcmUgZGVhbGluZyBvbmx5IHdpdGggaW5kZXhlcy4KLSAgICBvayA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKLSAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFy
eUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXByaW1h
cnlLZXkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlP
bmx5KSB7Ci0gICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhwcmltYXJ5S2V5LmdldCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFsIE9w
ZXJhdGlvbgotICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKLSAgICBvayA9IG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+
Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsK
LSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtX2F1dG9JbmNyZW1lbnQgJiYgIW1f
a2V5UGF0aC5pc051bGwoKSkgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNoYXJl
ZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBwcmltYXJ5S2V5LCBtX2tleVBhdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2hhcmVkQnVm
ZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOworICAgIFJlZlB0cjxHZXRPcGVyYXRpb24+IG9wZXJh
dGlvbih0aGlzKTsKKyAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAg
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmdldCgqbV90cmFu
c2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBQdXRPcGVyYXRp
b246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIHsK
LSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwot
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJQdXRPcGVyYXRpb24iKTsKICAgICBBU1NFUlQobV90cmFu
c2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25SZWFkT25seSk7Ci0gICAg
QVNTRVJUKG1faW5kZXhJZHMuc2l6ZSgpID09IG1faW5kZXhLZXlzLnNpemUoKSk7Ci0gICAgYm9v
bCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKLQotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLSAg
ICBpZiAobV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIG1f
b2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiAhbV9rZXkpIHsKLSAgICAgICAgUmVmUHRyPElE
QktleT4gYXV0b0luY0tleSA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVj
dGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2VuZXJhdGVLZXkoKm1fdHJhbnNhY3Rp
b24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7Ci0gICAgICAgIGtleVdhc0dlbmVy
YXRlZCA9IHRydWU7Ci0gICAgICAgIGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7Ci0gICAg
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdlbmVyYXRv
ciB2YWx1ZSByZWFjaGVkLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBrZXkgPSBhdXRvSW5jS2V5OwotICAgIH0gZWxzZQotICAgICAgICBrZXkgPSBtX2tleTsK
LQotICAgIEFTU0VSVChrZXkpOwotICAgIEFTU0VSVChrZXktPmlzVmFsaWQoKSk7Ci0KLSAgICBS
ZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKLSAgICBpZiAobV9w
dXRNb2RlID09IElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSkgewotICAgICAgICBib29sIG9r
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmUuaWQsICprZXksIHJlY29yZElkZW50aWZpZXIpOwotICAgICAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNr
aW5nIGtleSBleGlzdGVuY2UuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChyZWNvcmRJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFZlY3RvcjxS
ZWZQdHI8SURCSW5kZXhXcml0ZXI+PiBpbmRleFdyaXRlcnM7Ci0gICAgU3RyaW5nIGVycm9yTWVz
c2FnZTsKLSAgICBib29sIG9iZXlzQ29uc3RyYWludHMgPSBmYWxzZTsKLSAgICBib29sIGJhY2tp
bmdTdG9yZVN1Y2Nlc3MgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm1ha2VJbmRleFdyaXRlcnMobV90cmFuc2Fj
dGlvbi0+aWQoKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLCAqa2V5LCBrZXlXYXNHZW5l
cmF0ZWQsIG1faW5kZXhJZHMsIG1faW5kZXhLZXlzLCBpbmRleFdyaXRlcnMsICZlcnJvck1lc3Nh
Z2UsIG9iZXlzQ29uc3RyYWludHMpOwotICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vzcykgewot
ICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5n
IHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghb2JleXNDb25zdHJhaW50cykgewotICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiBBZnRlciB0
aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLSAg
ICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2Fj
dGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwg
bV9vYmplY3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWlu
ZyBwdXQvYWRkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIElEQkluZGV4
V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAgICAgaW5k
ZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIuZ2V0KCksICptX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0
b3JlKCksIG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOwotICAgIH0KLQotICAgIGlmIChtX29i
amVjdFN0b3JlLmF1dG9JbmNyZW1lbnQgJiYgbV9wdXRNb2RlICE9IElEQkRhdGFiYXNlQmFja2Vu
ZDo6Q3Vyc29yVXBkYXRlICYmIGtleS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgewot
ICAgICAgICBib29sIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT51cGRhdGVLZXlHZW5lcmF0b3IoKm1fdHJh
bnNhY3Rpb24sIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgIWtleVdhc0dl
bmVyYXRlZCk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRvci4iKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKGtleS5yZWxlYXNlKCkpOworICAgIEFTU0VSVChtX2luZGV4SURzLnNpemUoKSA9
PSBtX2luZGV4S2V5cy5zaXplKCkpOworCisgICAgUmVmUHRyPFB1dE9wZXJhdGlvbj4gb3BlcmF0
aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisgICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkucHV0KCptX3RyYW5z
YWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIFNldEluZGV4ZXNS
ZWFkeU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25D
YWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlv
biIpOworCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luZGV4Q291bnQ7ICsraSkKICAg
ICAgICAgbV90cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKKworICAg
IGNhbGxPbk1haW5UaHJlYWQoY29tcGxldGlvbkNhbGxiYWNrKTsKIH0KIAogdm9pZCBPcGVuQ3Vy
c29yT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNh
bGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiT3BlbkN1cnNvck9wZXJhdGlvbiIpOwog
Ci0gICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMg
dGhlIHRyYW5zYWN0aW9uCi0gICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBU
aGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgotICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2Fu
dCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCi0gICAgLy8gaW5kZXhl
cyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0g
ICAgaWYgKG1fdGFza1R5cGUgPT0gSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0aXZlVGFzaykK
LSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWRkUHJlZW1wdGl2ZUV2ZW50KCk7Ci0KLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7Ci0g
ICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAg
ICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1
cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0
aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRh
YmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2spOwotICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IElu
ZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJ
ZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbklu
ZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdl
LmdldCgpLCBtX2RpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJz
b3IpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTaGFyZWRC
dWZmZXIqPigwKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJREJEYXRhYmFzZUJh
Y2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGU+KG1fdGFza1R5cGUpKTsKLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBj
dXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVDdXJzb3JCYWNrZW5kKCpiYWNraW5nU3RvcmVD
dXJzb3IsIG1fY3Vyc29yVHlwZSwgdGFza1R5cGUsIG1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFy
eUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOworICAgIFJlZlB0cjxPcGVuQ3Vyc29yT3BlcmF0aW9u
PiBvcGVyYXRpb24odGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7
CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5vcGVu
Q3Vyc29yKCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2
b2lkIENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0
aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxl
dGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiQ291bnRPcGVyYXRpb24iKTsK
LSAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNv
ckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yOwotCi0gICAgaWYgKG1faW5kZXhJZCA9PSBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCi0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKLSAgICBl
bHNlCi0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4
S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdl
LmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwotICAgIGlmICghYmFja2luZ1N0b3JlQ3Vy
c29yKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZG8gewotICAgICAgICArK2NvdW50OwotICAgIH0gd2hpbGUg
KGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGNvdW50KTsKKworICAgIFJlZlB0cjxDb3VudE9wZXJhdGlvbj4gb3Bl
cmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOworCisg
ICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY291bnQoKm1f
dHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZvaWQgRGVsZXRl
UmFuZ2VPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25D
YWxsYmFjaykKIHsKLSAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9u
Q2FsbGJhY2spOwotCiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVSYW5nZU9wZXJhdGlvbiIp
OwotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rp
b24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsK
LSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVSZWNvcmQobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlk
LCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSkpIHsKLSAgICAgICAgICAg
ICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGRlbGV0aW5nIGRhdGEgaW4gcmFu
Z2UiKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwotICAgIH0K
LQotICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKworICAgIFJlZlB0cjxEZWxldGVSYW5n
ZU9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOworICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9S
X0NBTExCQUNLOworCisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVsZXRlUmFuZ2UoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFj
ayk7CiB9CiAKLXZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3ZvaWQgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogewotICAg
IENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KLSAg
ICBMT0coU3RvcmFnZUFQSSwgIk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24iKTsKLSAgICBpZiAo
IW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRC
YWNraW5nU3RvcmUoKS0+Y2xlYXJPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVk
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQp
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2Jq
ZWN0IHN0b3JlIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoKTsKKyAgICBMT0coU3RvcmFnZUFQSSwgIkNsZWFyT2JqZWN0U3RvcmVPcGVyYXRp
b24iKTsKKworICAgIFJlZlB0cjxDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uPiBvcGVyYXRpb24o
dGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jbGVhck9iamVjdFN0b3Jl
KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIERl
bGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBj
b21wbGV0aW9uQ2FsbGJhY2spCiB7Ci0gICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3Qo
Y29tcGxldGlvbkNhbGxiYWNrKTsKLQogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24iKTsKLSAgICBib29sIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmpl
Y3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEu
aWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qg
c3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7
Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICB9CisKKyAgICBSZWZQ
dHI8RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKKyAgICBTVEFO
REFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKKworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZU9iamVjdFN0b3JlKCptX3RyYW5zYWN0aW9u
LCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwogfQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
Y29tcGxldGlvbkNhbGxiYWNrKQogewotICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0
KGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KICAgICBMT0coU3RvcmFnZUFQSSwgIlZlcnNpb25DaGFu
Z2VPcGVyYXRpb24iKTsKLSAgICBJREJEYXRhYmFzZUJhY2tlbmQmIGRhdGFiYXNlID0gbV90cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKTsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBkYXRhYmFzZS5p
ZCgpOwotICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNp
b247Ci0KLSAgICAvLyBGSVhNRTogRGF0YWJhc2UgdmVyc2lvbnMgYXJlIG5vdyBvZiB0eXBlIHVp
bnQ2NF90LCBidXQgdGhpcyBjb2RlIGV4cGVjdGVkIGludDY0X3QuCi0gICAgQVNTRVJUKG1fdmVy
c2lvbiA+IChpbnQ2NF90KW9sZFZlcnNpb24pOwotICAgIGRhdGFiYXNlLnNldEN1cnJlbnRWZXJz
aW9uKG1fdmVyc2lvbik7Ci0gICAgaWYgKCFkYXRhYmFzZS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT51cGRhdGVJREJEYXRhYmFzZVZlcnNpb24obV90cmFuc2Fj
dGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRh
dGFiYXNlLm1ldGFkYXRhKCkudmVyc2lvbikpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ug
d2hlbiB1cGRhdGluZyB2ZXJzaW9uLiIpOwotICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihl
cnJvcik7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBBU1NFUlQoIWRhdGFiYXNlLmhhc1BlbmRpbmdTZWNvbmRIYWxmT3Bl
bigpKTsKLSAgICBkYXRhYmFzZS5zZXRQZW5kaW5nU2Vjb25kSGFsZk9wZW4oSURCUGVuZGluZ09w
ZW5DYWxsOjpjcmVhdGUoKm1fY2FsbGJhY2tzLCAqbV9kYXRhYmFzZUNhbGxiYWNrcywgbV90cmFu
c2FjdGlvbklkLCBtX3ZlcnNpb24pKTsKLSAgICBtX2NhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVk
KG9sZFZlcnNpb24sICZkYXRhYmFzZSwgZGF0YWJhc2UubWV0YWRhdGEoKSk7CisKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uPiBvcGVyYXRpb24o
dGhpcyk7CisgICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7CisKKyAgICBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jaGFuZ2VEYXRhYmFzZVZl
cnNpb24oKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7CiB9CiAKIHZv
aWQgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCiB7CiAgICAgTE9H
KFN0b3JhZ2VBUEksICJDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5yZW1vdmVPYmplY3RTdG9yZShtX29iamVjdFN0b3JlSWQp
OworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkucmVtb3ZlT2JqZWN0U3RvcmUobV9vYmpl
Y3RTdG9yZUlEKTsKIH0KIAogdm9pZCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpw
ZXJmb3JtKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaAppbmRleCBjNGUzOWIz
Li45MmJhYTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5oCkBAIC0yOCwx
MyArMjgsMTQgQEAKIAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgogI2luY2x1ZGUg
IklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQlNlcnZlckNvbm5lY3Rpb247
CisKIGNsYXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlv
biB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKQEAgLTQyLDYgKzQzLDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURF
IEZJTkFMOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVN
ZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsgfQorCiBwcml2
YXRlOgogICAgIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3Jl
TWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKQEAgLTYwLDYg
KzY0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNz
Q2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVN
ZXRhZGF0YTsgfQorCiBwcml2YXRlOgogICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFu
c2FjdGlvbikKQEAgLTczLDE1ICs4MCwxOSBAQCBwcml2YXRlOgogCiBjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJU
cmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGlu
dDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNr
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmVyc2lvbkNoYW5nZU9wZXJh
dGlvbih0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRh
YmFzZUNhbGxiYWNrcykpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFZlcnNpb25DaGFu
Z2VPcGVyYXRpb24odHJhbnNhY3Rpb24sIHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxs
YmFja3MpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CisKKyAgICBpbnQ2NF90IHZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICBJREJDYWxsYmFja3MqIGNh
bGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2tzLmdldCgpOyB9CisgICAgSURCRGF0
YWJhc2VDYWxsYmFja3MqIGRhdGFiYXNlQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
YmFzZUNhbGxiYWNrcy5nZXQoKTsgfQorCiBwcml2YXRlOgotICAgIFZlcnNpb25DaGFuZ2VPcGVy
YXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQor
ICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKICAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fdHJhbnNhY3Rp
b25JZCh0cmFuc2FjdGlvbklkKQogICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQogICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tz
KGRhdGFiYXNlQ2FsbGJhY2tzKQpAQCAtODksNyArMTAwLDYgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGlu
dDY0X3QgbV90cmFuc2FjdGlvbklkOwogICAgIGludDY0X3QgbV92ZXJzaW9uOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKQEAgLTEwNSwxMiArMTE1LDEyIEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiAgICAgICAg
IDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQo
b2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkK
ICAgICB7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFu
c2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKKyAgICBjb25zdCBp
bnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKIH07CiAKIGNsYXNzIERlbGV0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewpAQCAtMTU4LDE2
ICsxNjgsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUlu
ZGV4T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7
CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBz
dWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9y
ZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9CisgICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaWRiSW5kZXhNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRh
ZGF0YTsgfQorCiBwcml2YXRlOgogICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXhN
ZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwogICAgIGNvbnN0
IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogfTsKIApAQCAtMTgxLDE0ICsxOTUs
MTQgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0g
ICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRl
eElkKGluZGV4SWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCisg
ICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAg
Y29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4
SUQ7CiB9OwogCiBjbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRp
b24gewpAQCAtMTk4LDE2ICsyMTIsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERlbGV0ZUluZGV4T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSk7CiAgICAgfQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50
NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9Cisg
ICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaWRiSW5kZXhNZXRhZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhNZXRhZGF0YTsgfQorCiBwcml2YXRlOgogICAgIERlbGV0ZUluZGV4T3BlcmF0
aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAgICAgICAgOiBt
X3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmpl
Y3RTdG9yZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQogICAg
ICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAgICB9CiAKICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9y
ZUlEOwogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwogfTsKIApA
QCAtMjIxLDEzICsyMzksMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKICAg
ICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3Rv
cmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9y
ZUlkKQogICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQogICAgIHsKICAg
ICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwot
ICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9v
YmplY3RTdG9yZUlEOwogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRh
OwogfTsKIApAQCAtMjM4LDEyICsyNTYsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdldE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgbWV0YWRhdGEsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKICAgICB9CiAg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxs
YmFjaykgT1ZFUlJJREUgRklOQUw7CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25z
dCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KKyAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4SUQ7IH0KKyAgICBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQorICAgIElEQktleVJhbmdlKiBr
ZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2UuZ2V0KCk7IH0KKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQo
KTsgfQorICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3Jl
bWVudDsgfQorICAgIElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UGF0
aDsgfQorCiBwcml2YXRlOgogICAgIEdldE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQq
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChtZXRhZGF0YS5pZCkKLSAgICAgICAgLCBtX29i
amVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkK
KyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2lu
ZGV4SUQoaW5kZXhJZCkKICAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEub2JqZWN0U3RvcmVz
LmdldChvYmplY3RTdG9yZUlkKS5rZXlQYXRoKQogICAgICAgICAsIG1fYXV0b0luY3JlbWVudCht
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9JbmNyZW1lbnQpCiAg
ICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKQEAgLTI1NSw5ICsyODEsOCBAQCBwcml2YXRl
OgogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rp
b247Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SWQ7CisgICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50NjRfdCBtX2luZGV4SUQ7CiAg
ICAgY29uc3QgSURCS2V5UGF0aCBtX2tleVBhdGg7CiAgICAgY29uc3QgYm9vbCBtX2F1dG9JbmNy
ZW1lbnQ7CiAgICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwpAQCAtMjY3
LDMzICsyOTIsNDAgQEAgcHJpdmF0ZToKIAogY2xhc3MgUHV0T3BlcmF0aW9uIDogcHVibGljIElE
Qk9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9u
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRh
YmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mIGluZGV4S2V5cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUg
cHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHV0T3BlcmF0aW9uKHRyYW5zYWN0
aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJh
Y2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UHV0T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9k
ZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJS
SURFIEZJTkFMOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX3B1dE1vZGU7IH0KKyAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhJiBvYmplY3RTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KKyAgICBJ
REJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmdldCgpOyB9CisgICAgY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElEcygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhJRHM7IH0KKyAg
ICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzKCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleEtleXM7IH0KKyAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbGJhY2tzLmdldCgpOyB9CisgICAgU2hhcmVkQnVmZmVyKiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBQdXRPcGVyYXRpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+JiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5k
OjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMpCisgICAgUHV0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4mIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRh
YmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPElu
ZGV4S2V5cz4mIGluZGV4S2V5cykKICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQogICAgICAgICAsIG1fb2JqZWN0
U3RvcmUob2JqZWN0U3RvcmUpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgLCBt
X2tleShrZXkpCiAgICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCiAgICAgICAgICwgbV9jYWxs
YmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1faW5kZXhJZHMoaW5kZXhJZHMpCisgICAgICAg
ICwgbV9pbmRleElEcyhpbmRleElkcykKICAgICAgICAgLCBtX2luZGV4S2V5cyhpbmRleEtleXMp
CiAgICAgewogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJh
bnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSBtX29iamVjdFN0b3JlOwogICAgIGNvbnN0IFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1fdmFsdWU7CiAgICAgY29uc3QgUmVmUHRyPElEQktleT4gbV9rZXk7CiAgICAg
Y29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIG1fcHV0TW9kZTsKICAgICBjb25zdCBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLSAgICBjb25zdCBWZWN0b3I8aW50NjRf
dD4gbV9pbmRleElkczsKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4gbV9pbmRleElEczsKICAg
ICBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiBtX2luZGV4S2V5czsKIH07CiAKQEAgLTMxNywxNyAr
MzQ5LDI2IEBAIHByaXZhdGU6CiAKIGNsYXNzIE9wZW5DdXJzb3JPcGVyYXRpb24gOiBwdWJsaWMg
SURCT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9w
ZW5DdXJzb3JPcGVyYXRpb24odHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBjYWxs
YmFja3MpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGVuQ3Vyc29yT3BlcmF0aW9u
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCBjdXJzb3JUeXBlLCB0YXNrVHlwZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJS
SURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4g
bV9vYmplY3RTdG9yZUlEOyB9CisgICAgaW50NjRfdCBpbmRleElEKCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleElEOyB9CisgICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyAgICBJbmRleGVkREI6OkN1cnNvclR5cGUg
Y3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQorICAgIElEQkRhdGFi
YXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Rhc2tUeXBl
OyB9CisgICAgSURCS2V5UmFuZ2UqIGtleVJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9rZXlSYW5n
ZS5nZXQoKTsgfQorICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorCiBwcml2YXRlOgot
ICAgIE9wZW5DdXJzb3JPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElE
QkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCisgICAgT3BlbkN1cnNvck9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRh
dGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAg
ICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQo
b2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKKyAgICAgICAgLCBt
X29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4SUQoaW5kZXhJ
ZCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQogICAgICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKICAgICAgICAgLCBtX2N1cnNvclR5cGUoY3Vyc29yVHlwZSkKQEAgLTMzNyw5
ICszNzgsOCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBtX2RhdGFiYXNlSWQ7Ci0g
ICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2lu
ZGV4SWQ7CisgICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7CisgICAgY29uc3QgaW50
NjRfdCBtX2luZGV4SUQ7CiAgICAgY29uc3QgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsK
ICAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwpAQCAtMzQ5LDcz
ICszODksODEgQEAgcHJpdmF0ZToKIAogY2xhc3MgQ291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURC
T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENvdW50T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ291bnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtl
eVJhbmdlLCBjYWxsYmFja3MpKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREUgRklOQUw7CisKKyAg
ICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7
IH0KKyAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4SUQ7IH0KKyAg
ICBJREJLZXlSYW5nZSoga2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tleVJhbmdlLmdldCgp
OyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxi
YWNrcy5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBDb3VudE9wZXJhdGlvbihJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBDb3VudE9wZXJhdGlv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKLSAgICAg
ICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAgICAgLCBtX2luZGV4SWQo
aW5kZXhJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKKyAgICAg
ICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKICAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQog
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKICAgICB7CiAgICAgfQogCiAgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2
NF90IG1fZGF0YWJhc2VJZDsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAg
ICBjb25zdCBpbnQ2NF90IG1faW5kZXhJZDsKKyAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3Rv
cmVJRDsKKyAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKICAgICBjb25zdCBSZWZQdHI8SURC
S2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CiAgICAgY29uc3QgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CiB9OwogCiBjbGFzcyBEZWxldGVSYW5nZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJP
cGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4g
Y3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZVJhbmdlT3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZUlkLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJS
SURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkgY29uc3QgeyByZXR1cm4g
bV9vYmplY3RTdG9yZUlEOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2UuZ2V0KCk7IH0KKwogcHJpdmF0ZToKLSAgICBEZWxl
dGVSYW5nZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAg
RGVsZXRlUmFuZ2VPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQotICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1fb2JqZWN0
U3RvcmVJRChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCiAg
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQogICAgIHsKICAgICB9CiAKICAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGludDY0
X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOworICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwogICAgIGNvbnN0IFJlZlB0cjxJREJLZXlS
YW5nZT4gbV9rZXlSYW5nZTsKICAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxi
YWNrczsKIH07CiAKLWNsYXNzIENsZWFyT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CitjbGFzcyBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURC
VHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDbGVhck9wZXJhdGlvbih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
Y2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xlYXJPYmplY3RTdG9y
ZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgY2FsbGJhY2tzKSk7CiAgICAg
fQogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNz
Q2FsbGJhY2spIE9WRVJSSURFIEZJTkFMOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlEKCkg
Y29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9CisgICAgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MoKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQorCiBwcml2YXRlOgot
ICAgIENsZWFyT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24oSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgICAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgICAg
ICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCisgICAgICAgICwgbV9vYmplY3RTdG9y
ZUlEKG9iamVjdFN0b3JlSWQpCiAgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQogICAg
IHsKICAgICB9CiAKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0
aW9uOwotICAgIGNvbnN0IGludDY0X3QgbV9kYXRhYmFzZUlkOwotICAgIGNvbnN0IGludDY0X3Qg
bV9vYmplY3RTdG9yZUlkOworICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwogICAg
IGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3Rv
cmVMZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5jcHAKaW5kZXggMGViZDJlNi4uMDYwNTQ2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5n
U3RvcmVMZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCkBAIC0xOTIyLDExICsxOTIyLDYgQEAg
dm9pZCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjplc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW8KICAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5z
ZXQodHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpjcmVh
dGUodHJhbnNhY3Rpb25JRCwgdGhpcykpOwogfQogCi1JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkludGVyZmFjZSogSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKLXsKLSAgICByZXR1cm4gbV9iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSUQpOwotfQotCiB2b2lkIElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT50cmFuc2FjdGlv
bklEKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKaW5kZXggM2RhNGZiMy4u
MGM2OTUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKQEAgLTExMCw3ICsx
MTAsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVJbmRleEtleXMoY29uc3Qg
TGV2ZWxEQlNsaWNlJiwgY29uc3QgTGV2ZWxEQlNsaWNlJik7CiAKLSAgICBJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkludGVyZmFjZSogZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAgICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqKTsKIAogcHJvdGVjdGVk
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAppbmRleCBiNWNm
ODIxLi45MGNiMjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
LmNwcApAQCAtMzEsOSArMzEsMjAgQEAKIAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUxldmVs
REIuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuaCIKKyNp
bmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhXcml0ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCisjZGVmaW5lIEFTWU5DX0NPTVBMRVRJT05f
Q0FMTEJBQ0soY2FsbGJhY2ssIGFyZykgXAorICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNr
LCBhcmddKCkgeyBcCisgICAgICAgIGNhbGxiYWNrKGFyZyk7IFwKKyAgICB9KTsKKworI2RlZmlu
ZSBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNhbGxiYWNrKSBcCisgICAgY2FsbE9u
TWFpblRocmVhZChbY2FsbGJhY2tdKCkgeyBcCisgICAgICAgIGNhbGxiYWNrKDApOyBcCisgICAg
fSk7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6
OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUxldmVsREIqIGJhY2tp
bmdTdG9yZSkKQEAgLTUxLDEzICs2Miw2IEBAIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogSURC
U2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKQogICAgIHJl
dHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKIH0KIAotSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25JbnRlcmZhY2UqIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZXByZWNhdGVkQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKQotewotICAgIGlmICghbV9i
YWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2JhY2tpbmdTdG9y
ZS0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSUQpOwotfQot
CiBib29sIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjppc0Nsb3NlZCgpCiB7CiAgICAgcmV0
dXJuIG1fY2xvc2VkOwpAQCAtMTgxLDExICsxODUsMzg2IEBAIHZvaWQgSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREI6OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qg
ZGF0CiAgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVy
LmdldCgpLCAqbV9iYWNraW5nU3RvcmUsICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgZGF0YWJh
c2VJRCwgb2JqZWN0U3RvcmVJRCk7CiAgICAgfQogCi0gICAgY2FsbE9uTWFpblRocmVhZChbY29t
cGxldGlvbkNhbGxiYWNrXSgpIHsKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKDApOwotICAg
IH0pOworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxi
YWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0
U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgQ3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1f
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NF
UlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOworCisgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFt
ZSA9IG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCkubmFtZTsKKworICAgIGlmICghbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwg
dHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVNZXRhZGF0
YSgpLmlkLCBvYmplY3RTdG9yZU5hbWUsIG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCku
a2V5UGF0aCwgb3BlcmF0aW9uLm9iamVjdFN0b3JlTWV0YWRhdGEoKS5hdXRvSW5jcmVtZW50KSkg
eworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2ssIG9iamVjdFN0
b3JlTmFtZV0oKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6
Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBvYmpl
Y3RTdG9yZU5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9u
Q2FsbGJhY2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVJ
bmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDcmVhdGVJbmRl
eE9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbik7CisKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRl
eE1ldGFkYXRhID0gb3BlcmF0aW9uLmlkYkluZGV4TWV0YWRhdGEoKTsKKyAgICBpZiAoIW1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVJbmRleCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0
aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgaW5kZXhNZXRh
ZGF0YS5pZCwgaW5kZXhNZXRhZGF0YS5uYW1lLCBpbmRleE1ldGFkYXRhLmtleVBhdGgsIGluZGV4
TWV0YWRhdGEudW5pcXVlLCBpbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywgaW5kZXhNZXRhZGF0YV0oKSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5h
bCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVhdGUgaW5kZXggJyVzJy4iLCBpbmRleE1ldGFkYXRh
Lm5hbWUudXRmOCgpLmRhdGEoKSkpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJh
Y2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZWxldGVJbmRleChJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBEZWxldGVJbmRleE9wZXJh
dGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbik7CisKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFk
YXRhID0gb3BlcmF0aW9uLmlkYkluZGV4TWV0YWRhdGEoKTsKKyAgICBpZiAoIW1fYmFja2luZ1N0
b3JlLT5kZWxldGVJbmRleCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRh
dGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgaW5kZXhNZXRhZGF0YS5p
ZCkpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBpbmRl
eE1ldGFkYXRhXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5n
Ojpmb3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgaW5kZXhNZXRh
ZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNh
bGxiYWNrKTsKIH0KIAordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Z2V0KElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IEdldE9wZXJhdGlvbiYgb3BlcmF0
aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNv
bXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVs
REIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlv
bik7CisKKyAgICBSZWZQdHI8SURCS2V5PiBrZXk7CisKKyAgICBpZiAob3BlcmF0aW9uLmtleVJh
bmdlKCktPmlzT25seUtleSgpKQorICAgICAgICBrZXkgPSBvcGVyYXRpb24ua2V5UmFuZ2UoKS0+
bG93ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNv
ckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yOworICAgICAgICBpZiAob3BlcmF0aW9uLmlu
ZGV4SUQoKSA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgICAgIEFT
U0VSVChvcGVyYXRpb24uY3Vyc29yVHlwZSgpICE9IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSk7
CisgICAgICAgICAgICAvLyBPYmplY3RTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3Jl
Q3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5p
ZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgSW5k
ZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChv
cGVyYXRpb24uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgeworICAg
ICAgICAgICAgICAgIC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KKyAgICAgICAg
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5
Q3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5p
ZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVy
YXRpb24ua2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1ZSBSZXRyaWV2
YWwgT3BlcmF0aW9uCisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNr
aW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0
aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJhY2tpbmdTdG9y
ZUN1cnNvcikgeworICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3Mo
KTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlv
bkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGtl
eSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7CisgICAgfQorCisgICAgUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleTsKKyAgICBib29sIG9rOworICAgIGlmIChvcGVyYXRpb24uaW5kZXhJRCgp
ID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICAvLyBPYmplY3QgU3Rv
cmUgUmV0cmlldmFsIE9wZXJhdGlvbgorICAgICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CisgICAg
ICAgIG9rID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQo
KSwgKmtleSwgdmFsdWUpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBvcGVyYXRp
b24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQu
IikpOworICAgICAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0
aW9uQ2FsbGJhY2spOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygp
LT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJB
Q0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChvcGVyYXRpb24uYXV0b0luY3JlbWVudCgpICYmICFvcGVyYXRpb24ua2V5
UGF0aCgpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9u
U3VjY2VzcyhTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSwga2V5LCBvcGVyYXRpb24u
a2V5UGF0aCgpKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0so
Y29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcjo6YWRv
cHRWZWN0b3IodmFsdWUpKTsKKyAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFD
Syhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICByZXR1cm47CisKKyAgICB9CisKKyAgICAv
LyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcgb25seSB3aXRoIGluZGV4ZXMuCisgICAgb2sgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KCpiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJ
RCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAgICBpZiAoIW9r
KSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGluIGdldFByaW1hcnlLZXlWaWFJbmRleC4iKSk7CisgICAgICAgIEVNUFRZX0FTWU5D
X0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIXByaW1hcnlLZXkpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxM
QkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
IChvcGVyYXRpb24uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSkgewor
ICAgICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCisgICAgICAgIG9wZXJh
dGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKHByaW1hcnlLZXkuZ2V0KCkpOworICAgICAgICBF
TVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJp
ZXZhbCBPcGVyYXRpb24KKyAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7CisgICAgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+Z2V0UmVjb3JkKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCAqcHJpbWFyeUtleSwg
dmFsdWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKKyAgICAgICAgRU1Q
VFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBv
cGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOworICAgICAgICBFTVBUWV9BU1lOQ19D
T01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKG9wZXJhdGlvbi5hdXRvSW5jcmVtZW50KCkgJiYgIW9wZXJhdGlvbi5r
ZXlQYXRoKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1
Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIHByaW1hcnlLZXksIG9wZXJh
dGlvbi5rZXlQYXRoKCkpOworICAgICAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNL
KGNvbXBsZXRpb25DYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3BlcmF0
aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3MoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1
ZSkpOworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxi
YWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KElEQlRyYW5z
YWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFB1dE9wZXJhdGlvbiYgb3BlcmF0aW9u
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBs
ZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIq
IGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7
CisKKyAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9IGZhbHNlOworCisgICAgUmVmUHRyPElEQktl
eT4ga2V5OworICAgIGlmIChvcGVyYXRpb24ucHV0TW9kZSgpICE9IElEQkRhdGFiYXNlQmFja2Vu
ZDo6Q3Vyc29yVXBkYXRlICYmIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmF1dG9JbmNyZW1lbnQg
JiYgIW9wZXJhdGlvbi5rZXkoKSkgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5
ID0gbV9iYWNraW5nU3RvcmUtPmdlbmVyYXRlS2V5KHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5k
YXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmlkKTsKKyAgICAgICAga2V5
V2FzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1h
eGltdW0ga2V5IGdlbmVyYXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKKyAgICAgICAgICAgIEVNUFRZ
X0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgIH0g
ZWxzZQorICAgICAgICBrZXkgPSBvcGVyYXRpb24ua2V5KCk7CisKKyAgICBBU1NFUlQoa2V5KTsK
KyAgICBBU1NFUlQoa2V5LT5pc1ZhbGlkKCkpOworCisgICAgUmVmUHRyPElEQlJlY29yZElkZW50
aWZpZXI+IHJlY29yZElkZW50aWZpZXI7CisgICAgaWYgKG9wZXJhdGlvbi5wdXRNb2RlKCkgPT0g
SURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5KSB7CisgICAgICAgIGJvb2wgb2sgPSBtX2JhY2tp
bmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24s
IHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuaWQs
ICprZXksIHJlY29yZElkZW50aWZpZXIpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAg
ICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBjaGVj
a2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKKyAgICAgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJ
T05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocmVjb3JkSWRlbnRpZmllcikgeworICAgICAgICAgICAgb3Bl
cmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGlu
IHRoZSBvYmplY3Qgc3RvcmUuIikpOworICAgICAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElP
Tl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgVmVjdG9yPFJlZlB0cjxJREJJbmRleFdyaXRlcj4+IGluZGV4
V3JpdGVyczsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGJvb2wgb2JleXNDb25zdHJh
aW50cyA9IGZhbHNlOworICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0
b3JlLT5tYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLmlkKCksIHRyYW5zYWN0aW9uLmRhdGFi
YXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCksICprZXksIGtleVdhc0dlbmVyYXRl
ZCwgb3BlcmF0aW9uLmluZGV4SURzKCksIG9wZXJhdGlvbi5pbmRleEtleXMoKSwgaW5kZXhXcml0
ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKKyAgICBpZiAoIWJhY2tpbmdT
dG9yZVN1Y2Nlc3MpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcgaW5kZXgga2V5
cy4iKSk7CisgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlv
bkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW9iZXlzQ29uc3Ry
YWludHMpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBl
cnJvck1lc3NhZ2UpKTsKKyAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhj
b21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQmVm
b3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwg
cm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCisgICAgYmFja2luZ1N0
b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQoKmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9y
ZSgpLmlkLCAqa2V5LCBvcGVyYXRpb24udmFsdWUoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7
CisgICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxs
YmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9y
IHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7CisgICAgICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05f
Q0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5nZXQo
KTsKKyAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIu
Z2V0KCksICptX2JhY2tpbmdTdG9yZSwgKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2Fj
dGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmlkKTsKKyAgICB9
CisKKyAgICBpZiAob3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuYXV0b0luY3JlbWVudCAmJiBvcGVy
YXRpb24ucHV0TW9kZSgpICE9IElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIGtl
eS0+dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gbV9i
YWNraW5nU3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmUoKS5pZCwgKmtleSwgIWtleVdh
c0dlbmVyYXRlZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIG9wZXJhdGlvbi5j
YWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5l
cmF0b3IuIikpOworICAgICAgICAgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhj
b21wbGV0aW9uQ2FsbGJhY2spOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7
CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2sp
OworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuQ3Vyc29yKElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IE9wZW5DdXJzb3JPcGVyYXRpb24m
IG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24pOworCisgICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1biBpbmRleGluZywgc28g
dGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCisgICAgLy8gdW50aWwgdGhlIGluZGV4aW5nIGlz
IGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgorICAgIC8vIGJlY2F1c2Ug
d2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBjYXNlIG11bHRpcGxlCisg
ICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywgd2l0aCBwdXQoKSdzIGlu
IGJldHdlZW4uCisgICAgaWYgKG9wZXJhdGlvbi50YXNrVHlwZSgpID09IElEQkRhdGFiYXNlQmFj
a2VuZDo6UHJlZW1wdGl2ZVRhc2spCisgICAgICAgIHRyYW5zYWN0aW9uLmFkZFByZWVtcHRpdmVF
dmVudCgpOworCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFj
a2luZ1N0b3JlQ3Vyc29yOworICAgIGlmIChvcGVyYXRpb24uaW5kZXhJRCgpID09IElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICBBU1NFUlQob3BlcmF0aW9uLmN1cnNvclR5
cGUoKSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOworICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKCpiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2Jq
ZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgb3BlcmF0aW9uLmRpcmVjdGlvbigp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQob3BlcmF0aW9uLnRhc2tUeXBlKCkgPT0g
SURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrKTsKKyAgICAgICAgaWYgKG9wZXJhdGlvbi5j
dXJzb3JUeXBlKCkgPT0gSW5kZXhlZERCOjpDdXJzb3JLZXlPbmx5KQorICAgICAgICAgICAgYmFj
a2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEtleUN1cnNvcigqYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0
aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJh
bmdlKCksIG9wZXJhdGlvbi5kaXJlY3Rpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IoKmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJh
dGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlS
YW5nZSgpLCBvcGVyYXRpb24uZGlyZWN0aW9uKCkpOworICAgIH0KKworICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNz
KHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KDApKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFj
aygwKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJREJEYXRh
YmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tUeXBlKHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFj
a2VuZDo6VGFza1R5cGU+KG9wZXJhdGlvbi50YXNrVHlwZSgpKSk7CisKKyAgICBSZWZQdHI8SURC
Q3Vyc29yQmFja2VuZD4gY3Vyc29yID0gdHJhbnNhY3Rpb24uY3JlYXRlQ3Vyc29yQmFja2VuZCgq
YmFja2luZ1N0b3JlQ3Vyc29yLCBvcGVyYXRpb24uY3Vyc29yVHlwZSgpLCB0YXNrVHlwZSwgb3Bl
cmF0aW9uLm9iamVjdFN0b3JlSUQoKSk7CisgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5vblN1
Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29y
LT52YWx1ZSgpKTsKKworICAgIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29tcGxl
dGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y291
bnQoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgQ291bnRPcGVyYXRp
b24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24pOworCisgICAgdWludDMyX3QgY291bnQgPSAwOworICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKKworICAgIGlm
IChvcGVyYXRpb24uaW5kZXhJRCgpID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkKKyAg
ICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5PYmplY3RTdG9y
ZUtleUN1cnNvcigqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNl
KCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCks
IEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgZWxzZQorICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKCpiYWNraW5nU3RvcmVU
cmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0
U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgSW5k
ZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgeworICAg
ICAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2Vzcyhjb3VudCk7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7CisgICAgICAgICAgICBjb21w
bGV0aW9uQ2FsbGJhY2soMCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZG8geworICAgICAgICArK2NvdW50OworICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1
cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7CisKKyAgICBvcGVyYXRpb24uY2FsbGJhY2tzKCkt
Pm9uU3VjY2Vzcyhjb3VudCk7CisgICAgRU1QVFlfQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDSyhj
b21wbGV0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpkZWxldGVSYW5nZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBE
ZWxldGVSYW5nZU9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBJREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0g
bV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOworICAgIEFT
U0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7CisKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24u
a2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBpZiAoYmFja2luZ1N0b3Jl
Q3Vyc29yKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUt
PmRlbGV0ZVJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFi
YXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgYmFja2luZ1N0b3JlQ3Vyc29y
LT5yZWNvcmRJZGVudGlmaWVyKCkpKSB7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmNhbGxi
YWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIpKTsKKyAg
ICAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2tdKCkgewor
ICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soMCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOworICAgIH0K
KworICAgIG9wZXJhdGlvbi5jYWxsYmFja3MoKS0+b25TdWNjZXNzKCk7CisgICAgRU1QVFlfQVNZ
TkNfQ09NUExFVElPTl9DQUxMQkFDSyhjb21wbGV0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIElE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mIG9w
ZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24pOworCisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSgqYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0
aW9uLm9iamVjdFN0b3JlSUQoKSkpIHsKKyAgICAgICAgb3BlcmF0aW9uLmNhbGxiYWNrcygpLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiRXJyb3IgY2xlYXJpbmcgb2JqZWN0IHN0b3JlIikpOworICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2tdKCkgeworICAgICAgICAgICAgY29tcGxl
dGlvbkNhbGxiYWNrKDApOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBvcGVyYXRpb24uY2FsbGJhY2tzKCktPm9uU3VjY2VzcygpOworICAgIEVNUFRZX0FTWU5DX0NP
TVBMRVRJT05fQ0FMTEJBQ0soY29tcGxldGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mIG9wZXJh
dGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBj
b21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24pOworCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSA9IG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCk7CisKKyAgICBpZiAoIW1fYmFj
a2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRy
YW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpIHsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBvYmplY3RTdG9yZU1l
dGFkYXRhXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpm
b3JtYXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG9iamVj
dFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICB9KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNv
bXBsZXRpb25DYWxsYmFjayk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6
OmNoYW5nZURhdGFiYXNlVmVyc2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24mIG9wZXJh
dGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBj
b21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24pOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSA9IHRyYW5zYWN0aW9uLmRh
dGFiYXNlKCk7CisgICAgaW50NjRfdCBkYXRhYmFzZUlkID0gZGF0YWJhc2UuaWQoKTsKKyAgICB1
aW50NjRfdCBvbGRWZXJzaW9uID0gZGF0YWJhc2UubWV0YWRhdGEoKS52ZXJzaW9uOworCisgICAg
Ly8gRklYTUU6IERhdGFiYXNlIHZlcnNpb25zIGFyZSBub3cgb2YgdHlwZSB1aW50NjRfdCwgYnV0
IHRoaXMgY29kZSBleHBlY3RlZCBpbnQ2NF90LgorICAgIEFTU0VSVChvcGVyYXRpb24udmVyc2lv
bigpID4gKGludDY0X3Qpb2xkVmVyc2lvbik7CisgICAgZGF0YWJhc2Uuc2V0Q3VycmVudFZlcnNp
b24ob3BlcmF0aW9uLnZlcnNpb24oKSk7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+dXBkYXRl
SURCRGF0YWJhc2VWZXJzaW9uKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
ZGF0YWJhc2UubWV0YWRhdGEoKS52ZXJzaW9uKSkgeworICAgICAgICBSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZSB3aGVuIHVwZGF0aW5nIHZlcnNpb24uIik7CisgICAgICAgIG9wZXJhdGlvbi5jYWxsYmFja3Mo
KS0+b25FcnJvcihlcnJvcik7CisgICAgICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0soY29t
cGxldGlvbkNhbGxiYWNrLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNT
RVJUKCFkYXRhYmFzZS5oYXNQZW5kaW5nU2Vjb25kSGFsZk9wZW4oKSk7CisgICAgZGF0YWJhc2Uu
c2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKElEQlBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKCpvcGVy
YXRpb24uY2FsbGJhY2tzKCksICpvcGVyYXRpb24uZGF0YWJhc2VDYWxsYmFja3MoKSwgdHJhbnNh
Y3Rpb24uaWQoKSwgb3BlcmF0aW9uLnZlcnNpb24oKSkpOworICAgIG9wZXJhdGlvbi5jYWxsYmFj
a3MoKS0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sICZkYXRhYmFzZSwgZGF0YWJhc2UubWV0
YWRhdGEoKSk7CisKKyAgICBFTVBUWV9BU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLKGNvbXBsZXRp
b25DYWxsYmFjayk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0
aW9uTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oCmluZGV4IDZjNDhiMTIuLmQ5ZGVlZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVy
Q29ubmVjdGlvbkxldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmgKQEAgLTQ4LDcgKzQ4LDYgQEAg
cHVibGljOgogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBzZXJ2ZXIgY29ubmVjdGlvbiBwcm92aWRl
cyBhIHN5bmNocm9ub3VzIGFjY2Vzc29yIHRvIHRoZSBpbi1wcm9jZXNzIGJhY2tpbmcgc3RvcmUg
b2JqZWN0cy4KICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZW1vdmVkIHNv
b24uCiAgICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0
cmFuc2FjdGlvbklEKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpIE9W
RVJSSURFOwogCkBAIC02NSw2ICs2NCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJv
bGxiYWNrVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJLZXkm
IHByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3Rv
cjxWZWN0b3I8UmVmUHRyPElEQktleT4+PiYgaW5kZXhLZXlzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjayk7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwg
Y29uc3QgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUluZGV4KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNv
bnN0IENyZWF0ZUluZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBEZWxl
dGVJbmRleE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IEdldE9wZXJhdGlvbiYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNh
bGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KElEQlRyYW5zYWN0aW9uQmFj
a2VuZCYsIGNvbnN0IFB1dE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBPcGVu
Q3Vyc29yT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBjb3VudChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDb3VudE9wZXJhdGlvbiYsIHN0
ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlv
bkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmFuZ2UoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlUmFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFj
aykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiwgY29uc3QgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbiYsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxi
YWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25D
YWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNoYW5nZURhdGFiYXNlVmVyc2lv
bihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CiBwcml2YXRlOgogICAg
IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUxldmVsREIqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQ4OTE3ZWMuLjM0MzlmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwNjQsNyArMzA2NCw3IEBACiAJCTkzQjcwRDYz
MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpT
RE9NQmluZGluZy5jcHAgKi87IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RP
TUJpbmRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzQjcwRDQ4MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0I3MEQ2OTA5RUIwQzdDMDA5
RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDREMDlFQjBDN0MwMDlEODQ2OCAvKiBKU0V2ZW50TGlz
dGVuZXIuY3BwICovOyB9OwotCQk5M0I3MEQ2QTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExp
c3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I3MEQ0RTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmggKi87IH07CisJCTkz
QjcwRDZBMDlFQjBDN0MwMDlEODQ2OCAvKiBKU0V2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDRFMDlFQjBDN0MwMDlEODQ2
OCAvKiBKU0V2ZW50TGlzdGVuZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5M0I3MEQ2QjA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVt
ZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2OCAvKiBKU1BsdWdpbkVsZW1lbnRGdW5jdGlv
bnMuY3BwICovOyB9OwogCQk5M0I3MEQ2QzA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVt
ZW50RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0NjggLyogSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNC
NzBENkYwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTMwOUVCMEM3QzAwOUQ4
NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuY3BwICovOyB9OwpAQCAtNTEwNyw3ICs1MTA3LDcgQEAK
IAkJQkNFMzJCOUUxNTE3QzIyNzAwRjU0MkVDIC8qIFJlbmRlck11bHRpQ29sdW1uU2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRTMyQjlEMTUx
N0MyMjcwMEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNvbHVtblNldC5jcHAgKi87IH07CiAJCUJDRTNC
RUMyMEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UzQkVDMDBEMjIyQjFEMDA3RTA2RTQgLyog
VGFnTm9kZUxpc3QuY3BwICovOyB9OwogCQlCQ0UzQkVDMzBEMjIyQjFEMDA3RTA2RTQgLyogVGFn
Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRTNCRUMxMEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdOb2RlTGlzdC5oICovOyB9OwotCQlCQ0U0
Mzg5QzE0MEIxQkE4MDA1RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U0Mzg5QjE0MEIxQkE3MDA1RTQzN0UgLyog
SlNEaWN0aW9uYXJ5LmggKi87IH07CisJCUJDRTQzODlDMTQwQjFCQTgwMDVFNDM3RSAvKiBKU0Rp
Y3Rpb25hcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRTQzODlCMTQwQjFCQTcwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0U0MzhBMjE0MEMwREMwMDA1
RTQzN0UgLyogSlNEaWN0aW9uYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRTQzOEExMTQwQzBEQkYwMDVFNDM3RSAvKiBKU0RpY3Rpb25hcnku
Y3BwICovOyB9OwogCQlCQ0U0NDEzMzEyRjc0OEUyMDA5Qjg0QjggLyogUmVuZGVyQ29tYmluZVRl
eHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
NDQxMzExMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmNwcCAqLzsgfTsKIAkJ
QkNFNDQxMzQxMkY3NDhFMjAwOUI4NEI4IC8qIFJlbmRlckNvbWJpbmVUZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U0NDEzMjEyRjc0OEUyMDA5
Qjg0QjggLyogUmVuZGVyQ29tYmluZVRleHQuaCAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiZmJhODQ3
Li45NjczY2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMTEtMTUgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgZXhlY3V0aW9uIG9m
IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMgdG8gdGhlIElEQlNlcnZlckNvbm5lY3Rp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDM4
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQu
aDoKKwogMjAxMy0xMS0xNSAgVGlib3IgTWVzemFyb3MgIDxtdGlib3JAaW5mLnUtc3plZ2VkLmh1
PgogCiAgICAgICAgIENsZWFudXAgdGhlIGJ1aWxkIGZyb20gdW51c2VkIHBhcmFtZXRlcnMgaW4g
V2ViS2l0MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
SW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJQcm9jZXNzSURCRGF0YWJhc2VCYWNr
ZW5kLmgKaW5kZXggMTllNmRlMy4uY2VmMDI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViUHJvY2Vzc0lEQkRhdGFiYXNlQmFja2VuZC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5l
IFdlYlByb2Nlc3NJREJEYXRhYmFzZUJhY2tlbmRfaAogCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRl
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQo=
</data>
<flag name="review"
          id="240133"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>