<?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>124673</bug_id>
          
          <creation_ts>2013-11-20 12:02:46 -0800</creation_ts>
          <short_desc>Use std::function callbacks in CryptoAlgorithm instead of JS promises</short_desc>
          <delta_ts>2013-11-20 15:20:42 -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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122679</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>952714</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-20 12:02:46 -0800</bug_when>
    <thetext>To implement key wrapping/unwrapping, we&apos;ll need to chain existing operations. It&apos;s much easier to do with C++ callbacks than with functions fulfilling JS promises directly.

Also, this will decouple CryptoAlgorithm from JS, which is nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952718</commentid>
    <comment_count>1</comment_count>
      <attachid>217463</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-20 12:19:16 -0800</bug_when>
    <thetext>Created attachment 217463
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952719</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-20 12:20:47 -0800</bug_when>
    <thetext>Attachment 217463 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/bindings/js/JSDOMPromise.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMPromise.h&apos;, u&apos;Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithm.cpp&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithm.h&apos;, u&apos;Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA1.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA1.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA224.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA224.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA256.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA256.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA384.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA384.h&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA512.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmSHA512.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyRSA.h&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmHMACMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp&apos;]&quot; exit_code: 1
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:45:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:58:  CryptoAlgorithmAES_CBC::generateKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:71:  CryptoAlgorithmAES_CBC::importKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:58:  CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:69:  CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h:45:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:91:  CryptoAlgorithmRSASSA_PKCS1_v1_5::sign is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:130:  CryptoAlgorithmRSASSA_PKCS1_v1_5::verify is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:38:  transformAES_CBC is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:85:  CryptoAlgorithmAES_CBC::encrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:98:  CryptoAlgorithmAES_CBC::decrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/crypto/CryptoAlgorithm.h:65:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 13 in 27 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>952722</commentid>
    <comment_count>3</comment_count>
      <attachid>217463</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-20 12:23:16 -0800</bug_when>
    <thetext>Comment on attachment 217463
proposed patch

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

&gt; Source/WebCore/crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:68
&gt; +    callback(result.get(), 0);

nullptr?

&gt; Source/WebCore/crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:63
&gt; +        callback(0, &amp;pair);

nullptr?

&gt; Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:222
&gt; +    KeyPairCallback* localCallback = new KeyPairCallback(callback);

Can std::move callback here to avoid a copy.

&gt; Source/WebCore/crypto/mac/CryptoKeyRSAMac.cpp:223
&gt; +    VoidCallback* localFailureCallback = new VoidCallback(failureCallback);

Ditto for failureCallback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952746</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-20 13:16:16 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r159578&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952804</commentid>
    <comment_count>5</comment_count>
      <attachid>217463</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-11-20 15:20:42 -0800</bug_when>
    <thetext>Comment on attachment 217463
proposed patch

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

&gt; Source/WebCore/bindings/js/JSDOMPromise.h:44
&gt; +    PromiseWrapper(const PromiseWrapper&amp;);
&gt; +    PromiseWrapper&amp; operator=(const PromiseWrapper&amp;);

Why don’t we just let the compiler generate these? The hand-written functions look the same as what the compiler would generate if we didn’t say anything.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217463</attachid>
            <date>2013-11-20 12:19:16 -0800</date>
            <delta_ts>2013-11-20 15:20:42 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>Functional.cpp</filename>
            <type>text/plain</type>
            <size>57543</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTU3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEzLTExLTIwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBzdGQ6OmZ1bmN0aW9u
IGNhbGxiYWNrcyBpbiBDcnlwdG9BbGdvcml0aG0gaW5zdGVhZCBvZiBKUyBwcm9taXNlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NjczCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8gaW1wbGVtZW50
IGtleSB3cmFwcGluZy91bndyYXBwaW5nLCB3ZSdsbCBuZWVkIHRvIGNoYWluIGV4aXN0aW5nIG9w
ZXJhdGlvbnMuCisgICAgICAgIEl0J3MgbXVjaCBlYXNpZXIgdG8gZG8gd2l0aCBDKysgY2FsbGJh
Y2tzIHRoYW4gd2l0aCBmdW5jdGlvbnMgZnVsZmlsbGluZyBKUworICAgICAgICBwcm9taXNlcyBk
aXJlY3RseS4KKworICAgICAgICBBbHNvLCB0aGlzIHdpbGwgZGVjb3VwbGUgQ3J5cHRvQWxnb3Jp
dGhtIGZyb20gSlMsIHdoaWNoIGlzIG5pY2UuCisKKyAgICAgICAgU3VidGxlQ3J5cHRvIElETCBz
YXlzIHRoYXQgYWxsIGZ1bmN0aW9ucyByZXR1cm4gUHJvbWlzZTxhbnk+LCBidXQgaW4gcmVhbGl0
eSwKKyAgICAgICAgdGhlcmUgaXMgdmVyeSBsaXR0bGUgcG9seW1vcnBoaXNtLCB0aGUgb25seSBm
dW5jdGlvbiB3aG9zZSByZXR1cm4gdHlwZSBkZXBlbmRzCisgICAgICAgIG9uIGFsZ29yaXRobSBp
cyBnZW5lcmF0ZUtleSAoaXQgY2FuIGNyZWF0ZSBhIEtleSBvciBhIEtleVBhaXIpLgorCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBy
b21pc2VXcmFwcGVyOjpQcm9taXNlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpQcm9taXNl
V3JhcHBlcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2Uu
aDoKKyAgICAgICAgTWFkZSBpdCBjb3B5YWJsZSwgYXMgZWFjaCBjcnlwdG8gZnVuY3Rpb24gd3Jh
cHMgdGhlIHByb21pc2UgaW4gc3VjY2VzcyBhbmQgZmFpbHVyZQorICAgICAgICBmdW5jdGlvbmFs
IG9iamVjdHMgbm93LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86OmVuY3J5cHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86OmRlY3J5cHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNTdWJ0bGVDcnlwdG86OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlw
dG86OnZlcmlmeSk6CisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0bzo6ZGlnZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTU3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtleSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTU3VidGxlQ3J5cHRvOjpleHBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdv
cml0aG0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtOjplbmNyeXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobTo6ZGVjcnlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG06OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRv
QWxnb3JpdGhtOjp2ZXJpZnkpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtOjpk
aWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtOjpnZW5lcmF0ZUtleSk6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG06OmRlcml2ZUtleSk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG06OmRlcml2ZUJpdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3J5cHRvQWxnb3JpdGhtOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9DcnlwdG9B
bGdvcml0aG0uaDoKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzVNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BL
Q1MxX3YxXzU6OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBU1NB
X1BLQ1MxX3YxXzU6OnZlcmlmeSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDOjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1B
RVNfQ0JDOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuaDoKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1ITUFDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6Omdl
bmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9y
dEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5o
OgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81OjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oOgorICAgICAgICAqIGNyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5
cHRvQWxnb3JpdGhtU0hBMTo6ZGlnZXN0KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1TSEExLmg6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtU0hBMjI0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVNI
QTIyNDo6ZGlnZXN0KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1TSEEyMjQuaDoKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1T
SEEyNTYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtU0hBMjU2OjpkaWdl
c3QpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTI1Ni5o
OgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTM4NC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1TSEEzODQ6OmRpZ2VzdCk6CisgICAg
ICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMzg0Lmg6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBNTEyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVNIQTUxMjo6ZGlnZXN0KToKKyAgICAgICAgKiBjcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEE1MTIuaDoKKyAgICAgICAgKiBjcnlwdG8v
a2V5cy9DcnlwdG9LZXlSU0EuaDoKKyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRo
bUFFU19DQkNNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtQUVTX0NCQyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmRlY3J5cHQpOgorICAgICAgICAq
IGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0Fs
Z29yaXRobUhNQUM6OnZlcmlmeSk6CisgICAgICAgICogY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FN
YWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBhaXIpOgor
CiAyMDEzLTExLTIwICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSRUdSRVNTSU9OKHIxMjcxNjMpOiBSZXNwZWN0IGNsZWFyYW5jZSBzZXQgb24gYW5jZXN0b3Jz
IHdoZW4gcGxhY2luZyBmbG9hdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Qcm9taXNlLmNwcAkocmV2aXNpb24gMTU5NDI2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNCArMzQsMTcg
QEAgUHJvbWlzZVdyYXBwZXI6OlByb21pc2VXcmFwcGVyKEpTRE9NR2xvYgogewogfQogCitQcm9t
aXNlV3JhcHBlcjo6UHJvbWlzZVdyYXBwZXIoY29uc3QgUHJvbWlzZVdyYXBwZXImIG90aGVyKQor
ICAgIDogbV9nbG9iYWxPYmplY3Qob3RoZXIubV9nbG9iYWxPYmplY3QpCisgICAgLCBtX3Byb21p
c2Uob3RoZXIubV9wcm9taXNlKQoreworfQorCitQcm9taXNlV3JhcHBlciYgUHJvbWlzZVdyYXBw
ZXI6Om9wZXJhdG9yPShjb25zdCBQcm9taXNlV3JhcHBlciYgb3RoZXIpCit7CisgICAgbV9nbG9i
YWxPYmplY3QgPSBvdGhlci5tX2dsb2JhbE9iamVjdDsKKyAgICBtX3Byb21pc2UgPSBvdGhlci5t
X3Byb21pc2U7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAkocmV2aXNpb24gMTU5NDI2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDE4ICszMywxNSBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNQcm9taXNlLmg+CiAjaW5jbHVkZSA8
cnVudGltZS9KU1Byb21pc2VSZXNvbHZlci5oPgogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5saW5l
cy5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLS8vIEZJWE1FOiBVc2luZyB0aGlzIGNsYXNzIGluIERPTSBjb2RlIG1ha2VzIGl0IGRlcGVu
ZGVudCBvbiBKUyBiaW5kaW5ncy4KIGNsYXNzIFByb21pc2VXcmFwcGVyIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQcm9taXNlV3JhcHBlcikKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBjcmVhdGUoSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1Byb21pc2UqIHByb21pc2UpCi0gICAgewotICAgICAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPihuZXcgUHJvbWlzZVdyYXBwZXIoZ2xvYmFs
T2JqZWN0LCBwcm9taXNlKSk7Ci0gICAgfQorICAgIFByb21pc2VXcmFwcGVyKEpTRE9NR2xvYmFs
T2JqZWN0KiwgSlNDOjpKU1Byb21pc2UqKTsKKworICAgIFByb21pc2VXcmFwcGVyKGNvbnN0IFBy
b21pc2VXcmFwcGVyJik7CisgICAgUHJvbWlzZVdyYXBwZXImIG9wZXJhdG9yPShjb25zdCBQcm9t
aXNlV3JhcHBlciYpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRnVsZmlsbFJlc3VsdFR5cGU+CiAg
ICAgdm9pZCBmdWxmaWxsKGNvbnN0IEZ1bGZpbGxSZXN1bHRUeXBlJik7CkBAIC01Myw4ICs1MCw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlamVjdChjb25zdCBSZWplY3RSZXN1bHRUeXBlJik7CiAK
IHByaXZhdGU6Ci0gICAgUHJvbWlzZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkpT
UHJvbWlzZSopOwotCiAgICAgSlNDOjpTdHJvbmc8SlNET01HbG9iYWxPYmplY3Q+IG1fZ2xvYmFs
T2JqZWN0OwogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNQcm9taXNlPiBtX3Byb21pc2U7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRv
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU5NDI2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsMTAgKzE2
MiwxNiBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjplbmNyeXB0KEV4ZWNTdGF0CiAgICAgfQog
CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGVXaXRoUmVzb2x2ZXIo
ZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQ
cm9taXNlV3JhcHBlcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKyAgICBQcm9t
aXNlV3JhcHBlciBwcm9taXNlV3JhcHBlcihnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7CisgICAg
YXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbcHJvbWlzZVdyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgcHJvbWlzZVdyYXBwZXIuZnVsZmlsbChy
ZXN1bHQpOworICAgIH07CisgICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbcHJvbWlzZVdyYXBw
ZXJdKCkgbXV0YWJsZSB7CisgICAgICAgIHByb21pc2VXcmFwcGVyLnJlamVjdChudWxscHRyKTsK
KyAgICB9OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYWxnb3JpdGhtLT5lbmNy
eXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBwZXIpLCBl
Yyk7CisgICAgYWxnb3JpdGhtLT5lbmNyeXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6
Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgc3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsK
ICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yMDgsMTAgKzIxNCwxNiBAQCBKU1ZhbHVlIEpT
U3VidGxlQ3J5cHRvOjpkZWNyeXB0KEV4ZWNTdGF0CiAgICAgfQogCiAgICAgSlNQcm9taXNlKiBw
cm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGVXaXRoUmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFs
T2JqZWN0KCkpOwotICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3Jl
YXRlKGdsb2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKyAgICBQcm9taXNlV3JhcHBlciBwcm9taXNl
V3JhcHBlcihnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7CisgICAgYXV0byBzdWNjZXNzQ2FsbGJh
Y2sgPSBbcHJvbWlzZVdyYXBwZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRh
YmxlIHsKKyAgICAgICAgcHJvbWlzZVdyYXBwZXIuZnVsZmlsbChyZXN1bHQpOworICAgIH07Cisg
ICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbcHJvbWlzZVdyYXBwZXJdKCkgbXV0YWJsZSB7Cisg
ICAgICAgIHByb21pc2VXcmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICB9OwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYWxnb3JpdGhtLT5kZWNyeXB0KCpwYXJhbWV0ZXJzLCAq
a2V5LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBwZXIpLCBlYyk7CisgICAgYWxnb3JpdGht
LT5kZWNyeXB0KCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6Om1vdmUoc3VjY2Vzc0NhbGxi
YWNrKSwgc3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CkBAIC0yNTQsMTAgKzI2NiwxNiBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpzaWdu
KEV4ZWNTdGF0ZSogCiAgICAgfQogCiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNl
OjpjcmVhdGVXaXRoUmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIGF1
dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCgp
LCBwcm9taXNlKTsKKyAgICBQcm9taXNlV3JhcHBlciBwcm9taXNlV3JhcHBlcihnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZSk7CisgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBbcHJvbWlzZVdyYXBw
ZXJdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgcHJv
bWlzZVdyYXBwZXIuZnVsZmlsbChyZXN1bHQpOworICAgIH07CisgICAgYXV0byBmYWlsdXJlQ2Fs
bGJhY2sgPSBbcHJvbWlzZVdyYXBwZXJdKCkgbXV0YWJsZSB7CisgICAgICAgIHByb21pc2VXcmFw
cGVyLnJlamVjdChudWxscHRyKTsKKyAgICB9OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgYWxnb3JpdGhtLT5zaWduKCpwYXJhbWV0ZXJzLCAqa2V5LCBkYXRhLCBzdGQ6Om1vdmUo
cHJvbWlzZVdyYXBwZXIpLCBlYyk7CisgICAgYWxnb3JpdGhtLT5zaWduKCpwYXJhbWV0ZXJzLCAq
a2V5LCBkYXRhLCBzdGQ6Om1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgc3RkOjptb3ZlKGZhaWx1cmVD
YWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0zMDYsMTAgKzMyNCwx
NiBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlY1N0YXRlCiAgICAgfQogCiAg
ICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGVXaXRoUmVzb2x2ZXIoZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOwotICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9t
aXNlV3JhcHBlcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKyAgICBQcm9taXNl
V3JhcHBlciBwcm9taXNlV3JhcHBlcihnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7CisgICAgYXV0
byBzdWNjZXNzQ2FsbGJhY2sgPSBbcHJvbWlzZVdyYXBwZXJdKGJvb2wgcmVzdWx0KSBtdXRhYmxl
IHsKKyAgICAgICAgcHJvbWlzZVdyYXBwZXIuZnVsZmlsbChyZXN1bHQpOworICAgIH07CisgICAg
YXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbcHJvbWlzZVdyYXBwZXJdKCkgbXV0YWJsZSB7CisgICAg
ICAgIHByb21pc2VXcmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICB9OwogCiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgYWxnb3JpdGhtLT52ZXJpZnkoKnBhcmFtZXRlcnMsICprZXks
IHNpZ25hdHVyZSwgZGF0YSwgc3RkOjptb3ZlKHByb21pc2VXcmFwcGVyKSwgZWMpOworICAgIGFs
Z29yaXRobS0+dmVyaWZ5KCpwYXJhbWV0ZXJzLCAqa2V5LCBzaWduYXR1cmUsIGRhdGEsIHN0ZDo6
bW92ZShzdWNjZXNzQ2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwog
ICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTM0MiwxMCArMzY2LDE2IEBAIEpTVmFsdWUgSlNT
dWJ0bGVDcnlwdG86OmRpZ2VzdChFeGVjU3RhdGUKICAgICB9CiAKICAgICBKU1Byb21pc2UqIHBy
b21pc2UgPSBKU1Byb21pc2U6OmNyZWF0ZVdpdGhSZXNvbHZlcihleGVjLT52bSgpLCBnbG9iYWxP
YmplY3QoKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlV3Jh
cHBlciA9IFByb21pc2VXcmFwcGVyOjpjcmVhdGUoZ2xvYmFsT2JqZWN0KCksIHByb21pc2UpOwor
ICAgIFByb21pc2VXcmFwcGVyIHByb21pc2VXcmFwcGVyKGdsb2JhbE9iamVjdCgpLCBwcm9taXNl
KTsKKyAgICBhdXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFtwcm9taXNlV3JhcHBlcl0oY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBwcm9taXNlV3JhcHBlci5m
dWxmaWxsKHJlc3VsdCk7CisgICAgfTsKKyAgICBhdXRvIGZhaWx1cmVDYWxsYmFjayA9IFtwcm9t
aXNlV3JhcHBlcl0oKSBtdXRhYmxlIHsKKyAgICAgICAgcHJvbWlzZVdyYXBwZXIucmVqZWN0KG51
bGxwdHIpOworICAgIH07CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhbGdvcml0
aG0tPmRpZ2VzdCgqcGFyYW1ldGVycywgZGF0YSwgc3RkOjptb3ZlKHByb21pc2VXcmFwcGVyKSwg
ZWMpOworICAgIGFsZ29yaXRobS0+ZGlnZXN0KCpwYXJhbWV0ZXJzLCBkYXRhLCBzdGQ6Om1vdmUo
c3VjY2Vzc0NhbGxiYWNrKSwgc3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBp
ZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0zODcsMTAgKzQxNywyMSBAQCBKU1ZhbHVlIEpTU3VidGxl
Q3J5cHRvOjpnZW5lcmF0ZUtleShKU0M6CiAgICAgfQogCiAgICAgSlNQcm9taXNlKiBwcm9taXNl
ID0gSlNQcm9taXNlOjpjcmVhdGVXaXRoUmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0
KCkpOwotICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRlKGds
b2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKyAgICBQcm9taXNlV3JhcHBlciBwcm9taXNlV3JhcHBl
cihnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7CisgICAgYXV0byBzdWNjZXNzQ2FsbGJhY2sgPSBb
cHJvbWlzZVdyYXBwZXJdKENyeXB0b0tleSoga2V5LCBDcnlwdG9LZXlQYWlyKiBrZXlQYWlyKSBt
dXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGtleSB8fCBrZXlQYWlyKTsKKyAgICAgICAgQVNTRVJU
KCFrZXkgfHwgIWtleVBhaXIpOworICAgICAgICBpZiAoa2V5KQorICAgICAgICAgICAgcHJvbWlz
ZVdyYXBwZXIuZnVsZmlsbChrZXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm9taXNl
V3JhcHBlci5mdWxmaWxsKGtleVBhaXIpOworICAgIH07CisgICAgYXV0byBmYWlsdXJlQ2FsbGJh
Y2sgPSBbcHJvbWlzZVdyYXBwZXJdKCkgbXV0YWJsZSB7CisgICAgICAgIHByb21pc2VXcmFwcGVy
LnJlamVjdChudWxscHRyKTsKKyAgICB9OwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgYWxnb3JpdGhtLT5nZW5lcmF0ZUtleSgqcGFyYW1ldGVycywgZXh0cmFjdGFibGUsIGtleVVz
YWdlcywgc3RkOjptb3ZlKHByb21pc2VXcmFwcGVyKSwgZWMpOworICAgIGFsZ29yaXRobS0+Z2Vu
ZXJhdGVLZXkoKnBhcmFtZXRlcnMsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHN0ZDo6bW92ZShz
dWNjZXNzQ2FsbGJhY2spLCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSwgZWMpOwogICAgIGlm
IChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKQEAgLTQ5NCwxMCArNTM1LDE2IEBAIEpTVmFsdWUgSlNTdWJ0bGVD
cnlwdG86OmltcG9ydEtleShKU0M6OkUKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBKU1Byb21pc2UqIHByb21pc2UgPSBKU1Byb21pc2U6OmNyZWF0ZVdpdGhSZXNvbHZlcihl
eGVjLT52bSgpLCBnbG9iYWxPYmplY3QoKSk7Ci0gICAgYXV0byBwcm9taXNlV3JhcHBlciA9IFBy
b21pc2VXcmFwcGVyOjpjcmVhdGUoZ2xvYmFsT2JqZWN0KCksIHByb21pc2UpOworICAgIFByb21p
c2VXcmFwcGVyIHByb21pc2VXcmFwcGVyKGdsb2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKyAgICBh
dXRvIHN1Y2Nlc3NDYWxsYmFjayA9IFtwcm9taXNlV3JhcHBlcl0oQ3J5cHRvS2V5JiByZXN1bHQp
IG11dGFibGUgeworICAgICAgICBwcm9taXNlV3JhcHBlci5mdWxmaWxsKCZyZXN1bHQpOworICAg
IH07CisgICAgYXV0byBmYWlsdXJlQ2FsbGJhY2sgPSBbcHJvbWlzZVdyYXBwZXJdKCkgbXV0YWJs
ZSB7CisgICAgICAgIHByb21pc2VXcmFwcGVyLnJlamVjdChudWxscHRyKTsKKyAgICB9OwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYWxnb3JpdGhtLT5pbXBvcnRLZXkoKnBhcmFt
ZXRlcnMsICprZXlEYXRhLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBzdGQ6Om1vdmUocHJvbWlz
ZVdyYXBwZXIpLCBlYyk7CisgICAgYWxnb3JpdGhtLT5pbXBvcnRLZXkoKnBhcmFtZXRlcnMsICpr
ZXlEYXRhLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBzdGQ6Om1vdmUoc3VjY2Vzc0NhbGxiYWNr
KSwgc3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjayksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CkBAIC01MjIsMTEgKzU2OSwxMSBAQCBKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpleHBvcnRL
ZXkoSlNDOjpFCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKIAogICAgIEpT
UHJvbWlzZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlV2l0aFJlc29sdmVyKGV4ZWMtPnZt
KCksIGdsb2JhbE9iamVjdCgpKTsKLSAgICBhdXRvIHByb21pc2VXcmFwcGVyID0gUHJvbWlzZVdy
YXBwZXI6OmNyZWF0ZShnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7CisgICAgUHJvbWlzZVdyYXBw
ZXIgcHJvbWlzZVdyYXBwZXIoZ2xvYmFsT2JqZWN0KCksIHByb21pc2UpOwogCiAgICAgaWYgKCFr
ZXktPmV4dHJhY3RhYmxlKCkpIHsKICAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRDb25z
b2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCAiS2V5IGlzIG5v
dCBleHRyYWN0YWJsZSIpOwotICAgICAgICBwcm9taXNlV3JhcHBlci0+cmVqZWN0KG51bGxwdHIp
OworICAgICAgICBwcm9taXNlV3JhcHBlci5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIHJldHVy
biBwcm9taXNlOwogICAgIH0KIApAQCAtNTM0LDEwICs1ODEsMTAgQEAgSlNWYWx1ZSBKU1N1YnRs
ZUNyeXB0bzo6ZXhwb3J0S2V5KEpTQzo6RQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpSYXc6
IHsKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJlc3VsdDsKICAgICAgICAgaWYgKENy
eXB0b0tleVNlcmlhbGl6YXRpb25SYXc6OnNlcmlhbGl6ZSgqa2V5LCByZXN1bHQpKQotICAgICAg
ICAgICAgcHJvbWlzZVdyYXBwZXItPmZ1bGZpbGwocmVzdWx0KTsKKyAgICAgICAgICAgIHByb21p
c2VXcmFwcGVyLmZ1bGZpbGwocmVzdWx0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBt
X2ltcGwtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJy
b3JNZXNzYWdlTGV2ZWwsICJLZXkgY2Fubm90IGJlIGV4cG9ydGVkIHRvIHJhdyBmb3JtYXQiKTsK
LSAgICAgICAgICAgIHByb21pc2VXcmFwcGVyLT5yZWplY3QobnVsbHB0cik7CisgICAgICAgICAg
ICBwcm9taXNlV3JhcHBlci5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtNTQ4LDcgKzU5NSw3IEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmV4
cG9ydEtleShKU0M6OkUKICAgICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcmVzdWx0LnV0Zjgo
U3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiByZXN1bHRC
dWZmZXI7CiAgICAgICAgIHJlc3VsdEJ1ZmZlci5hcHBlbmQodXRmOFN0cmluZy5kYXRhKCksIHV0
ZjhTdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICBwcm9taXNlV3JhcHBlci0+ZnVsZmlsbChyZXN1
bHRCdWZmZXIpOworICAgICAgICBwcm9taXNlV3JhcHBlci5mdWxmaWxsKHJlc3VsdEJ1ZmZlcik7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5jcHAJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw0NyArNDAsNDcgQEAgQ3J5cHRvQWxnb3JpdGhtOjp+Q3J5cHRvQWxnb3JpdGhtKCkKIHsKIH0K
IAotdm9pZCBDcnlwdG9BbGdvcml0aG06OmVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
Q3J5cHRvQWxnb3JpdGhtOjplbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMm
LCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2Fs
bGJhY2ssIFZvaWRDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG06OmRlY3J5cHQoY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0
b09wZXJhdGlvbkRhdGEmLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRp
b25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpkZWNyeXB0KGNvbnN0IENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiwgVmVjdG9yQ2FsbGJhY2ssIFZvaWRDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0
aG06OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tl
eSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdy
YXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpzaWduKGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBD
cnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2ssIFZvaWRDYWxsYmFjaywgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKIH0KIAotdm9pZCBD
cnlwdG9BbGdvcml0aG06OnZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwg
Y29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIGNvbnN0IENyeXB0
b09wZXJhdGlvbkRhdGEmLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRp
b25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtOjp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlv
bkRhdGEmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgQm9vbENhbGxiYWNrLCBWb2lkQ2Fs
bGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7
CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBzdGQ6OnVuaXF1ZV9wdHI8
UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGht
OjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b09w
ZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjaywgVm9pZENhbGxiYWNrLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogfQogCi12b2lkIENyeXB0b0Fs
Z29yaXRobTo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJv
b2wsIENyeXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpnZW5lcmF0ZUtleShjb25zdCBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgYm9vbCwgQ3J5cHRvS2V5VXNhZ2UsIEtleU9yS2V5
UGFpckNhbGxiYWNrLCBWb2lkQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVj
ID0gTk9UX1NVUFBPUlRFRF9FUlI7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpkZXJpdmVL
ZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIENy
eXB0b0FsZ29yaXRobSosIGJvb2wsIENyeXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJv
bWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtOjpk
ZXJpdmVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tl
eSYsIENyeXB0b0FsZ29yaXRobSosIGJvb2wsIENyeXB0b0tleVVzYWdlLCBLZXlDYWxsYmFjaywg
Vm9pZENhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IE5PVF9TVVBQT1JU
RURfRVJSOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobTo6ZGVyaXZlQml0cyhjb25zdCBDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgdW5zaWduZWQgbG9uZywg
c3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IENyeXB0b0FsZ29yaXRobTo6ZGVyaXZlQml0cyhjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgdW5zaWduZWQgbG9uZywgVmVjdG9yQ2FsbGJhY2ssIFZv
aWRDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG06OmltcG9ydEtleShjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5RGF0YSYsIGJvb2wsIENyeXB0b0tl
eVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtOjppbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29sLCBDcnlwdG9LZXlVc2FnZSwg
S2V5Q2FsbGJhY2ssIFZvaWRDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMg
PSBOT1RfU1VQUE9SVEVEX0VSUjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9Dcnlw
dG9BbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRv
QWxnb3JpdGhtLmgJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9D
cnlwdG9BbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOSBAQAogCiAjaW5j
bHVkZSAiQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkNyeXB0b0tleVVz
YWdlLmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykK
IApAQCAtMzgsOCArNDAsOCBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzOwogY2xhc3MgQ3J5cHRvS2V5OworY2xhc3MgQ3J5cHRv
S2V5UGFpcjsKIGNsYXNzIENyeXB0b0tleURhdGE7Ci1jbGFzcyBQcm9taXNlV3JhcHBlcjsKIAog
Ly8gRGF0YSBpcyBtdXRhYmxlLCBzbyBhc3luYyBvcGVyYXRpb25zIHNob3VsZCBjb3B5IGl0IGZp
cnN0LgogdHlwZWRlZiBzdGQ6OnBhaXI8Y29uc3QgY2hhciosIHNpemVfdD4gQ3J5cHRvT3BlcmF0
aW9uRGF0YTsKQEAgLTUxLDE1ICs1MywyMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1
YWwgdm9pZCBlbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBD
cnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgc3RkOjp1bmlxdWVfcHRyPFBy
b21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWNyeXB0
KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25z
dCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzaWduKGNvbnN0IENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25E
YXRhJiwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZpcnR1YWwgdm9pZCB2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYs
IGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIHNpZ25hdHVyZSwg
Y29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VX
cmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWdlc3QoY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VX
cmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZXJpdmVLZXkoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYgYmFzZUtleSwg
Q3J5cHRvQWxnb3JpdGhtKiBkZXJpdmVkS2V5VHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRv
S2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVyaXZlQml0cyhjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiBiYXNlS2V5LCB1bnNpZ25lZCBsb25nIGxlbmd0aCwg
c3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZp
cnR1YWwgdm9pZCBpbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNv
bnN0IENyeXB0b0tleURhdGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3Rk
Ojp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHR5cGVk
ZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBCb29sQ2FsbGJhY2s7CisgICAgdHlwZWRlZiBz
dGQ6OmZ1bmN0aW9uPHZvaWQoQ3J5cHRvS2V5Jik+IEtleUNhbGxiYWNrOworICAgIHR5cGVkZWYg
c3RkOjpmdW5jdGlvbjx2b2lkKENyeXB0b0tleSosIENyeXB0b0tleVBhaXIqKT4gS2V5T3JLZXlQ
YWlyQ2FsbGJhY2s7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+Jik+IFZlY3RvckNhbGxiYWNrOworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IFZvaWRDYWxsYmFjazsKKworICAgIHZpcnR1YWwgdm9pZCBlbmNyeXB0KGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJh
Y2ssIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVjcnlwdChjb25zdCBDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNr
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHNpZ24oY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlv
bkRhdGEmLCBWZWN0b3JDYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCB2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRh
dGEmIHNpZ25hdHVyZSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgQm9vbENhbGxi
YWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dmlydHVhbCB2b2lkIGRpZ2VzdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFp
bHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBib29sIGV4dHJhY3RhYmxlLCBD
cnlwdG9LZXlVc2FnZSwgS2V5T3JLZXlQYWlyQ2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJl
Q2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVyaXZlS2V5KGNv
bnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmIGJhc2VLZXks
IENyeXB0b0FsZ29yaXRobSogZGVyaXZlZEtleVR5cGUsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0
b0tleVVzYWdlLCBLZXlDYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBkZXJpdmVCaXRzKGNvbnN0IENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmIGJhc2VLZXksIHVuc2lnbmVkIGxv
bmcgbGVuZ3RoLCBWZWN0b3JDYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRLZXkoY29uc3QgQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29sIGV4dHJhY3Rh
YmxlLCBDcnlwdG9LZXlVc2FnZSwgS2V5Q2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2Fs
bGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJvdGVjdGVkOgogICAgIENyeXB0b0FsZ29yaXRo
bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9Q
S0NTMV92MV81TWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVNYWMuY3BwCShyZXZpc2lvbiAxNTk0MjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzVN
YWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQ3J5cHRv
RGlnZXN0LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5UlNBLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogI2luY2x1ZGUgPENvbW1vbkNyeXB0
by9Db21tb25DcnlwdG9yLmg+CiAKICNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCkBAIC04OSw3
ICs4OCw3IEBAIHN0YXRpYyBib29sIGdldENvbW1vbkNyeXB0b0RpZ2VzdEFsZ29yaXQKICAgICB9
CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnNpZ24oY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBr
ZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9t
aXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENyeXB0b0FsZ29y
aXRobVJTQVNTQV9QS0NTMV92MV81OjpzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1
cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUnNhU3NhUGFyYW1zJiByc2FTU0FQYXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1Sc2FT
c2FQYXJhbXMocGFyYW1ldGVycyk7CiAKQEAgLTEyMCwxNSArMTE5LDE1IEBAIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnMKIAogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0
dXMgPSBDQ1JTQUNyeXB0b3JTaWduKHJzYUtleS5wbGF0Zm9ybUtleSgpLCBjY1BLQ1MxUGFkZGlu
ZywgZGlnZXN0RGF0YS5kYXRhKCksIGRpZ2VzdERhdGEuc2l6ZSgpLCBkaWdlc3RBbGdvcml0aG0s
IDAsIHNpZ25hdHVyZS5kYXRhKCksICZzaWduYXR1cmVTaXplKTsKICAgICBpZiAoc3RhdHVzKSB7
Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgZmFpbHVyZUNhbGxi
YWNrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBzaWduYXR1cmUucmVzaXplKHNp
Z25hdHVyZVNpemUpOwotICAgIHByb21pc2UtPmZ1bGZpbGwoc2lnbmF0dXJlKTsKKyAgICBjYWxs
YmFjayhzaWduYXR1cmUpOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92
MV81Ojp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Y29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIHNpZ25hdHVy
ZSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21p
c2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzU6OnZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0
aW9uRGF0YSYgc2lnbmF0dXJlLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBCb29s
Q2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyYgcnNh
U1NBUGFyYW1ldGVycyA9IHRvQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zKHBhcmFtZXRlcnMp
OwogCkBAIC0xNTYsMTEgKzE1NSwxMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81Ojp2CiAKICAgICBDQ0NyeXB0b3JTdGF0dXMgc3RhdHVzID0gQ0NSU0FDcnlwdG9yVmVy
aWZ5KHJzYUtleS5wbGF0Zm9ybUtleSgpLCBjY1BLQ1MxUGFkZGluZywgZGlnZXN0RGF0YS5kYXRh
KCksIGRpZ2VzdERhdGEuc2l6ZSgpLCBkaWdlc3RBbGdvcml0aG0sIDAsIHNpZ25hdHVyZS5maXJz
dCwgc2lnbmF0dXJlLnNlY29uZCk7CiAgICAgaWYgKCFzdGF0dXMpCi0gICAgICAgIHByb21pc2Ut
PmZ1bGZpbGwodHJ1ZSk7CisgICAgICAgIGNhbGxiYWNrKHRydWUpOwogICAgIGVsc2UgaWYgKHN0
YXR1cyA9PSBrQ0NOb3RWZXJpZmllZCB8fCBrQ0NEZWNvZGVFcnJvcikgLy8gPHJkYXI6Ly9wcm9i
bGVtLzE1NDY0OTgyPiBDQ1JTQUNyeXB0b3JWZXJpZnkgcmV0dXJucyBrQ0NEZWNvZGVFcnJvciBp
bnN0ZWFkIG9mIGtDQ05vdFZlcmlmaWVkIHNvbWV0aW1lcwotICAgICAgICBwcm9taXNlLT5mdWxm
aWxsKGZhbHNlKTsKKyAgICAgICAgY2FsbGJhY2soZmFsc2UpOwogICAgIGVsc2UKLSAgICAgICAg
cHJvbWlzZS0+cmVqZWN0KG51bGxwdHIpOworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAJKHJl
dmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAj
aW5jbHVkZSAiQ3J5cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YU9jdGV0U2Vx
dWVuY2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNET01Qcm9t
aXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTYsMjAgKzU1LDIwIEBAIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgQ3J5cHRvQWxnb3JpdGgKICAgICByZXR1cm4gc19pZGVudGlm
aWVyOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmdlbmVyYXRlS2V5KGNvbnN0
IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUs
IENyeXB0b0tleVVzYWdlIHVzYWdlcywgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBw
cm9taXNlLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6Z2Vu
ZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9v
bCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxsYmFj
ayBjYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYp
CiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zJiBhZXNQYXJhbWV0
ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXMocGFyYW1ldGVycyk7CiAKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmdlbmVyYXRlKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMsIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBwcm9taXNl
LT5yZWplY3QobnVsbHB0cik7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgcHJvbWlzZS0+ZnVsZmlsbChyZXN1bHQucmVsZWFzZSgpKTsK
KyAgICBjYWxsYmFjayhyZXN1bHQuZ2V0KCksIDApOwogfQogCi12b2lkIENyeXB0b0FsZ29yaXRo
bUFFU19DQkM6OmltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29u
c3QgQ3J5cHRvS2V5RGF0YSYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNh
Z2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleShjb25z
dCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5RGF0YSYga2V5RGF0
YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIEtleUNhbGxiYWNrIGNh
bGxiYWNrLCBWb2lkQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChrZXlE
YXRhLmZvcm1hdCgpICE9IENyeXB0b0tleURhdGE6OkZvcm1hdDo6T2N0ZXRTZXF1ZW5jZSkgewog
ICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwpAQCAtNzcsNyArNzYsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleShjCiAgICAgfQogICAgIGNvbnN0IENyeXB0
b0tleURhdGFPY3RldFNlcXVlbmNlJiBrZXlEYXRhT2N0ZXRTZXF1ZW5jZSA9IHRvQ3J5cHRvS2V5
RGF0YU9jdGV0U2VxdWVuY2Uoa2V5RGF0YSk7CiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVz
dWx0ID0gQ3J5cHRvS2V5QUVTOjpjcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVT
X0NCQywga2V5RGF0YU9jdGV0U2VxdWVuY2Uub2N0ZXRTZXF1ZW5jZSgpLCBleHRyYWN0YWJsZSwg
dXNhZ2UpOwotICAgIHByb21pc2UtPmZ1bGZpbGwocmVzdWx0LnJlbGVhc2UoKSk7CisgICAgY2Fs
bGJhY2soKnJlc3VsdCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmgJKHJldmlzaW9u
IDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19DQkMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDEwIEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29u
c3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZW5jcnlwdChjb25zdCBDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9u
RGF0YSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYs
IHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9w
dHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3Qg
Q3J5cHRvS2V5RGF0YSYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlLCBzdGQ6OnVu
aXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGVuY3J5cHQoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNv
bnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFj
aywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkZWNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9y
Q2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlLCBLZXlPcktl
eVBhaXJDYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29k
ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29sIGV4dHJhY3RhYmxl
LCBDcnlwdG9LZXlVc2FnZSwgS2V5Q2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJh
Y2ssIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1ITUFDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAkocmV2aXNpb24gMTU5NDI2KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJDcnlwdG9LZXlE
YXRhT2N0ZXRTZXF1ZW5jZS5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTcsMjAgKzU2LDIwIEBAIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgQ3J5cHRvQWxnb3JpdGgKICAgICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCi12b2lkIENy
eXB0b0FsZ29yaXRobUhNQUM6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdl
cywgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2Rl
JikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2UgdXNhZ2VzLCBLZXlPcktleVBhaXJDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxiYWNr
IGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxn
b3JpdGhtSG1hY0tleVBhcmFtcyYgaG1hY1BhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobUht
YWNLZXlQYXJhbXMocGFyYW1ldGVycyk7CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gcmVz
dWx0ID0gQ3J5cHRvS2V5SE1BQzo6Z2VuZXJhdGUoaG1hY1BhcmFtZXRlcnMuaGFzTGVuZ3RoID8g
aG1hY1BhcmFtZXRlcnMubGVuZ3RoIDogMCwgaG1hY1BhcmFtZXRlcnMuaGFzaCwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0
KG51bGxwdHIpOworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHByb21pc2UtPmZ1bGZpbGwocmVzdWx0LnJlbGVhc2UoKSk7CisgICAgY2Fs
bGJhY2socmVzdWx0LmdldCgpLCAwKTsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpp
bXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29u
c3QgQ3J5cHRvS2V5RGF0YSYga2V5RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNh
Z2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleShjb25zdCBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXlEYXRh
JiBrZXlEYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSwgS2V5Q2Fs
bGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKGtleURhdGEuZm9ybWF0KCkgIT0gQ3J5cHRvS2V5RGF0YTo6Rm9ybWF0OjpPY3RldFNlcXVl
bmNlKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC04MSw3ICs4MCw3IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0S2V5KGNvbnMKICAgICBjb25zdCBDcnlw
dG9BbGdvcml0aG1IbWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHRvQ3J5cHRvQWxnb3JpdGht
SG1hY1BhcmFtcyhwYXJhbWV0ZXJzKTsKIAogICAgIFJlZlB0cjxDcnlwdG9LZXlITUFDPiByZXN1
bHQgPSBDcnlwdG9LZXlITUFDOjpjcmVhdGUoa2V5RGF0YU9jdGV0U2VxdWVuY2Uub2N0ZXRTZXF1
ZW5jZSgpLCBobWFjUGFyYW1ldGVycy5oYXNoLCBleHRyYWN0YWJsZSwgdXNhZ2UpOwotICAgIHBy
b21pc2UtPmZ1bGZpbGwocmVzdWx0LnJlbGVhc2UoKSk7CisgICAgY2FsbGJhY2soKnJlc3VsdCk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUhNQUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmgJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsMTAgKzQxLDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5
cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9t
aXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkm
LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBzaWduYXR1cmUsIGNvbnN0IENyeXB0b09wZXJh
dGlvbkRhdGEmIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlv
bkNvZGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVLZXkoY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdl
LCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5RGF0YSYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tl
eVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBW
ZWN0b3JDYWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29k
ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRh
dGEmIHNpZ25hdHVyZSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgQm9vbENhbGxi
YWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgS2V5T3JLZXlQYWly
Q2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXlEYXRhJiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5
cHRvS2V5VXNhZ2UsIEtleUNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBF
eGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CiAKIHByaXZhdGU6CiAgICAgQ3J5cHRvQWxnb3JpdGht
SE1BQygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAko
cmV2aXNpb24gMTU5NDI2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw2IEBACiAjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtUnNhU3NhS2V5UGFyYW1zLmgiCiAj
aW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDcnlwdG9L
ZXlSU0EuaCIKLSNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC01NiwyOCArNTUsMzIgQEAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBDcnlwdG9B
bGdvcml0aAogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXlEYXRhJiBrZXlEYXRhLCBib29sIGV4
dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VX
cmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNB
U1NBX1BLQ1MxX3YxXzU6OmdlbmVyYXRlS2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlcywg
S2V5T3JLZXlQYWlyQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJh
Y2ssIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobVJzYUtleUdl
blBhcmFtcyYgcnNhUGFyYW1ldGVycyA9IHRvQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1z
KHBhcmFtZXRlcnMpOworCisgICAgYXV0byBrZXlQYWlyQ2FsbGJhY2sgPSBbY2FsbGJhY2tdKENy
eXB0b0tleVBhaXImIHBhaXIpIHsKKyAgICAgICAgY2FsbGJhY2soMCwgJnBhaXIpOworICAgIH07
CisKKyAgICBDcnlwdG9LZXlSU0E6OmdlbmVyYXRlUGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpSU0FTU0FfUEtDUzFfdjFfNSwgcnNhUGFyYW1ldGVycy5tb2R1bHVzTGVuZ3RoLCByc2FQ
YXJhbWV0ZXJzLnB1YmxpY0V4cG9uZW50LCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBzdGQ6Om1vdmUo
a2V5UGFpckNhbGxiYWNrKSwgc3RkOjptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworfQorCit2b2lk
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppbXBvcnRLZXkoY29uc3QgQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5RGF0YSYga2V5
RGF0YSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIEtleUNhbGxiYWNr
IGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikK
IHsKICAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1Sc2FTc2FLZXlQYXJhbXMmIHJzYVNTQVBhcmFt
ZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobVJzYVNzYUtleVBhcmFtcyhwYXJhbWV0ZXJzKTsKICAg
ICBjb25zdCBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50cyYgcnNhQ29tcG9uZW50cyA9IHRvQ3J5
cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMoa2V5RGF0YSk7CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5
UlNBPiByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpSU0FTU0FfUEtDUzFfdjFfNSwgcnNhQ29tcG9uZW50cywgZXh0cmFjdGFibGUsIHVzYWdl
KTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBwcm9taXNlLT5yZWplY3QobnVsbHB0cik7
CisgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKHJzYVNTQVBhcmFtZXRlcnMuaGFzSGFzaCkKICAgICAgICAgcmVzdWx0LT5yZXN0cmlj
dFRvSGFzaChyc2FTU0FQYXJhbWV0ZXJzLmhhc2gpOwogCi0gICAgcHJvbWlzZS0+ZnVsZmlsbChy
ZXN1bHQucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFf
djFfNTo6Z2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1l
dGVycywgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzLCBzdGQ6OnVuaXF1
ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIGNv
bnN0IENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcyYgcnNhUGFyYW1ldGVycyA9IHRvQ3J5
cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zKHBhcmFtZXRlcnMpOwotCi0gICAgQ3J5cHRvS2V5
UlNBOjpnZW5lcmF0ZVBhaXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1Mx
X3YxXzUsIHJzYVBhcmFtZXRlcnMubW9kdWx1c0xlbmd0aCwgcnNhUGFyYW1ldGVycy5wdWJsaWNF
eHBvbmVudCwgZXh0cmFjdGFibGUsIHVzYWdlcywgc3RkOjptb3ZlKHByb21pc2UpKTsKKyAgICBj
YWxsYmFjaygqcmVzdWx0KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNS5oCShyZXZpc2lvbiAxNTk0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwxMCArNDEsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCBPVkVSUklERTsKIAotICAgIHZpcnR1
YWwgdm9pZCBzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlw
dG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgc3RkOjp1bmlxdWVfcHRyPFByb21p
c2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB2
ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleSYs
IGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIHNpZ25hdHVyZSwgY29uc3QgQ3J5cHRvT3BlcmF0
aW9uRGF0YSYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9u
Q29kZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZUtleShjb25zdCBDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2Us
IHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgaW1wb3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMmLCBjb25zdCBDcnlwdG9LZXlEYXRhJiwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5
VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2lnbihjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZl
Y3RvckNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2Rl
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHZlcmlmeShjb25zdCBDcnlwdG9BbGdvcml0
aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0
YSYgc2lnbmF0dXJlLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBCb29sQ2FsbGJh
Y2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlLCBLZXlPcktleVBhaXJD
YWxsYmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b0tleURhdGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlw
dG9LZXlVc2FnZSwgS2V5Q2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4
Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAJKHJldmlzaW9uIDE1OTQy
NikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNI
QTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFNVQlRM
RV9DUllQVE8pCiAKICNpbmNsdWRlICJDcnlwdG9EaWdlc3QuaCIKLSNpbmNsdWRlICJKU0RPTVBy
b21pc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MywxNyArNTIsMTcgQEAgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllciBDcnlwdG9BbGdvcml0aAogICAgIHJldHVybiBzX2lkZW50
aWZpZXI7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGhtU0hBMTo6ZGlnZXN0KGNvbnN0IENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBz
dGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmKQor
dm9pZCBDcnlwdG9BbGdvcml0aG1TSEExOjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNr
IGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikK
IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvRGlnZXN0PiBkaWdlc3QgPSBDcnlwdG9EaWdl
c3Q6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSk7CiAgICAgaWYgKCFk
aWdlc3QpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxwdHIpOworICAgICAgICBmYWls
dXJlQ2FsbGJhY2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGRpZ2VzdC0+YWRk
Qnl0ZXMoZGF0YS5maXJzdCwgZGF0YS5zZWNvbmQpOwogCi0gICAgcHJvbWlzZS0+ZnVsZmlsbChk
aWdlc3QtPmNvbXB1dGVIYXNoKCkpOworICAgIGNhbGxiYWNrKGRpZ2VzdC0+Y29tcHV0ZUhhc2go
KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobVNIQTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEExLmgJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmly
dHVhbCB2b2lkIGRpZ2VzdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3Qg
Q3J5cHRvT3BlcmF0aW9uRGF0YSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4
Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlnZXN0KGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVj
dG9yQ2FsbGJhY2ssIFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUm
KSBPVkVSUklERTsKIAogcHJpdmF0ZToKICAgICBDcnlwdG9BbGdvcml0aG1TSEExKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEyMjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobVNIQTIyNC5jcHAJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTIyNC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAogI2luY2x1
ZGUgIkNyeXB0b0RpZ2VzdC5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTUzLDE3ICs1MiwxNyBAQCBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIENyeXB0b0FsZ29yaXRoCiAgICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKIH0KIAotdm9pZCBD
cnlwdG9BbGdvcml0aG1TSEEyMjQ6OmRpZ2VzdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFBy
b21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgQ3J5cHRvQWxnb3Jp
dGhtU0hBMjI0OjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0
IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lk
Q2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvRGlnZXN0PiBkaWdlc3QgPSBDcnlwdG9EaWdlc3Q6OmNyZWF0ZShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjI0KTsKICAgICBpZiAoIWRpZ2VzdCkgewotICAg
ICAgICBwcm9taXNlLT5yZWplY3QobnVsbHB0cik7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjaygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZGlnZXN0LT5hZGRCeXRlcyhkYXRhLmZp
cnN0LCBkYXRhLnNlY29uZCk7CiAKLSAgICBwcm9taXNlLT5mdWxmaWxsKGRpZ2VzdC0+Y29tcHV0
ZUhhc2goKSk7CisgICAgY2FsbGJhY2soZGlnZXN0LT5jb21wdXRlSGFzaCgpKTsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hB
MjI0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtU0hBMjI0LmgJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTIyNC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZGlnZXN0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9u
Q29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWdlc3QoY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxs
YmFjaywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpIE9WRVJS
SURFOwogCiBwcml2YXRlOgogICAgIENyeXB0b0FsZ29yaXRobVNIQTIyNCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMjU2LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1TSEEyNTYuY3BwCShyZXZpc2lvbiAxNTk0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEyNTYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKICNpbmNsdWRlICJD
cnlwdG9EaWdlc3QuaCIKLSNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC01MywxNyArNTIsMTcgQEAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBD
cnlwdG9BbGdvcml0aAogICAgIHJldHVybiBzX2lkZW50aWZpZXI7CiB9CiAKLXZvaWQgQ3J5cHRv
QWxnb3JpdGhtU0hBMjU2OjpkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYs
IGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNl
V3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIENyeXB0b0FsZ29yaXRobVNI
QTI1Njo6ZGlnZXN0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlw
dG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFjaywgVm9pZENhbGxi
YWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0RpZ2VzdD4gZGlnZXN0ID0gQ3J5cHRvRGlnZXN0OjpjcmVhdGUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1Nik7CiAgICAgaWYgKCFkaWdlc3QpIHsKLSAgICAgICAg
cHJvbWlzZS0+cmVqZWN0KG51bGxwdHIpOworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGRpZ2VzdC0+YWRkQnl0ZXMoZGF0YS5maXJzdCwg
ZGF0YS5zZWNvbmQpOwogCi0gICAgcHJvbWlzZS0+ZnVsZmlsbChkaWdlc3QtPmNvbXB1dGVIYXNo
KCkpOworICAgIGNhbGxiYWNrKGRpZ2VzdC0+Y29tcHV0ZUhhc2goKSk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTI1Ni5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobVNIQTI1Ni5oCShyZXZpc2lvbiAxNTk0MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEyNTYuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGRp
Z2VzdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvT3BlcmF0
aW9uRGF0YSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlnZXN0KGNvbnN0IENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwgVmVjdG9yQ2FsbGJhY2ss
IFZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsK
IAogcHJpdmF0ZToKICAgICBDcnlwdG9BbGdvcml0aG1TSEEyNTYoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTM4NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
U0hBMzg0LmNwcAkocmV2aXNpb24gMTU5NDI2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMzg0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNiBAQAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCiAjaW5jbHVkZSAiQ3J5cHRv
RGlnZXN0LmgiCi0jaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTMsMTcgKzUyLDE3IEBAIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgQ3J5cHRv
QWxnb3JpdGgKICAgICByZXR1cm4gc19pZGVudGlmaWVyOwogfQogCi12b2lkIENyeXB0b0FsZ29y
aXRobVNIQTM4NDo6ZGlnZXN0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25z
dCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBw
ZXI+IHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBDcnlwdG9BbGdvcml0aG1TSEEzODQ6
OmRpZ2VzdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxsYmFjayBm
YWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9EaWdlc3Q+IGRpZ2VzdCA9IENyeXB0b0RpZ2VzdDo6Y3JlYXRlKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OlNIQV8zODQpOwogICAgIGlmICghZGlnZXN0KSB7Ci0gICAgICAgIHByb21p
c2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBkaWdlc3QtPmFkZEJ5dGVzKGRhdGEuZmlyc3QsIGRhdGEu
c2Vjb25kKTsKIAotICAgIHByb21pc2UtPmZ1bGZpbGwoZGlnZXN0LT5jb21wdXRlSGFzaCgpKTsK
KyAgICBjYWxsYmFjayhkaWdlc3QtPmNvbXB1dGVIYXNoKCkpOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEEzODQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1TSEEzODQuaAkocmV2aXNpb24gMTU5NDI2KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBMzg0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGlkZW50aWZpZXIoKSBjb25zdCBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWdlc3Qo
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRh
dGEmLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZ2VzdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYsIFZlY3RvckNhbGxiYWNrLCBWb2lk
Q2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CiAKIHBy
aXZhdGU6CiAgICAgQ3J5cHRvQWxnb3JpdGhtU0hBMzg0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1TSEE1MTIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVNIQTUx
Mi5jcHAJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobVNIQTUxMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDYgQEAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAogI2luY2x1ZGUgIkNyeXB0b0RpZ2Vz
dC5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTUzLDE3ICs1MiwxNyBAQCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIENyeXB0b0FsZ29y
aXRoCiAgICAgcmV0dXJuIHNfaWRlbnRpZmllcjsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1T
SEE1MTI6OmRpZ2VzdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5
cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBw
cm9taXNlLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtU0hBNTEyOjpkaWdl
c3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGNvbnN0IENyeXB0b09wZXJhdGlv
bkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVy
ZUNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRv
RGlnZXN0PiBkaWdlc3QgPSBDcnlwdG9EaWdlc3Q6OmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpTSEFfNTEyKTsKICAgICBpZiAoIWRpZ2VzdCkgewotICAgICAgICBwcm9taXNlLT5y
ZWplY3QobnVsbHB0cik7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgZGlnZXN0LT5hZGRCeXRlcyhkYXRhLmZpcnN0LCBkYXRhLnNlY29u
ZCk7CiAKLSAgICBwcm9taXNlLT5mdWxmaWxsKGRpZ2VzdC0+Y29tcHV0ZUhhc2goKSk7CisgICAg
Y2FsbGJhY2soZGlnZXN0LT5jb21wdXRlSGFzaCgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hBNTEyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtU0hB
NTEyLmgJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobVNIQTUxMi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBpZGVu
dGlmaWVyKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlnZXN0KGNvbnN0
IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwg
c3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkaWdlc3QoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cyYsIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBWZWN0b3JDYWxsYmFjaywgVm9pZENhbGxi
YWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOwogCiBwcml2YXRl
OgogICAgIENyeXB0b0FsZ29yaXRobVNIQTUxMigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5UlNBLmgJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleVJTQS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjZGVmaW5lIENyeXB0b0tleVJTQV9oCiAKICNpbmNsdWRlICJDcnlwdG9LZXkuaCIK
KyNpbmNsdWRlIDxmdW5jdGlvbmFsPgogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAKQEAg
LTU1LDcgKzU2LDkgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGtleVNpemVJbkJpdHMoKSBjb25z
dDsKIAotICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlUGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyLCB1bnNpZ25lZCBtb2R1bHVzTGVuZ3RoLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHB1Ymxp
Y0V4cG9uZW50LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSwgc3RkOjp1bmlxdWVf
cHRyPFByb21pc2VXcmFwcGVyPik7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ3J5
cHRvS2V5UGFpciYpPiBLZXlQYWlyQ2FsbGJhY2s7CisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gVm9pZENhbGxiYWNrOworICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlUGFpcihDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyLCB1bnNpZ25lZCBtb2R1bHVzTGVuZ3RoLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIHB1YmxpY0V4cG9uZW50LCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlV
c2FnZSwgS2V5UGFpckNhbGxiYWNrLCBWb2lkQ2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKTsKIAog
ICAgIFBsYXRmb3JtUlNBS2V5IHBsYXRmb3JtS2V5KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9y
bUtleTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRo
bUFFU19DQkNNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQ01hYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDE4ICszMSwxNyBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUFl
c0NiY1BhcmFtcy5oIgogI2luY2x1ZGUgIkNyeXB0b0tleUFFUy5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKICNpbmNsdWRlIDxDb21tb25D
cnlwdG8vQ29tbW9uQ3J5cHRvLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZv
aWQgdHJhbnNmb3JtQUVTX0NCQyhDQ09wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IENyeXB0b0Fs
Z29yaXRobUFlc0NiY1BhcmFtcyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5QUVTJiBrZXks
IGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNl
V3JhcHBlcj4gcHJvbWlzZSkKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVyYXRp
b24gb3BlcmF0aW9uLCBjb25zdCBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMmIHBhcmFtZXRl
cnMsIGNvbnN0IENyeXB0b0tleUFFUyYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBk
YXRhLCBDcnlwdG9BbGdvcml0aG06OlZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBDcnlwdG9BbGdv
cml0aG06OlZvaWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCiB7CiAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YocGFyYW1ldGVycy5pdikgPT0ga0NDQmxvY2tTaXplQUVTMTI4LCAiSW5pdGlhbGl6
YXRpb24gdmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyBhbGdvcml0aG0gYmxvY2sgc2l6
ZSIpOwogCiAgICAgc2l6ZV90IGtleUxlbmd0aEluQnl0ZXMgPSBrZXkua2V5KCkuc2l6ZSgpOwog
ICAgIGlmIChrZXlMZW5ndGhJbkJ5dGVzICE9IDE2ICYmIGtleUxlbmd0aEluQnl0ZXMgIT0gMjQg
JiYga2V5TGVuZ3RoSW5CeXRlcyAhPSAzMikgewotICAgICAgICBwcm9taXNlLT5yZWplY3QobnVs
bHB0cik7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC01NCw3ICs1Myw3IEBAIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVy
YXRpb24KICNlbmRpZgogICAgIENDQ3J5cHRvclN0YXR1cyBzdGF0dXMgPSBDQ0NyeXB0b3JDcmVh
dGUob3BlcmF0aW9uLCBhZXNBbGdvcml0aG0sIGtDQ09wdGlvblBLQ1M3UGFkZGluZywga2V5Lmtl
eSgpLmRhdGEoKSwga2V5TGVuZ3RoSW5CeXRlcywgcGFyYW1ldGVycy5pdi5kYXRhKCksICZjcnlw
dG9yKTsKICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRy
KTsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTYzLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgdHJhbnNmb3JtQUVTX0NCQyhDQ09wZXJhdGlv
bgogICAgIHNpemVfdCBieXRlc1dyaXR0ZW47CiAgICAgc3RhdHVzID0gQ0NDcnlwdG9yVXBkYXRl
KGNyeXB0b3IsIGRhdGEuZmlyc3QsIGRhdGEuc2Vjb25kLCByZXN1bHQuZGF0YSgpLCByZXN1bHQu
c2l6ZSgpLCAmYnl0ZXNXcml0dGVuKTsKICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIHByb21p
c2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTcxLDcgKzcwLDcgQEAgc3RhdGljIHZvaWQgdHJhbnNmb3Jt
QUVTX0NCQyhDQ09wZXJhdGlvbgogICAgIHN0YXR1cyA9IENDQ3J5cHRvckZpbmFsKGNyeXB0b3Is
IHAsIHJlc3VsdC5lbmQoKSAtIHAsICZieXRlc1dyaXR0ZW4pOwogICAgIHAgKz0gYnl0ZXNXcml0
dGVuOwogICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgcHJvbWlzZS0+cmVqZWN0KG51bGxwdHIp
OworICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtODAsMTAgKzc5LDEwIEBAIHN0YXRpYyB2b2lkIHRyYW5zZm9ybUFFU19DQkMoQ0NPcGVyYXRp
b24KIAogICAgIENDQ3J5cHRvclJlbGVhc2UoY3J5cHRvcik7CiAKLSAgICBwcm9taXNlLT5mdWxm
aWxsKHJlc3VsdCk7CisgICAgY2FsbGJhY2socmVzdWx0KTsKIH0KIAotdm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ0JDOjplbmNyeXB0KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRh
JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjplbmNyeXB0KGNvbnN0IENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5
LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBWZWN0b3JDYWxsYmFjayBjYWxsYmFj
aywgVm9pZENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zJiBhZXNDQkNQYXJhbWV0ZXJzID0g
dG9DcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMocGFyYW1ldGVycyk7CiAKQEAgLTkzLDEwICs5
MiwxMCBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmVuY3J5cHQoY29uCiAgICAgfQog
ICAgIGNvbnN0IENyeXB0b0tleUFFUyYgYWVzS2V5ID0gdG9DcnlwdG9LZXlBRVMoa2V5KTsKIAot
ICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRW5jcnlwdCwgYWVzQ0JDUGFyYW1ldGVycywgYWVzS2V5
LCBkYXRhLCBzdGQ6Om1vdmUocHJvbWlzZSkpOworICAgIHRyYW5zZm9ybUFFU19DQkMoa0NDRW5j
cnlwdCwgYWVzQ0JDUGFyYW1ldGVycywgYWVzS2V5LCBkYXRhLCBzdGQ6Om1vdmUoY2FsbGJhY2sp
LCBzdGQ6Om1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgQ3J5cHRvQWxnb3JpdGht
QUVTX0NCQzo6ZGVjcnlwdChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0
YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6ZGVjcnlwdChjb25zdCBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDcnlwdG9LZXkmIGtleSwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgVmVjdG9yQ2FsbGJhY2sgY2FsbGJhY2ssIFZv
aWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNv
bnN0IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyYgYWVzQ0JDUGFyYW1ldGVycyA9IHRvQ3J5
cHRvQWxnb3JpdGhtQWVzQ2JjUGFyYW1zKHBhcmFtZXRlcnMpOwogCkBAIC0xMDYsNyArMTA1LDcg
QEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjpkZWNyeXB0KGNvbgogICAgIH0KICAgICBj
b25zdCBDcnlwdG9LZXlBRVMmIGFlc0tleSA9IHRvQ3J5cHRvS2V5QUVTKGtleSk7CiAKLSAgICB0
cmFuc2Zvcm1BRVNfQ0JDKGtDQ0RlY3J5cHQsIGFlc0NCQ1BhcmFtZXRlcnMsIGFlc0tleSwgZGF0
YSwgc3RkOjptb3ZlKHByb21pc2UpKTsKKyAgICB0cmFuc2Zvcm1BRVNfQ0JDKGtDQ0RlY3J5cHQs
IGFlc0NCQ1BhcmFtZXRlcnMsIGFlc0tleSwgZGF0YSwgc3RkOjptb3ZlKGNhbGxiYWNrKSwgc3Rk
Ojptb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
SE1BQ01hYy5jcHAJKHJldmlzaW9uIDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmgiCiAjaW5jbHVkZSAi
Q3J5cHRvS2V5SE1BQy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJK
U0RPTVByb21pc2UuaCIKICNpbmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uSE1BQy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OSw3ICs4OCw3IEBAIHN0YXRpYyBWZWN0b3I8dWludDhf
dD4gY2FsY3VsYXRlU2lnbmF0dXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENyeXB0
b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFy
YW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEm
IGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0
IENyeXB0b09wZXJhdGlvbkRhdGEmIGRhdGEsIFZlY3RvckNhbGxiYWNrIGNhbGxiYWNrLCBWb2lk
Q2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGNvbnN0IENyeXB0b0FsZ29yaXRo
bUhtYWNQYXJhbXMmIGhtYWNQYXJhbWV0ZXJzID0gdG9DcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1z
KHBhcmFtZXRlcnMpOwogCkBAIC0xMDcsMTAgKzEwNiwxMCBAQCB2b2lkIENyeXB0b0FsZ29yaXRo
bUhNQUM6OnNpZ24oY29uc3QgQ3J5CiAKICAgICBWZWN0b3I8dWludDhfdD4gc2lnbmF0dXJlID0g
Y2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS5rZXkoKSwgZGF0YSk7CiAKLSAg
ICBwcm9taXNlLT5mdWxmaWxsKHNpZ25hdHVyZSk7CisgICAgY2FsbGJhY2soc2lnbmF0dXJlKTsK
IH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENy
eXB0b09wZXJhdGlvbkRhdGEmIGV4cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBDcnlwdG9PcGVyYXRp
b25EYXRhJiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21pc2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjp2ZXJpZnkoY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBr
ZXksIGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmIGV4cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBD
cnlwdG9PcGVyYXRpb25EYXRhJiBkYXRhLCBCb29sQ2FsbGJhY2sgY2FsbGJhY2ssIFZvaWRDYWxs
YmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1h
Y1BhcmFtcyYgaG1hY1BhcmFtZXRlcnMgPSB0b0NyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMocGFy
YW1ldGVycyk7CiAKQEAgLTEzMCw3ICsxMjksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6
OnZlcmlmeShjb25zdCBDCiAKICAgICBib29sIHJlc3VsdCA9IHNpZ25hdHVyZS5zaXplKCkgPT0g
ZXhwZWN0ZWRTaWduYXR1cmUuc2Vjb25kICYmICFtZW1jbXAoc2lnbmF0dXJlLmRhdGEoKSwgZXhw
ZWN0ZWRTaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zaXplKCkpOwogCi0gICAgcHJvbWlzZS0+
ZnVsZmlsbChyZXN1bHQpOworICAgIGNhbGxiYWNrKHJlc3VsdCk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAJKHJldmlzaW9u
IDE1OTQyNikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkNyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuaCIK
ICNpbmNsdWRlICJDcnlwdG9LZXlQYWlyLmgiCi0jaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAj
aW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkNyeXB0b3IuaD4KIAogI2lmIGRlZmluZWQoX19o
YXNfaW5jbHVkZSkKQEAgLTIwOSwxNyArMjA4LDE5IEBAIHN0YXRpYyBib29sIGJpZ0ludGVnZXJU
b1VJbnQzMihjb25zdCBWZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDcnlwdG9LZXlS
U0E6OmdlbmVyYXRlUGFpcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgdW5z
aWduZWQgbW9kdWx1c0xlbmd0aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwdWJsaWNFeHBvbmVu
dCwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZSkKK3ZvaWQgQ3J5cHRvS2V5UlNBOjpnZW5lcmF0ZVBh
aXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIHVuc2lnbmVkIG1vZHVsdXNM
ZW5ndGgsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcHVibGljRXhwb25lbnQsIGJvb2wgZXh0cmFj
dGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlLCBLZXlQYWlyQ2FsbGJhY2sgY2FsbGJhY2ssIFZv
aWRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCiB7CiAgICAgdWludDMyX3QgZTsKICAgICBpZiAo
IWJpZ0ludGVnZXJUb1VJbnQzMihwdWJsaWNFeHBvbmVudCwgZSkpIHsKICAgICAgICAgLy8gQWRk
aW5nIHN1cHBvcnQgaXMgdHJhY2tlZCBhcyA8cmRhcjovL3Byb2JsZW0vMTU0NDQwMzQ+LgogICAg
ICAgICBXVEZMb2dBbHdheXMoIlB1YmxpYyBleHBvbmVudCBpcyB0b28gYmlnLCBub3Qgc3VwcG9y
dGVkIik7Ci0gICAgICAgIHByb21pc2UtPnJlamVjdChudWxscHRyKTsKKyAgICAgICAgZmFpbHVy
ZUNhbGxiYWNrKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBQcm9taXNlV3JhcHBl
ciogbG9jYWxQcm9taXNlID0gcHJvbWlzZS5yZWxlYXNlKCk7CisgICAgLy8gV2Ugb25seSB1c2Ug
dGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyB3aGVuIGJhY2sgb24gdGhlIG1haW4gdGhyZWFkLCBidXQg
Y2FwdHVyZWQgdmFyaWFibGVzIGFyZSBjb3BpZWQgb24gYSBzZWNvbmRhcnkgdGhyZWFkIHRvby4K
KyAgICBLZXlQYWlyQ2FsbGJhY2sqIGxvY2FsQ2FsbGJhY2sgPSBuZXcgS2V5UGFpckNhbGxiYWNr
KGNhbGxiYWNrKTsKKyAgICBWb2lkQ2FsbGJhY2sqIGxvY2FsRmFpbHVyZUNhbGxiYWNrID0gbmV3
IFZvaWRDYWxsYmFjayhmYWlsdXJlQ2FsbGJhY2spOwogCiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAw
KSwgXnsKICAgICAgICAgQ0NSU0FDcnlwdG9yUmVmIGNjUHVibGljS2V5OwpAQCAtMjI4LDE2ICsy
MjksMTYgQEAgdm9pZCBDcnlwdG9LZXlSU0E6OmdlbmVyYXRlUGFpcihDcnlwdG9BbAogICAgICAg
ICBpZiAoc3RhdHVzKSB7CiAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkNvdWxkIG5vdCBnZW5l
cmF0ZSBhIGtleSBwYWlyLCBzdGF0dXMgJWQiLCBzdGF0dXMpOwogICAgICAgICAgICAgZGlzcGF0
Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgICAgICAgICBs
b2NhbFByb21pc2UtPnJlamVjdChudWxscHRyKTsKLSAgICAgICAgICAgICAgICBkZWxldGUgbG9j
YWxQcm9taXNlOworICAgICAgICAgICAgICAgICgqbG9jYWxGYWlsdXJlQ2FsbGJhY2spKCk7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsRmFpbHVyZUNhbGxiYWNrOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAgICAgIFJlZlB0cjxDcnlw
dG9LZXlSU0E+IHB1YmxpY0tleSA9IENyeXB0b0tleVJTQTo6Y3JlYXRlKGFsZ29yaXRobSwgQ3J5
cHRvS2V5VHlwZTo6UHVibGljLCBjY1B1YmxpY0tleSwgZXh0cmFjdGFibGUsIHVzYWdlKTsKICAg
ICAgICAgICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHByaXZhdGVLZXkgPSBDcnlwdG9LZXlSU0E6
OmNyZWF0ZShhbGdvcml0aG0sIENyeXB0b0tleVR5cGU6OlByaXZhdGUsIGNjUHJpdmF0ZUtleSwg
ZXh0cmFjdGFibGUsIHVzYWdlKTsKLSAgICAgICAgICAgIGxvY2FsUHJvbWlzZS0+ZnVsZmlsbChD
cnlwdG9LZXlQYWlyOjpjcmVhdGUocHVibGljS2V5LnJlbGVhc2UoKSwgcHJpdmF0ZUtleS5yZWxl
YXNlKCkpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBsb2NhbFByb21pc2U7CisgICAgICAgICAgICAo
KmxvY2FsQ2FsbGJhY2spKCpDcnlwdG9LZXlQYWlyOjpjcmVhdGUocHVibGljS2V5LnJlbGVhc2Uo
KSwgcHJpdmF0ZUtleS5yZWxlYXNlKCkpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBsb2NhbENhbGxi
YWNrOwogICAgICAgICB9KTsKICAgICB9KTsKIH0K
</data>
<flag name="review"
          id="240592"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>