<?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>123598</bug_id>
          
          <creation_ts>2013-10-31 17:05:19 -0700</creation_ts>
          <short_desc>Add a Mac WebCrypto implementation of HMAC importKey/sign/verify</short_desc>
          <delta_ts>2013-11-01 10:27:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mkwst</cc>
    
    <cc>sam</cc>
    
    <cc>syoichi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>945761</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-31 17:05:19 -0700</bug_when>
    <thetext>Add a Mac WebCrypto implementation of HMAC importKey/sign/verify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945762</commentid>
    <comment_count>1</comment_count>
      <attachid>215694</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-31 17:09:16 -0700</bug_when>
    <thetext>Created attachment 215694
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945763</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-31 17:10:13 -0700</bug_when>
    <thetext>Attachment 215694 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/crypto/subtle/hmac-sign-verify-expected.txt&apos;, u&apos;LayoutTests/crypto/subtle/hmac-sign-verify.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp&apos;, u&apos;Source/WebCore/crypto/SubtleCrypto.idl&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.cpp&apos;, u&apos;Source/WebCore/crypto/algorithms/CryptoAlgorithmHMAC.h&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyHMAC.cpp&apos;, u&apos;Source/WebCore/crypto/keys/CryptoKeyHMAC.h&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmHMACMac.cpp&apos;, u&apos;Source/WebCore/crypto/mac/CryptoAlgorithmRegistryMac.cpp&apos;]&quot; exit_code: 1
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/keys/CryptoKeyHMAC.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 13 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>945767</commentid>
    <comment_count>3</comment_count>
      <attachid>215694</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-31 17:21:36 -0700</bug_when>
    <thetext>Comment on attachment 215694
proposed patch

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

&gt; Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp:235
&gt; +    std::unique_ptr&lt;PromiseWrapper&gt; promiseWrapper = PromiseWrapper::create(globalObject(), promise);

I’d use auto for the variable declaration here.

&gt; Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp:238
&gt; +    algorithm-&gt;verify(*parameters, *key.get(), signature, data, std::move(promiseWrapper), ec);

Can’t you just do *key here?

&gt; Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp:337
&gt; +    std::unique_ptr&lt;PromiseWrapper&gt; promiseWrapper = PromiseWrapper::create(globalObject(), promise);

Auto?

&gt; Source/WebCore/crypto/keys/CryptoKeyHMAC.cpp:52
&gt; +    std::unique_ptr&lt;CryptoAlgorithmDescriptionBuilder&gt; hashDescriptionBuilder = builder.createEmptyClone();

Auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945844</commentid>
    <comment_count>4</comment_count>
      <attachid>215720</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-31 23:43:44 -0700</bug_when>
    <thetext>Created attachment 215720
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945849</commentid>
    <comment_count>5</comment_count>
      <attachid>215720</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 00:14:07 -0700</bug_when>
    <thetext>Comment on attachment 215720
patch for landing

Clearing flags on attachment: 215720

Committed r158427: &lt;http://trac.webkit.org/changeset/158427&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945851</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-01 00:14:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945912</commentid>
    <comment_count>7</comment_count>
      <attachid>215720</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-11-01 09:57:20 -0700</bug_when>
    <thetext>Comment on attachment 215720
patch for landing

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

&gt; Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp:144
&gt; +        if (usageString == &quot;encrypt&quot;)
&gt; +            result |= CryptoKeyUsageEncrypt;
&gt; +        else if (usageString == &quot;decrypt&quot;)
&gt; +            result |= CryptoKeyUsageDecrypt;
&gt; +        else if (usageString == &quot;sign&quot;)
&gt; +            result |= CryptoKeyUsageSign;
&gt; +        else if (usageString == &quot;verify&quot;)
&gt; +            result |= CryptoKeyUsageVerify;
&gt; +        else if (usageString == &quot;deriveKey&quot;)
&gt; +            result |= CryptoKeyUsageDeriveKey;
&gt; +        else if (usageString == &quot;deriveBits&quot;)
&gt; +            result |= CryptoKeyUsageDeriveBits;
&gt; +        else if (usageString == &quot;wrapKey&quot;)
&gt; +            result |= CryptoKeyUsageWrapKey;
&gt; +        else if (usageString == &quot;unwrapKey&quot;)
&gt; +            result |= CryptoKeyUsageUnwrapKey;

Are repeated strings allowed? Are unknown strings supposed to be silently ignored?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945933</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-11-01 10:27:59 -0700</bug_when>
    <thetext>&gt; Are repeated strings allowed? 

WebCrypto would have to specify that, which it doesn&apos;t (neither does it specify pretty much anything about &quot;usages&quot; yet).

&gt; Are unknown strings supposed to be silently ignored?

Good point, WebIDL says that a typeError should be raised when a JS value is not one of enum values. I&apos;m not sure if that makes sense for WebCrypto, because unknown values have no effect on the behavior. If we don&apos;t implement a WebCrypto operation, it doesn&apos;t matter if it&apos;s allowed. The only way it&apos;s observable is via inspecting key.usages attribute, which is probably not useful outside of debugging. It can also become observable for keys that are stored permanently, if we add support for new operations.

Our generated bindings code currently doesn&apos;t raise exceptions when setting an attribute to an unknown enum value. It silently ignores setting an attribute to an unknown enum value. Ugh.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215694</attachid>
            <date>2013-10-31 17:09:16 -0700</date>
            <delta_ts>2013-10-31 23:43:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>AddHMAC.txt</filename>
            <type>text/plain</type>
            <size>44239</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTEwLTMxICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIE1hYyBXZWJDcnlw
dG8gaW1wbGVtZW50YXRpb24gb2YgSE1BQyBpbXBvcnRLZXkvc2lnbi92ZXJpZnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzU5OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGNyeXB0by9zdWJ0
bGUvaG1hYy1zaWduLXZlcmlmeS5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0
b20uY3BwOiBBZGRlZCBwcm9wZXJ0eSBzdm46ZW9sLXN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3J5cHRvT3Bl
cmF0aW9uRGF0YUZyb21KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyeXB0b0tleUZvcm1h
dEZyb21KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyeXB0b0tleVVzYWdlc0Zyb21KU1Zh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3VidGxlQ3J5cHRvOjpzaWduKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU3VidGxlQ3J5cHRvOjp2ZXJpZnkpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
dWJ0bGVDcnlwdG86OmRpZ2VzdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0bzo6
aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vU3VidGxlQ3J5cHRvLmlkbDoKKyAgICAgICAg
KiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjpDcnlwdG9BbGdvcml0aG1ITUFDKToK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6On5DcnlwdG9BbGdvcml0aG1I
TUFDKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjppZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjpleHBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuaDogQWRkZWQuCisgICAgICAgICogY3J5
cHRvL2tleXM6IEFkZGVkLgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OkNyeXB0b0tleUhNQUMp
OgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6fkNyeXB0b0tleUhNQUMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbik6
CisgICAgICAgICogY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oOiBBZGRlZC4KKyAgICAgICAg
KiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmdldENvbW1vbkNyeXB0b0FsZ29yaXRobSk6CisgICAgICAgIChXZWJDb3JlOjpj
YWxjdWxhdGVTaWduYXR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1B
Qzo6c2lnbik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjp2ZXJpZnkp
OgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6Z2VuZXJhdGVLZXkpOgor
ICAgICAgICAqIGNyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnBsYXRmb3JtUmVnaXN0ZXJB
bGdvcml0aG1zKToKKwogMjAxMy0xMC0zMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnZlcnQgc29tZSBJbnNwZWN0b3JP
YmplY3QgbWVtYmVyIHZhcmlhYmxlcyB0byBIYXNoU2V0L0hhc2hNYXAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE1ODQwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTUwNSw2ICs1NTA1LDExIEBACiAJCUUxMjVGODJCMTgy
MkNGRUMwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODI5MTgyMkNGRUMwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1TSEExLmNwcCAqLzsgfTsKIAkJRTEyNUY4MkMxODIyQ0ZFQzAwRDg0
Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODJBMTgyMkNGRUMwMEQ4NENEOSAvKiBDcnlwdG9BbGdv
cml0aG1TSEExLmggKi87IH07CiAJCUUxMjVGODJFMTgyMkNGRkYwMEQ4NENEOSAvKiBDcnlwdG9B
bGdvcml0aG1TSEExTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxMjVGODJEMTgyMkNGRkYwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEEx
TWFjLmNwcCAqLzsgfTsKKwkJRTEyNUY4MzExODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29y
aXRobUhNQUMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEyNUY4MkYxODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUMuY3BwICov
OyB9OworCQlFMTI1RjgzMjE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4MzAx
ODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUMuaCAqLzsgfTsKKwkJRTEyNUY4
MzUxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4MzMxODIyRjE4QTAwRDg0Q0Q5IC8q
IENyeXB0b0tleUhNQUMuY3BwICovOyB9OworCQlFMTI1RjgzNjE4MjJGMThBMDBEODRDRDkgLyog
Q3J5cHRvS2V5SE1BQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuaCAqLzsgfTsK
KwkJRTEyNUY4MzgxODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNUY4Mzcx
ODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwICovOyB9OwogCQlF
MTI3MTlDNzBFRUVDMTY4MDBGNjEyMTMgLyogTmF2aWdhdG9yQmFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNzE5QzYwRUVFQzE2ODAwRjYxMjEz
IC8qIE5hdmlnYXRvckJhc2UuaCAqLzsgfTsKIAkJRTEyNzE5Q0EwRUVFQzIxMzAwRjYxMjEzIC8q
IE5hdmlnYXRvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTEyNzE5QzkwRUVFQzIxMzAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuY3BwICov
OyB9OwogCQlFMTI3MUEwQjBFRUVDNzdBMDBGNjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI3MUEwQTBFRUVD
NzdBMDBGNjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmggKi87IH07CkBAIC0xMjUxMiw2ICsxMjUx
NywxMSBAQAogCQlFMTI1RjgyOTE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hB
MS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDcnlwdG9BbGdvcml0
aG1TSEExLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNUY4MkExODIyQ0ZF
QzAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ3J5cHRvQWxnb3JpdGhtU0hBMS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTI1RjgyRDE4MjJDRkZGMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMU1h
Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDcnlwdG9BbGdvcml0
aG1TSEExTWFjLmNwcDsgcGF0aCA9IG1hYy9DcnlwdG9BbGdvcml0aG1TSEExTWFjLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4MkYxODIyRjExQjAwRDg0Q0Q5IC8qIENy
eXB0b0FsZ29yaXRobUhNQUMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxMjVGODMwMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobUhNQUMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4MzMxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0
b0tleUhNQUMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRv
S2V5SE1BQy5jcHA7IHBhdGggPSBrZXlzL0NyeXB0b0tleUhNQUMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMTI1RjgzNDE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1B
Qy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDcnlwdG9LZXlITUFDLmg7IHBh
dGggPSBrZXlzL0NyeXB0b0tleUhNQUMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTEyNUY4MzcxODIyRjFFQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvQWxnb3JpdGhtSE1BQ01h
Yy5jcHA7IHBhdGggPSBtYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxMjcxOUM2MEVFRUMxNjgwMEY2MTIxMyAvKiBOYXZpZ2F0b3JC
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvckJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNzE5QzkwRUVFQzIxMzAwRjYxMjEzIC8q
IE5hdmlnYXRvckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmF2aWdhdG9yQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjcxQTBB
MEVFRUM3N0EwMEY2MTIxMyAvKiBXb3JrZXJOYXZpZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV29ya2VyTmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDEzNyw2ICsyMDE0Nyw3IEBACiAJCUUxNzJBRjcxMTgwRjM0MzQwMEZCQURCOSAv
KiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUUx
MjVGODM3MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAqLywK
IAkJCQlFMUJCODRBQzE4MjJDQTc0MDA1MjUwNDMgLyogQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlN
YWMuY3BwICovLAogCQkJCUUxMjVGODJEMTgyMkNGRkYwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0
aG1TSEExTWFjLmNwcCAqLywKIAkJCSk7CkBAIC0yMDE0Niw2ICsyMDE1Nyw4IEBACiAJCUUxNzJB
RjdDMTgwRjNCMEQwMEZCQURCOSAvKiBhbGdvcml0aG1zICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlFMTI1RjgyRjE4MjJGMTFCMDBEODRDRDkgLyogQ3J5
cHRvQWxnb3JpdGhtSE1BQy5jcHAgKi8sCisJCQkJRTEyNUY4MzAxODIyRjExQjAwRDg0Q0Q5IC8q
IENyeXB0b0FsZ29yaXRobUhNQUMuaCAqLywKIAkJCQlFMTI1RjgyOTE4MjJDRkVDMDBEODRDRDkg
LyogQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAgKi8sCiAJCQkJRTEyNUY4MkExODIyQ0ZFQzAwRDg0
Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuaCAqLywKIAkJCSk7CkBAIC0yMDE1NSw2ICsyMDE2
OCw4IEBACiAJCUUxOURBMjlEMTgxOTk1Q0UwMDA4OEJDOCAvKiBrZXlzICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlFMTI1RjgzMzE4MjJGMThBMDBEODRD
RDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgKi8sCisJCQkJRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5
IC8qIENyeXB0b0tleUhNQUMuaCAqLywKIAkJCSk7CiAJCQluYW1lID0ga2V5czsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMjE1MCw2ICsyMjE2NSw3IEBACiAJCQkJODVEMzg5QjIw
QTk5MUE3RjAwMjgyMTQ1IC8qIERPTUF0dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RTcxMThE
MEFDNUQ1MzUwMDUzMjcwRiAvKiBET01BdHRySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDOTQ2RUVGMTA3RkRCQUMwMDg1NzE5MyAvKiBET01CZWZvcmVMb2FkRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUxMjVGODM2MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRTJEOTlFNzEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkUyRDk5RUExMEUyQkMzODAwNDk2MzM3IC8qIERPTUJsb2JJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUwODlDRDcwQTk4QzQyODAwQTI3NUFBIC8q
IERPTUNEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDM5OCw2ICsyNDQxNCw3IEBA
CiAJCQkJQjIyMjdBMkEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0dyYWRpZW50RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQjYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0dyYXBoaWNz
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwRkJGMkIwRDlBRjA0NzAwOEZDMjkyIC8q
IFNWR0hLZXJuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTEyNUY4MzIxODIyRjExQjAw
RDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcx
OUJBMTgxMTA2RTAwMDE2REM1MSAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNTU5
OUE0MEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRB
RTdDMTYxN0QxQkI5NTAwMDlGQjMxIC8qIEVsZW1lbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNTQ5Niw2ICsyNTUxMyw3IEBACiAJCQkJQTI5NTMyQ0YxNURENUUxNzAwNDY5RUJDIC8q
IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdC
QzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3QkM2QTIzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTEyNUY4MzUxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExRUYyQzUxN0YwRkQzNTAwRTRGQTE2IC8qIEpTSURC
SW5kZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxNkNGRDMxNjlEMURFRDAwRDNBMEM3IC8q
IERhdGFiYXNlQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNjlEQTE1MDVGMDc2
MDAxQjc0QUMgLyogRGF0YWJhc2VCYWNrZW5kQmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1
NjM3LDYgKzI1NjU1LDcgQEAKIAkJCQlGNUMwNDFFNDBGRkNBOTZEMDA4MzlENEEgLyogRE9NSFRN
TERhdGFMaXN0RWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNTdBOEU4MTgxODRDNjcw
MDlGODIxRCAvKiBKU0NyeXB0b0tleUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzA1
ODUyMzE3RkRDMTQwMDA1RjJCQ0IgLyogTWVkaWFUcmFja0NvbnN0cmFpbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUUxMjVGODMxMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1I
TUFDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQzNTlENzkyMTI5Q0EzQzAwMDA2RTVEMiAvKiBE
T01IVE1MRGV0YWlsc0VsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUJBNEQwQzBBQTY4
ODY4MDA4ODA1MkQgLyogRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NUJBNEQwRTBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTERpdkVsZW1lbnQubW0gaW4g
U291cmNlcyAqLywKQEAgLTI2MDc2LDYgKzI2MDk1LDcgQEAKIAkJCQk5QjdFNzhCRDE2RjE2Q0M2
MDAxMjY5MTQgLyogSFRNTFRyZWVCdWlsZGVyU2ltdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4RUE3OUYzMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MVUxpc3RFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUU0NDYxM0FBMENENjMzMTAwMEZBREE3NSAvKiBIVE1MVmlkZW9FbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMjVGODM4MTgyMkYxRUIwMEQ4NENEOSAvKiBD
cnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Q3NEU1MEE0
QzhEREYwMDVGREE2RCAvKiBIVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3N0IzODc5MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MVmlld1NvdXJjZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwQjhDNTZENDBGMjg2MjdGMDAwNTAyRTEgLyogSFRUUEhl
YWRlck1hcC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1ODQwNykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobT4gCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IHJlc3VsdChDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2hhcmVkKCkuY3JlYXRlKGFsZ29yaXRobUlkZW50aWZpZXIpKTsKKyAgICBhdXRvIHJl
c3VsdCA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoYWxnb3JpdGht
SWRlbnRpZmllcik7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTc4LDE4ICs3
OCwxODQgQEAgc3RhdGljIGJvb2wgc2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdAogICAgIHJl
dHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9PcGVyYXRpb25EYXRhJiBy
ZXN1bHQpCit7CisgICAgaWYgKEFycmF5QnVmZmVyKiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKHZh
bHVlKSkKKyAgICAgICAgcmVzdWx0ID0gc3RkOjptYWtlX3BhaXIoc3RhdGljX2Nhc3Q8Y2hhcio+
KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIGVsc2UgaWYgKFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyh2YWx1
ZSkpCisgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIqPihi
dWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpKSwgYnVmZmVyVmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgIk9ubHkgQXJyYXlCdWZmZXIg
YW5kIEFycmF5QnVmZmVyVmlldyBvYmplY3RzIGNhbiBiZSBwYXJ0IG9mIENyeXB0b09wZXJhdGlv
bkRhdGEgc2VxdWVuY2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlGb3JtYXQmIHJlc3VsdCkKK3sK
KyAgICBTdHJpbmcga2V5Rm9ybWF0U3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChrZXlGb3JtYXRTdHJpbmcgPT0gInJhdyIpCisgICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUZvcm1hdDo6UmF3OworICAgIGVsc2UgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAi
cGtjczgiKQorICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlGb3JtYXQ6OlBLQ1M4OworICAgIGVs
c2UgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAic3BraSIpCisgICAgICAgIHJlc3VsdCA9IENyeXB0
b0tleUZvcm1hdDo6U1BLSTsKKyAgICBlbHNlIGlmIChrZXlGb3JtYXRTdHJpbmcgPT0gImp3ayIp
CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUZvcm1hdDo6SldLOworICAgIGVsc2UgeworICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpT
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBDcnlwdG9LZXlVc2FnZSYgcmVz
dWx0KQoreworICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgeworICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJlc3VsdCA9
IDA7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBKU0M6
OkpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleChleGVjLCBpKTsKKyAgICAgICAgU3Ry
aW5nIHVzYWdlU3RyaW5nID0gZWxlbWVudC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Cisg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKHVzYWdlU3RyaW5nID09ICJlbmNyeXB0IikKKyAgICAgICAgICAgIHJl
c3VsdCB8PSBDcnlwdG9LZXlVc2FnZUVuY3J5cHQ7CisgICAgICAgIGVsc2UgaWYgKHVzYWdlU3Ry
aW5nID09ICJkZWNyeXB0IikKKyAgICAgICAgICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZURl
Y3J5cHQ7CisgICAgICAgIGVsc2UgaWYgKHVzYWdlU3RyaW5nID09ICJzaWduIikKKyAgICAgICAg
ICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZVNpZ247CisgICAgICAgIGVsc2UgaWYgKHVzYWdl
U3RyaW5nID09ICJ2ZXJpZnkiKQorICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdl
VmVyaWZ5OworICAgICAgICBlbHNlIGlmICh1c2FnZVN0cmluZyA9PSAiZGVyaXZlS2V5IikKKyAg
ICAgICAgICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZURlcml2ZUtleTsKKyAgICAgICAgZWxz
ZSBpZiAodXNhZ2VTdHJpbmcgPT0gImRlcml2ZUJpdHMiKQorICAgICAgICAgICAgcmVzdWx0IHw9
IENyeXB0b0tleVVzYWdlRGVyaXZlQml0czsKKyAgICAgICAgZWxzZSBpZiAodXNhZ2VTdHJpbmcg
PT0gIndyYXBLZXkiKQorICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlV3JhcEtl
eTsKKyAgICAgICAgZWxzZSBpZiAodXNhZ2VTdHJpbmcgPT0gInVud3JhcEtleSIpCisgICAgICAg
ICAgICByZXN1bHQgfD0gQ3J5cHRvS2V5VXNhZ2VVbndyYXBLZXk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitKU1ZhbHVlIEpTU3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMykKKyAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworCisgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9t
SlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFhbGdv
cml0aG0pIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlND
cnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yU2lnbihleGVjLCBh
bGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAg
IGlmICghcGFyYW1ldGVycykgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8Q3J5
cHRvS2V5PiBrZXkgPSB0b0NyeXB0b0tleShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Cisg
ICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAg
IGlmICgha2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VTaWduKSkgeworICAgICAgICBtX2ltcGwt
PmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNz
YWdlTGV2ZWwsICJLZXkgdXNhZ2VzIGRvZXMgbm90IGluY2x1ZGUgJ3NpZ24nIik7CisgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRh
PiBkYXRhOworICAgIGlmICghc2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKKyAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgfQorCisgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGVXaXRo
UmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRl
KGdsb2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGFsZ29yaXRobS0+c2lnbigqcGFyYW1ldGVycywgKmtleS5nZXQoKSwgZGF0YSwgc3RkOjpt
b3ZlKHByb21pc2VXcmFwcGVyKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcHJvbWlzZTsKK30KKworSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6dmVy
aWZ5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwg
NCkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgYXV0byBhbGdvcml0aG0gPSBj
cmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgaWYgKCFhbGdvcml0aG0pIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yVmVyaWZ5KGV4ZWMsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKSB7CisgICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IHRvQ3J5cHRvS2V5KGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworCisgICAgaWYgKCFrZXktPmFsbG93cyhDcnlwdG9LZXlVc2FnZVZlcmlm
eSkpIHsKKyAgICAgICAgbV9pbXBsLT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShKU01l
c3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCAiS2V5IHVzYWdlcyBkb2VzIG5vdCBpbmNs
dWRlICd2ZXJpZnknIik7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9S
VEVEX0VSUik7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIENy
eXB0b09wZXJhdGlvbkRhdGEgc2lnbmF0dXJlOworICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0
YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUp
KSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRh
PiBkYXRhOworICAgIGlmICghc2VxdWVuY2VPZkNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSkpIHsKKyAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgfQorCisgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGVXaXRo
UmVzb2x2ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlzZVdyYXBwZXIgPSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRl
KGdsb2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGFsZ29yaXRobS0+dmVyaWZ5KCpwYXJhbWV0ZXJzLCAqa2V5LmdldCgpLCBzaWduYXR1cmUs
IGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlV3JhcHBlciksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHByb21pc2U7Cit9CisKIEpTVmFsdWUgSlNTdWJ0
bGVDcnlwdG86OmRpZ2VzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZy
b21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBhdXRvIGFs
Z29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIWFsZ29yaXRobSkgewogICAgICAgICBBU1NFUlQoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1l
dGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRp
Z2VzdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdChleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIo
KSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIGlmICghcGFyYW1ldGVycykgewog
ICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKQEAgLTExNCw2ICsyODAsNzIgQEAgSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6
ZGlnZXN0KEV4ZWNTdGF0ZQogICAgIHJldHVybiBwcm9taXNlOwogfQogCitKU1ZhbHVlIEpTU3Vi
dGxlQ3J5cHRvOjppbXBvcnRLZXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKwor
ICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7CisgICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRG
cm9tSlNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgeworICAgICAg
ICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICB9CisKKyAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7CisgICAgaWYgKCFj
cnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobTsKKyAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLmlzTnVsbCgpKSB7CisgICAgICAgIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRo
bUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICAgICAg
aWYgKCFhbGdvcml0aG0pIHsKKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAvLyBUaGUgYWxnb3JpdGhtIGNhbiBwcmVzdW1hYmx5IGJlIG51bGwgd2hlbiB3ZSBjYW4g
ZGVkdWNlIGl0IGZyb20gdGhlIGtleSAoSldFIHBlcmhhcHM/KQorICAgIC8vIEJ1dCB3ZSBvbmx5
IHN1cHBvcnQgcmF3IGtleSBmb3JtYXQgcmlnaHQgbm93LgorICAgIGlmICghYWxnb3JpdGhtKSB7
CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtl
eShleGVjLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MikpOworICAgIGlmICghcGFyYW1ldGVycykgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBi
b29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSA0KSB7CisgICAgICAgIGV4dHJhY3RhYmxlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMyku
dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBDcnlwdG9LZXlVc2Fn
ZSBrZXlVc2FnZXMgPSAwOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gNSkgewor
ICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDQpLCBrZXlVc2FnZXMpKSB7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBKU1Byb21pc2UqIHByb21pc2UgPSBKU1Byb21pc2U6OmNyZWF0ZVdpdGhSZXNv
bHZlcihleGVjLT52bSgpLCBnbG9iYWxPYmplY3QoKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBy
b21pc2VXcmFwcGVyPiBwcm9taXNlV3JhcHBlciA9IFByb21pc2VXcmFwcGVyOjpjcmVhdGUoZ2xv
YmFsT2JqZWN0KCksIHByb21pc2UpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
YWxnb3JpdGhtLT5pbXBvcnRLZXkoKnBhcmFtZXRlcnMsIGtleUZvcm1hdCwgZGF0YSwgZXh0cmFj
dGFibGUsIGtleVVzYWdlcywgc3RkOjptb3ZlKHByb21pc2VXcmFwcGVyKSwgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJvbWlzZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5
cHRvLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRv
LmlkbAkocmV2aXNpb24gMTU4NDA3KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNy
eXB0by5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDUgKzMwLDggQEAKICAgICBOb0ludGVyZmFj
ZU9iamVjdCwKICAgICBPcGVyYXRpb25zTm90RGVsZXRhYmxlCiBdIGludGVyZmFjZSBTdWJ0bGVD
cnlwdG8geworICAgIFtDdXN0b21dIFByb21pc2Ugc2lnbihBbGdvcml0aG1JZGVudGlmaWVyIGFs
Z29yaXRobSwgS2V5IGtleSwgc2VxdWVuY2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7Cisg
ICAgW0N1c3RvbV0gUHJvbWlzZSB2ZXJpZnkoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0s
IEtleSBrZXksIENyeXB0b09wZXJhdGlvbkRhdGEgc2lnbmF0dXJlLCBzZXF1ZW5jZTxDcnlwdG9P
cGVyYXRpb25EYXRhPiBkYXRhKTsKICAgICBbQ3VzdG9tXSBQcm9taXNlIGRpZ2VzdChBbGdvcml0
aG1JZGVudGlmaWVyIGFsZ29yaXRobSwgc2VxdWVuY2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0
YSk7CisgICAgW0N1c3RvbV0gUHJvbWlzZSBpbXBvcnRLZXkoS2V5Rm9ybWF0IGZvcm1hdCwgQ3J5
cHRvT3BlcmF0aW9uRGF0YSBrZXlEYXRhLCBBbGdvcml0aG1JZGVudGlmaWVyPyBhbGdvcml0aG0s
IG9wdGlvbmFsIGJvb2xlYW4gZXh0cmFjdGFibGUsIG9wdGlvbmFsIEtleVVzYWdlW10ga2V5VXNh
Z2VzKTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1ITUFDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1BQy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9D
UllQVE8pCisKKyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmgiCisjaW5jbHVk
ZSAiQ3J5cHRvS2V5SE1BQy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJKU0RPTVByb21pc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBj
b25zdCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzX25hbWUgPSAiaG1hYyI7CisKK0NyeXB0b0FsZ29y
aXRobUhNQUM6OkNyeXB0b0FsZ29yaXRobUhNQUMoKQoreworfQorCitDcnlwdG9BbGdvcml0aG1I
TUFDOjp+Q3J5cHRvQWxnb3JpdGhtSE1BQygpCit7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG0+IENyeXB0b0FsZ29yaXRobUhNQUM6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+KG5ldyBDcnlwdG9BbGdvcml0aG1ITUFD
KTsKK30KKworQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBDcnlwdG9BbGdvcml0aG1ITUFDOjpp
ZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc19pZGVudGlmaWVyOworfQorCit2b2lk
IENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBDcnlwdG9LZXlGb3JtYXQgZm9ybWF0LCBjb25zdCBDcnlwdG9P
cGVyYXRpb25EYXRhJiBkYXRhLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2Fn
ZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBwcm9taXNlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoZm9ybWF0ICE9IENyeXB0b0tleUZvcm1hdDo6UmF3KSB7CisgICAg
ICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcyYgaG1hY1BhcmFtZXRlcnMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zJj4ocGFyYW1ldGVycyk7CisgICAg
VmVjdG9yPGNoYXI+IGtleURhdGE7CisgICAga2V5RGF0YS5hcHBlbmQoZGF0YS5maXJzdCwgZGF0
YS5zZWNvbmQpOworICAgIFJlZlB0cjxDcnlwdG9LZXlITUFDPiByZXN1bHQgPSBDcnlwdG9LZXlI
TUFDOjpjcmVhdGUoa2V5RGF0YSwgaG1hY1BhcmFtZXRlcnMuaGFzaCwgZXh0cmFjdGFibGUsIHVz
YWdlKTsKKyAgICBwcm9taXNlLT5mdWxmaWxsKHJlc3VsdC5yZWxlYXNlKCkpOworfQorCit2b2lk
IENyeXB0b0FsZ29yaXRobUhNQUM6OmV4cG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9LZXkmLCBzdGQ6OnVuaXF1ZV9w
dHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBOb3QgaW1w
bGVtZW50ZWQgeWV0LgorICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlw
dG9BbGdvcml0aG1ITUFDX2gKKyNkZWZpbmUgQ3J5cHRvQWxnb3JpdGhtSE1BQ19oCisKKyNpbmNs
dWRlICJDcnlwdG9BbGdvcml0aG0uaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENyeXB0b0FsZ29yaXRobUhNQUMgRklOQUwgOiBw
dWJsaWMgQ3J5cHRvQWxnb3JpdGhtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3Qgc19uYW1lOworICAgIHN0YXRpYyBjb25zdCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IHNfaWRlbnRpZmllciA9IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUM7CisKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlKCk7CisKKyAgICB2
aXJ0dWFsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIHNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYsIGNvbnN0IENyeXB0b0tleSYsIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRh
PiYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiBzaWdu
YXR1cmUsIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1bmlx
dWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZUtleShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNl
V3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1w
b3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlwdG9LZXlGb3JtYXQs
IGNvbnN0IENyeXB0b09wZXJhdGlvbkRhdGEmLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlV
c2FnZSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBleHBvcnRLZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYsIENyeXB0b0tleUZvcm1hdCwgY29uc3QgQ3J5cHRvS2V5Jiwgc3RkOjp1bmlx
dWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworCitwcml2
YXRlOgorICAgIENyeXB0b0FsZ29yaXRobUhNQUMoKTsKKyAgICB2aXJ0dWFsIH5DcnlwdG9BbGdv
cml0aG1ITUFDKCk7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykK
KworCisjZW5kaWYgLy8gQ3J5cHRvQWxnb3JpdGhtSE1BQ19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmgK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0
b0tleUhNQUMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5
cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDcnlwdG9LZXlITUFDOjpDcnlwdG9LZXlITUFDKGNvbnN0IFZlY3Rv
cjxjaGFyPiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJvb2wgZXh0cmFj
dGFibGUsIENyeXB0b0tleVVzYWdlIHVzYWdlKQorICAgIDogQ3J5cHRvS2V5KENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OkhNQUMsIENyeXB0b0tleVR5cGU6OlNlY3JldCwgZXh0cmFjdGFibGUs
IHVzYWdlKQorICAgICwgbV9oYXNoKGhhc2gpCisgICAgLCBtX2tleShrZXkpCit7Cit9CisKK0Ny
eXB0b0tleUhNQUM6On5DcnlwdG9LZXlITUFDKCkKK3sKK30KKwordm9pZCBDcnlwdG9LZXlITUFD
OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlciYgYnVpbGRlcikgY29uc3QKK3sKKyAgICBDcnlwdG9LZXk6OmJ1aWxkQWxnb3JpdGhtRGVz
Y3JpcHRpb24oYnVpbGRlcik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
RGVzY3JpcHRpb25CdWlsZGVyPiBoYXNoRGVzY3JpcHRpb25CdWlsZGVyID0gYnVpbGRlci5jcmVh
dGVFbXB0eUNsb25lKCk7CisgICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwg
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFz
aCkpOworICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIpOwor
CisgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNpemUoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5j
cHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDcnlwdG9LZXlITUFDX2gKKyNkZWZpbmUgQ3J5cHRv
S2V5SE1BQ19oCisKKyNpbmNsdWRlICJDcnlwdG9LZXkuaCIKKyNpbmNsdWRlICJDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENyeXB0b0tleUhNQUMgRklOQUwgOiBwdWJsaWMgQ3J5cHRvS2V5IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcnlwdG9LZXlITUFDPiBjcmVhdGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiBrZXksIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgYm9vbCBl
eHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENyeXB0b0tleUhNQUMoa2V5LCBoYXNoLCBleHRyYWN0YWJsZSwgdXNhZ2Up
KTsKKyAgICB9CisgICAgdmlydHVhbCB+Q3J5cHRvS2V5SE1BQygpOworCisgICAgY29uc3QgVmVj
dG9yPGNoYXI+JiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyJikgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ3J5cHRvS2V5SE1BQyhj
b25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSk7CisKKyAgICBDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIG1faGFzaDsKKyAgICBWZWN0b3I8Y2hhcj4gbV9rZXk7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykKKyNlbmRp
ZiAvLyBDcnlwdG9LZXlITUFDX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3Jp
dGhtSE1BQ01hYy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFj
L0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0Fs
Z29yaXRobUhNQUMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAi
Q3J5cHRvQWxnb3JpdGhtSG1hY1BhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCisj
aW5jbHVkZSA8Q29tbW9uQ3J5cHRvL0NvbW1vbkhNQUMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgYm9vbCBnZXRDb21tb25DcnlwdG9BbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBoYXNoRnVuY3Rpb24sIENDSG1hY0FsZ29yaXRobSYgYWxnb3JpdGhtKQorewor
ICAgIHN3aXRjaCAoaGFzaEZ1bmN0aW9uKSB7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpTSEFfMToKKyAgICAgICAgYWxnb3JpdGhtID0ga0NDSG1hY0FsZ1NIQTE7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hB
XzIyNDoKKyAgICAgICAgYWxnb3JpdGhtID0ga0NDSG1hY0FsZ1NIQTIyNDsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjU2Ogor
ICAgICAgICBhbGdvcml0aG0gPSBrQ0NIbWFjQWxnU0hBMjU2OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8zODQ6CisgICAgICAg
IGFsZ29yaXRobSA9IGtDQ0htYWNBbGdTSEEzODQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMjoKKyAgICAgICAgYWxnb3Jp
dGhtID0ga0NDSG1hY0FsZ1NIQTUxMjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBjYWxjdWxhdGVTaWduYXR1cmUoQ0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobSwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlwdG9PcGVyYXRpb25EYXRh
PiYgZGF0YSkKK3sKKyAgICBzaXplX3QgZGlnZXN0TGVuZ3RoOworICAgIHN3aXRjaCAoYWxnb3Jp
dGhtKSB7CisgICAgY2FzZSBrQ0NIbWFjQWxnU0hBMToKKyAgICAgICAgZGlnZXN0TGVuZ3RoID0g
Q0NfU0hBMV9ESUdFU1RfTEVOR1RIOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDQ0htYWNB
bGdTSEEyMjQ6CisgICAgICAgIGRpZ2VzdExlbmd0aCA9IENDX1NIQTIyNF9ESUdFU1RfTEVOR1RI
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDQ0htYWNBbGdTSEEyNTY6CisgICAgICAgIGRp
Z2VzdExlbmd0aCA9IENDX1NIQTI1Nl9ESUdFU1RfTEVOR1RIOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIGtDQ0htYWNBbGdTSEEzODQ6CisgICAgICAgIGRpZ2VzdExlbmd0aCA9IENDX1NIQTM4
NF9ESUdFU1RfTEVOR1RIOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDQ0htYWNBbGdTSEE1
MTI6CisgICAgICAgIGRpZ2VzdExlbmd0aCA9IENDX1NIQTUxMl9ESUdFU1RfTEVOR1RIOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBDQ0htYWNDb250ZXh0IGNvbnRleHQ7CisgICAgQ0NIbWFjSW5pdCgmY29u
dGV4dCwgYWxnb3JpdGhtLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMCwgc2l6ZSA9IGRhdGEuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBDQ0ht
YWNVcGRhdGUoJmNvbnRleHQsIGRhdGFbaV0uZmlyc3QsIGRhdGFbaV0uc2Vjb25kKTsKKworICAg
IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiByZXN1bHQoZGlnZXN0TGVuZ3RoKTsKKyAgICBDQ0htYWNG
aW5hbCgmY29udGV4dCwgcmVzdWx0LmRhdGEoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzaWduKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBWZWN0b3I8Q3J5
cHRvT3BlcmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4g
cHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGht
SG1hY1BhcmFtcyYgaG1hY1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdv
cml0aG1IbWFjUGFyYW1zJj4ocGFyYW1ldGVycyk7CisgICAgY29uc3QgQ3J5cHRvS2V5SE1BQyYg
aG1hY0tleSA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleUhNQUMmPihrZXkpOworCisgICAg
Q0NIbWFjQWxnb3JpdGhtIGFsZ29yaXRobTsKKyAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29y
aXRobShobWFjUGFyYW1ldGVycy5oYXNoLCBhbGdvcml0aG0pKSB7CisgICAgICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8dW5z
aWduZWQgY2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1h
Y0tleS5rZXkoKSwgZGF0YSk7CisKKyAgICBwcm9taXNlLT5mdWxmaWxsKHNpZ25hdHVyZSk7Cit9
CisKK3ZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6dmVyaWZ5KGNvbnN0IENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENyeXB0b0tleSYga2V5LCBjb25zdCBDcnlw
dG9PcGVyYXRpb25EYXRhJiBleHBlY3RlZFNpZ25hdHVyZSwgY29uc3QgVmVjdG9yPENyeXB0b09w
ZXJhdGlvbkRhdGE+JiBkYXRhLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+IHByb21p
c2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQ
YXJhbXMmIGhtYWNQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGht
SG1hY1BhcmFtcyY+KHBhcmFtZXRlcnMpOworICAgIGNvbnN0IENyeXB0b0tleUhNQUMmIGhtYWNL
ZXkgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9LZXlITUFDJj4oa2V5KTsKKworICAgIENDSG1h
Y0FsZ29yaXRobSBhbGdvcml0aG07CisgICAgaWYgKCFnZXRDb21tb25DcnlwdG9BbGdvcml0aG0o
aG1hY1BhcmFtZXRlcnMuaGFzaCwgYWxnb3JpdGhtKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQ
T1JURURfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+IHNpZ25hdHVyZSA9IGNhbGN1bGF0ZVNpZ25hdHVyZShhbGdvcml0aG0sIGhtYWNLZXku
a2V5KCksIGRhdGEpOworCisgICAgYm9vbCByZXN1bHQgPSBzaWduYXR1cmUuc2l6ZSgpID09IGV4
cGVjdGVkU2lnbmF0dXJlLnNlY29uZCAmJiAhbWVtY21wKHNpZ25hdHVyZS5kYXRhKCksIGV4cGVj
dGVkU2lnbmF0dXJlLmZpcnN0LCBzaWduYXR1cmUuc2l6ZSgpKTsKKworICAgIHByb21pc2UtPmZ1
bGZpbGwocmVzdWx0KTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpnZW5lcmF0ZUtl
eShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgYm9vbCAvKmV4dHJhY3RhYmxlKi8s
IENyeXB0b0tleVVzYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkLgorICAgIGVjID0gTk9U
X1NVUFBPUlRFRF9FUlI7Cit9CisKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQ
VE8pCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0
b0FsZ29yaXRobUhNQUNNYWMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMg
LTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnlNYWMuY3BwCShyZXZpc2lvbiAxNTg0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTQgKzI4LDE0IEBACiAKICNpZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKIAotLy8jaW5jbHVk
ZSAiQ3J5cHRvQWxnb3JpdGhtSE1BQy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhNQUMu
aCIKICNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1TSEExLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdm9pZCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6cGxhdGZvcm1SZWdpc3RlckFsZ29y
aXRobXMoKQogewotLy8gICAgcmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtSE1BQzo6
c19uYW1lLCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29yaXRo
bUhNQUM6OmNyZWF0ZSk7CisgICAgcmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGhtSE1B
Qzo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1ITUFDOjpzX2lkZW50aWZpZXIsIENyeXB0b0FsZ29y
aXRobUhNQUM6OmNyZWF0ZSk7CiAgICAgcmVnaXN0ZXJBbGdvcml0aG0oQ3J5cHRvQWxnb3JpdGht
U0hBMTo6c19uYW1lLCBDcnlwdG9BbGdvcml0aG1TSEExOjpzX2lkZW50aWZpZXIsIENyeXB0b0Fs
Z29yaXRobVNIQTE6OmNyZWF0ZSk7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODQwOCkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisy
MDEzLTEwLTMxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIE1hYyBXZWJDcnlwdG8gaW1wbGVtZW50YXRpb24gb2YgSE1BQyBpbXBvcnRLZXkvc2ln
bi92ZXJpZnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMzU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWw6IEFkZGVkLgorCiAy
MDEzLTEwLTMxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uZkBnbWFpbC5jb20+CiAKICAgICAgICAg
Q29ycmVjdCB0aGUgZWxhcHNlZFRpbWUgY2FsY3VsYXRpb24gaW4gU1ZHIGFuaW1hdGlvbnMKSW5k
ZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVy
aWZ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMCBAQAorVGVzdCBjcnlwdG8uc3VidGxlLmRpZ2VzdC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK0ltcG9ydGluZyBhIHJhdyBITUFDIGtleSBmcm9tIHN0cmluZyBsaXRlcmFs
Li4uCitQQVNTIGtleS50eXBlIGlzICdzZWNyZXQnCitQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0
cnVlCitQQVNTIGtleS5hbGdvcml0aG0ubmFtZSBpcyAnaG1hYycKK1BBU1Mga2V5LmFsZ29yaXRo
bS5sZW5ndGggaXMgMQorUEFTUyBrZXkuYWxnb3JpdGhtLmhhc2gubmFtZSBpcyAnc2hhLTEnCitQ
QVNTIGtleS51c2FnZXMgaXMgWydzaWduJywgJ3ZlcmlmeSddCitVc2luZyB0aGUga2V5IHRvIHNp
Z24gJ2ZvbycuLi4KKyAgICA9IFtiZSBiYiBjMCAyZSA0NiBiMCBmOCAxMSA4MyBmNCAwYyAyNSBk
YyBlMiAzZSA1MCA0NSBkNiA1NSAxOV0KK1ZlcmlmeWluZyB0aGUgc2lnbmF0dXJlLi4uCitQQVNT
IHZlcmlmaWNhdGlvblJlc3VsdCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCitu
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnkuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGNyeXB0by5zdWJ0bGUuZGlnZXN0LiIpOwor
Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKCF3aW5kb3cuc3VidGxlKQorICAgIHdpbmRv
dy5jcnlwdG8uc3VidGxlID0gd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7CisKK3ZhciBobWFj
S2V5ID0gYXNjaWlUb0FycmF5QnVmZmVyKCdhJyk7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOwor
CitkZWJ1ZygiSW1wb3J0aW5nIGEgcmF3IEhNQUMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4i
KTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLCBobWFjS2V5LCB7bmFtZTogJ2htYWMn
LCBoYXNoOiB7bmFtZTogJ3NoYS0xJ319LCBleHRyYWN0YWJsZSwgWyJzaWduIiwgInZlcmlmeSJd
KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3VsdDsKKyAgICBzaG91bGRC
ZSgia2V5LnR5cGUiLCAiJ3NlY3JldCciKTsKKyAgICBzaG91bGRCZSgia2V5LmV4dHJhY3RhYmxl
IiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwgIidobWFjJyIp
OworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICIxIik7IC8vIFNlZSA8aHR0
cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMzA5OD4uCisgICAg
c2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidzaGEtMSciKTsKKyAgICBzaG91
bGRCZSgia2V5LnVzYWdlcyIsICJbJ3NpZ24nLCAndmVyaWZ5J10iKTsKKworICAgIGRlYnVnKCJV
c2luZyB0aGUga2V5IHRvIHNpZ24gJ2ZvbycuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRs
ZS5zaWduKGtleS5hbGdvcml0aG0sIGtleSwgW2FzY2lpVG9BcnJheUJ1ZmZlcignZm9vJyldKTsK
K30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgcHJpbnRBY2NlcHRlZFJlc3VsdChyZXN1
bHQpOworCisgICAgZGVidWcoIlZlcmlmeWluZyB0aGUgc2lnbmF0dXJlLi4uIik7CisgICAgcmV0
dXJuIGNyeXB0by5zdWJ0bGUudmVyaWZ5KGtleS5hbGdvcml0aG0sIGtleSwgcmVzdWx0LCBbYXNj
aWlUb0FycmF5QnVmZmVyKCdmb28nKV0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAg
ICB2ZXJpZmljYXRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoInZlcmlmaWNhdGlv
blJlc3VsdCIsICJ0cnVlIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0Pgor
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlw
dG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnkuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5Cg==
</data>
<flag name="review"
          id="238485"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215720</attachid>
            <date>2013-10-31 23:43:44 -0700</date>
            <delta_ts>2013-11-01 09:57:19 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>AddHMAC.txt</filename>
            <type>text/plain</type>
            <size>44068</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODQwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTEwLTMxICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIE1hYyBXZWJDcnlw
dG8gaW1wbGVtZW50YXRpb24gb2YgSE1BQyBpbXBvcnRLZXkvc2lnbi92ZXJpZnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzU5OAorCisgICAgICAg
IFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KKworICAgICAgICBUZXN0OiBjcnlwdG8vc3Vi
dGxlL2htYWMtc2lnbi12ZXJpZnkuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3Vz
dG9tLmNwcDogQWRkZWQgcHJvcGVydHkgc3ZuOmVvbC1zdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyeXB0b09w
ZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcnlwdG9LZXlGb3Jt
YXRGcm9tSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcnlwdG9LZXlVc2FnZXNGcm9tSlNW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0bzo6c2lnbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1N1YnRsZUNyeXB0bzo6dmVyaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U3VidGxlQ3J5cHRvOjpkaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNTdWJ0bGVDcnlwdG86
OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL1N1YnRsZUNyeXB0by5pZGw6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6Q3J5cHRvQWxnb3JpdGhtSE1BQyk6
CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjp+Q3J5cHRvQWxnb3JpdGht
SE1BQyk6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6aWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6ZXhwb3J0S2V5KToKKyAgICAgICAgKiBjcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmg6IEFkZGVkLgorICAgICAgICAqIGNy
eXB0by9rZXlzOiBBZGRlZC4KKyAgICAgICAgKiBjcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9LZXlITUFDOjpDcnlwdG9LZXlITUFD
KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6On5DcnlwdG9LZXlITUFDKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0tleUhNQUM6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24p
OgorICAgICAgICAqIGNyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuaDogQWRkZWQuCisgICAgICAg
ICogY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpnZXRDb21tb25DcnlwdG9BbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsY3VsYXRlU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhN
QUM6OnNpZ24pOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6dmVyaWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhNQUM6OmdlbmVyYXRlS2V5KToK
KyAgICAgICAgKiBjcnlwdG8vbWFjL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5TWFjLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpwbGF0Zm9ybVJlZ2lzdGVy
QWxnb3JpdGhtcyk6CisKIDIwMTMtMTAtMzEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb252ZXJ0IHNvbWUgSW5zcGVjdG9y
T2JqZWN0IG1lbWJlciB2YXJpYWJsZXMgdG8gSGFzaFNldC9IYXNoTWFwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNTg0MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU1MDUsNiArNTUwNSwxMSBAQAogCQlFMTI1RjgyQjE4
MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgyOTE4MjJDRkVDMDBEODRDRDkg
LyogQ3J5cHRvQWxnb3JpdGhtU0hBMS5jcHAgKi87IH07CiAJCUUxMjVGODJDMTgyMkNGRUMwMEQ4
NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI1RjgyQTE4MjJDRkVDMDBEODRDRDkgLyogQ3J5cHRvQWxn
b3JpdGhtU0hBMS5oICovOyB9OwogCQlFMTI1RjgyRTE4MjJDRkZGMDBEODRDRDkgLyogQ3J5cHRv
QWxnb3JpdGhtU0hBMU1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTI1RjgyRDE4MjJDRkZGMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtU0hB
MU1hYy5jcHAgKi87IH07CisJCUUxMjVGODMxMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdv
cml0aG1ITUFDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxMjVGODJGMTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDLmNwcCAq
LzsgfTsKKwkJRTEyNUY4MzIxODIyRjExQjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobUhNQUMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODMw
MTgyMkYxMUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDLmggKi87IH07CisJCUUxMjVG
ODM1MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODMzMTgyMkYxOEEwMEQ4NENEOSAv
KiBDcnlwdG9LZXlITUFDLmNwcCAqLzsgfTsKKwkJRTEyNUY4MzYxODIyRjE4QTAwRDg0Q0Q5IC8q
IENyeXB0b0tleUhNQUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxMjVGODM0MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFDLmggKi87IH07
CisJCUUxMjVGODM4MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjVGODM3
MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAqLzsgfTsKIAkJ
RTEyNzE5QzcwRUVFQzE2ODAwRjYxMjEzIC8qIE5hdmlnYXRvckJhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjcxOUM2MEVFRUMxNjgwMEY2MTIx
MyAvKiBOYXZpZ2F0b3JCYXNlLmggKi87IH07CiAJCUUxMjcxOUNBMEVFRUMyMTMwMEY2MTIxMyAv
KiBOYXZpZ2F0b3JCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxMjcxOUM5MEVFRUMyMTMwMEY2MTIxMyAvKiBOYXZpZ2F0b3JCYXNlLmNwcCAq
LzsgfTsKIAkJRTEyNzFBMEIwRUVFQzc3QTAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNzFBMEEwRUVF
Qzc3QTAwRjYxMjEzIC8qIFdvcmtlck5hdmlnYXRvci5oICovOyB9OwpAQCAtMTI1MTIsNiArMTI1
MTcsMTEgQEAKIAkJRTEyNUY4MjkxODIyQ0ZFQzAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNI
QTEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3J5cHRvQWxnb3Jp
dGhtU0hBMS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjVGODJBMTgyMkNG
RUMwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENyeXB0b0FsZ29yaXRobVNIQTEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTEyNUY4MkQxODIyQ0ZGRjAwRDg0Q0Q5IC8qIENyeXB0b0FsZ29yaXRobVNIQTFN
YWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3J5cHRvQWxnb3Jp
dGhtU0hBMU1hYy5jcHA7IHBhdGggPSBtYWMvQ3J5cHRvQWxnb3JpdGhtU0hBMU1hYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODJGMTgyMkYxMUIwMEQ4NENEOSAvKiBD
cnlwdG9BbGdvcml0aG1ITUFDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENyeXB0b0FsZ29yaXRobUhNQUMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMTI1RjgzMDE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcnlwdG9BbGdvcml0aG1ITUFDLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMjVGODMzMTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlw
dG9LZXlITUFDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0
b0tleUhNQUMuY3BwOyBwYXRoID0ga2V5cy9DcnlwdG9LZXlITUFDLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTEyNUY4MzQxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhN
QUMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3J5cHRvS2V5SE1BQy5oOyBw
YXRoID0ga2V5cy9DcnlwdG9LZXlITUFDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxMjVGODM3MTgyMkYxRUIwMEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDTWFjLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENyeXB0b0FsZ29yaXRobUhNQUNN
YWMuY3BwOyBwYXRoID0gbWFjL0NyeXB0b0FsZ29yaXRobUhNQUNNYWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMTI3MTlDNjBFRUVDMTY4MDBGNjEyMTMgLyogTmF2aWdhdG9y
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjcxOUM5MEVFRUMyMTMwMEY2MTIxMyAv
KiBOYXZpZ2F0b3JCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5hdmlnYXRvckJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI3MUEw
QTBFRUVDNzdBMDBGNjEyMTMgLyogV29ya2VyTmF2aWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdvcmtlck5hdmlnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjAxMzcsNiArMjAxNDcsNyBAQAogCQlFMTcyQUY3MTE4MEYzNDM0MDBGQkFEQjkg
LyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlF
MTI1RjgzNzE4MjJGMUVCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgKi8s
CiAJCQkJRTFCQjg0QUMxODIyQ0E3NDAwNTI1MDQzIC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
TWFjLmNwcCAqLywKIAkJCQlFMTI1RjgyRDE4MjJDRkZGMDBEODRDRDkgLyogQ3J5cHRvQWxnb3Jp
dGhtU0hBMU1hYy5jcHAgKi8sCiAJCQkpOwpAQCAtMjAxNDYsNiArMjAxNTcsOCBAQAogCQlFMTcy
QUY3QzE4MEYzQjBEMDBGQkFEQjkgLyogYWxnb3JpdGhtcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTEyNUY4MkYxODIyRjExQjAwRDg0Q0Q5IC8qIENy
eXB0b0FsZ29yaXRobUhNQUMuY3BwICovLAorCQkJCUUxMjVGODMwMTgyMkYxMUIwMEQ4NENEOSAv
KiBDcnlwdG9BbGdvcml0aG1ITUFDLmggKi8sCiAJCQkJRTEyNUY4MjkxODIyQ0ZFQzAwRDg0Q0Q5
IC8qIENyeXB0b0FsZ29yaXRobVNIQTEuY3BwICovLAogCQkJCUUxMjVGODJBMTgyMkNGRUMwMEQ4
NENEOSAvKiBDcnlwdG9BbGdvcml0aG1TSEExLmggKi8sCiAJCQkpOwpAQCAtMjAxNTUsNiArMjAx
NjgsOCBAQAogCQlFMTlEQTI5RDE4MTk5NUNFMDAwODhCQzggLyoga2V5cyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTEyNUY4MzMxODIyRjE4QTAwRDg0
Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwICovLAorCQkJCUUxMjVGODM0MTgyMkYxOEEwMEQ4NENE
OSAvKiBDcnlwdG9LZXlITUFDLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGtleXM7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjIxNTAsNiArMjIxNjUsNyBAQAogCQkJCTg1RDM4OUIy
MEE5OTFBN0YwMDI4MjE0NSAvKiBET01BdHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUU3MTE4
RDBBQzVENTM1MDA1MzI3MEYgLyogRE9NQXR0ckludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzk0NkVFRjEwN0ZEQkFDMDA4NTcxOTMgLyogRE9NQmVmb3JlTG9hZEV2ZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFMTI1RjgzNjE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkUyRDk5RTcxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJFMkQ5OUVBMTBFMkJDMzgwMDQ5NjMzNyAvKiBET01CbG9i
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDg5Q0Q3MEE5OEM0MjgwMEEyNzVBQSAv
KiBET01DREFUQVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjQzOTgsNiArMjQ0MTQsNyBA
QAogCQkJCUIyMjI3QTJBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdHcmFkaWVudEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMjI3QUI2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdHcmFwaGlj
c0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MEZCRjJCMEQ5QUYwNDcwMDhGQzI5MiAv
KiBTVkdIS2VybkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMjVGODMyMTgyMkYxMUIw
MEQ4NENEOSAvKiBDcnlwdG9BbGdvcml0aG1ITUFDLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3
MTlCQTE4MTEwNkUwMDAxNkRDNTEgLyogSURCQW55LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjU1
OTlBNDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
QUU3QzE2MTdEMUJCOTUwMDA5RkIzMSAvKiBFbGVtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
LApAQCAtMjU0OTYsNiArMjU1MTMsNyBAQAogCQkJCUEyOTUzMkNGMTVERDVFMTcwMDQ2OUVCQyAv
KiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
QkM2QTIwMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5N0JDNkEyMzE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUUxMjVGODM1MTgyMkYxOEEwMEQ4NENEOSAvKiBDcnlwdG9LZXlITUFD
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVGMkM1MTdGMEZEMzUwMEU0RkExNiAvKiBKU0lE
QkluZGV4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMTZDRkQzMTY5RDFERUQwMEQzQTBDNyAv
KiBEYXRhYmFzZUJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzY5REExNTA1RjA3
NjAwMUI3NEFDIC8qIERhdGFiYXNlQmFja2VuZEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
NTYzNyw2ICsyNTY1NSw3IEBACiAJCQkJRjVDMDQxRTQwRkZDQTk2RDAwODM5RDRBIC8qIERPTUhU
TUxEYXRhTGlzdEVsZW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTU3QThFODE4MTg0QzY3
MDA5RjgyMUQgLyogSlNDcnlwdG9LZXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcw
NTg1MjMxN0ZEQzE0MDAwNUYyQkNCIC8qIE1lZGlhVHJhY2tDb25zdHJhaW50cy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlFMTI1RjgzMTE4MjJGMTFCMDBEODRDRDkgLyogQ3J5cHRvQWxnb3JpdGht
SE1BQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEMzU5RDc5MjEyOUNBM0MwMDAwNkU1RDIgLyog
RE9NSFRNTERldGFpbHNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVCQTREMEMwQUE2
ODg2ODAwODgwNTJEIC8qIERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJODVCQTREMEUwQUE2ODg2ODAwODgwNTJEIC8qIERPTUhUTUxEaXZFbGVtZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNjA3Niw2ICsyNjA5NSw3IEBACiAJCQkJOUI3RTc4QkQxNkYxNkND
NjAwMTI2OTE0IC8qIEhUTUxUcmVlQnVpbGRlclNpbXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBOEVBNzlGMzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTFVMaXN0RWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlFNDQ2MTNBQTBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMTI1RjgzODE4MjJGMUVCMDBEODRDRDkgLyog
Q3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NENzRFNTBB
NEM4RERGMDA1RkRBNkQgLyogSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzdCMzg3OTEyMjg4M0U5MDBCODFGRjggLyogSFRNTFZpZXdTb3VyY2VQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEI4QzU2RDQwRjI4NjI3RjAwMDUwMkUxIC8qIEhUVFBI
ZWFkZXJNYXAuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNTg0MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG0+IAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiByZXN1bHQoQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVyKSk7CisgICAgYXV0byBy
ZXN1bHQgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKGFsZ29yaXRo
bUlkZW50aWZpZXIpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC03OCwxOCAr
NzgsMTg0IEBAIHN0YXRpYyBib29sIHNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRpb25EYXQKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvT3BlcmF0aW9uRGF0YSYg
cmVzdWx0KQoreworICAgIGlmIChBcnJheUJ1ZmZlciogYnVmZmVyID0gdG9BcnJheUJ1ZmZlcih2
YWx1ZSkpCisgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWFrZV9wYWlyKHN0YXRpY19jYXN0PGNoYXIq
PihidWZmZXItPmRhdGEoKSksIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBlbHNlIGlmIChS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBidWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFs
dWUpKQorICAgICAgICByZXN1bHQgPSBzdGQ6Om1ha2VfcGFpcihzdGF0aWNfY2FzdDxjaGFyKj4o
YnVmZmVyVmlldy0+YmFzZUFkZHJlc3MoKSksIGJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsICJPbmx5IEFycmF5QnVmZmVy
IGFuZCBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0cyBjYW4gYmUgcGFydCBvZiBDcnlwdG9PcGVyYXRp
b25EYXRhIHNlcXVlbmNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5Rm9ybWF0JiByZXN1bHQpCit7
CisgICAgU3RyaW5nIGtleUZvcm1hdFN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJyYXciKQorICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzsKKyAgICBlbHNlIGlmIChrZXlGb3JtYXRTdHJpbmcgPT0g
InBrY3M4IikKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5Rm9ybWF0OjpQS0NTODsKKyAgICBl
bHNlIGlmIChrZXlGb3JtYXRTdHJpbmcgPT0gInNwa2kiKQorICAgICAgICByZXN1bHQgPSBDcnlw
dG9LZXlGb3JtYXQ6OlNQS0k7CisgICAgZWxzZSBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJqd2si
KQorICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlGb3JtYXQ6OkpXSzsKKyAgICBlbHNlIHsKKyAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyeXB0b0tleVVzYWdlc0Zyb21K
U1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgQ3J5cHRvS2V5VXNhZ2UmIHJl
c3VsdCkKK3sKKyAgICBpZiAoIWlzSlNBcnJheSh2YWx1ZSkpIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1bHQg
PSAwOworCisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFsdWUpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgSlND
OjpKU1ZhbHVlIGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoZXhlYywgaSk7CisgICAgICAgIFN0
cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICh1c2FnZVN0cmluZyA9PSAiZW5jcnlwdCIpCisgICAgICAgICAgICBy
ZXN1bHQgfD0gQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0OworICAgICAgICBlbHNlIGlmICh1c2FnZVN0
cmluZyA9PSAiZGVjcnlwdCIpCisgICAgICAgICAgICByZXN1bHQgfD0gQ3J5cHRvS2V5VXNhZ2VE
ZWNyeXB0OworICAgICAgICBlbHNlIGlmICh1c2FnZVN0cmluZyA9PSAic2lnbiIpCisgICAgICAg
ICAgICByZXN1bHQgfD0gQ3J5cHRvS2V5VXNhZ2VTaWduOworICAgICAgICBlbHNlIGlmICh1c2Fn
ZVN0cmluZyA9PSAidmVyaWZ5IikKKyAgICAgICAgICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2Fn
ZVZlcmlmeTsKKyAgICAgICAgZWxzZSBpZiAodXNhZ2VTdHJpbmcgPT0gImRlcml2ZUtleSIpCisg
ICAgICAgICAgICByZXN1bHQgfD0gQ3J5cHRvS2V5VXNhZ2VEZXJpdmVLZXk7CisgICAgICAgIGVs
c2UgaWYgKHVzYWdlU3RyaW5nID09ICJkZXJpdmVCaXRzIikKKyAgICAgICAgICAgIHJlc3VsdCB8
PSBDcnlwdG9LZXlVc2FnZURlcml2ZUJpdHM7CisgICAgICAgIGVsc2UgaWYgKHVzYWdlU3RyaW5n
ID09ICJ3cmFwS2V5IikKKyAgICAgICAgICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZVdyYXBL
ZXk7CisgICAgICAgIGVsc2UgaWYgKHVzYWdlU3RyaW5nID09ICJ1bndyYXBLZXkiKQorICAgICAg
ICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlVW53cmFwS2V5OworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworSlNWYWx1ZSBKU1N1YnRsZUNyeXB0bzo6c2lnbihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJv
bUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghYWxn
b3JpdGhtKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oZXhlYywg
YWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBpZiAoIXBhcmFtZXRlcnMpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgUmVmUHRyPENy
eXB0b0tleT4ga2V5ID0gdG9DcnlwdG9LZXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwor
ICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAg
ICBpZiAoIWtleS0+YWxsb3dzKENyeXB0b0tleVVzYWdlU2lnbikpIHsKKyAgICAgICAgbV9pbXBs
LT5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVz
c2FnZUxldmVsLCAiS2V5IHVzYWdlcyBkb2VzIG5vdCBpbmNsdWRlICdzaWduJyIpOworICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0
YT4gZGF0YTsKKyAgICBpZiAoIXNlcXVlbmNlT2ZDcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7CisgICAgICAgIEFT
U0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIH0KKworICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlV2l0
aFJlc29sdmVyKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdCgpKTsKKyAgICBhdXRvIHByb21pc2VX
cmFwcGVyID0gUHJvbWlzZVdyYXBwZXI6OmNyZWF0ZShnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7
CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhbGdvcml0aG0tPnNpZ24oKnBhcmFt
ZXRlcnMsICprZXkuZ2V0KCksIGRhdGEsIHN0ZDo6bW92ZShwcm9taXNlV3JhcHBlciksIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIHByb21pc2U7Cit9
CisKK0pTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDQpCisgICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKworICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUo
ZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghYWxnb3JpdGhtKSB7
CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeShleGVjLCBhbGdvcml0
aG0tPmlkZW50aWZpZXIoKSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICgh
cGFyYW1ldGVycykgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8Q3J5cHRvS2V5
PiBrZXkgPSB0b0NyeXB0b0tleShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYg
KCFrZXkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIGlmICgh
a2V5LT5hbGxvd3MoQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSB7CisgICAgICAgIG1faW1wbC0+ZG9j
dW1lbnQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VM
ZXZlbCwgIktleSB1c2FnZXMgZG9lcyBub3QgaW5jbHVkZSAndmVyaWZ5JyIpOworICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBDcnlwdG9PcGVyYXRpb25EYXRhIHNpZ25hdHVy
ZTsKKyAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJlKSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisK
KyAgICBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YTsKKyAgICBpZiAoIXNlcXVlbmNl
T2ZDcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMyksIGRhdGEpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIEpTUHJvbWlzZSog
cHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlV2l0aFJlc29sdmVyKGV4ZWMtPnZtKCksIGdsb2Jh
bE9iamVjdCgpKTsKKyAgICBhdXRvIHByb21pc2VXcmFwcGVyID0gUHJvbWlzZVdyYXBwZXI6OmNy
ZWF0ZShnbG9iYWxPYmplY3QoKSwgcHJvbWlzZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBhbGdvcml0aG0tPnZlcmlmeSgqcGFyYW1ldGVycywgKmtleSwgc2lnbmF0dXJlLCBk
YXRhLCBzdGQ6Om1vdmUocHJvbWlzZVdyYXBwZXIpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIH0KKworICAgIHJldHVybiBwcm9taXNlOworfQorCiBKU1ZhbHVlIEpTU3VidGxl
Q3J5cHRvOjpkaWdlc3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAyKQogICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9t
SlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgYXV0byBhbGdv
cml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7CiAgICAgaWYgKCFhbGdvcml0aG0pIHsKICAgICAgICAgQVNTRVJUKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHBhcmFtZXRl
cnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdl
c3QoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCks
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKICAg
ICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkBAIC0xMTQsNiArMjgwLDcyIEBAIEpTVmFsdWUgSlNTdWJ0bGVDcnlwdG86OmRp
Z2VzdChFeGVjU3RhdGUKICAgICByZXR1cm4gcHJvbWlzZTsKIH0KIAorSlNWYWx1ZSBKU1N1YnRs
ZUNyeXB0bzo6aW1wb3J0S2V5KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPCAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAg
ICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OworICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJv
bUpTVmFsdWUoZXhlYywgZXhlYy0+YXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKKyAgICAgICAg
QVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOworICAgIGlmICghY3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLCBkYXRhKSkgeworICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q3J5cHRvQWxnb3JpdGhtPiBhbGdvcml0aG07CisgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgyKS5pc051bGwoKSkgeworICAgICAgICBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1G
cm9tSlNWYWx1ZShleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7CisgICAgICAgIGlm
ICghYWxnb3JpdGhtKSB7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgLy8gVGhlIGFsZ29yaXRobSBjYW4gcHJlc3VtYWJseSBiZSBudWxsIHdoZW4gd2UgY2FuIGRl
ZHVjZSBpdCBmcm9tIHRoZSBrZXkgKEpXRSBwZXJoYXBzPykKKyAgICAvLyBCdXQgd2Ugb25seSBz
dXBwb3J0IHJhdyBrZXkgZm9ybWF0IHJpZ2h0IG5vdy4KKyAgICBpZiAoIWFsZ29yaXRobSkgewor
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXko
ZXhlYywgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
KTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgYm9v
bCBleHRyYWN0YWJsZSA9IGZhbHNlOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
NCkgeworICAgICAgICBleHRyYWN0YWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDMpLnRv
Qm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgQ3J5cHRvS2V5VXNhZ2Ug
a2V5VXNhZ2VzID0gMDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDUpIHsKKyAg
ICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShleGVjLCBleGVjLT5hcmd1bWVu
dCg0KSwga2V5VXNhZ2VzKSkgeworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGVXaXRoUmVzb2x2
ZXIoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0KCkpOworICAgIGF1dG8gcHJvbWlzZVdyYXBwZXIg
PSBQcm9taXNlV3JhcHBlcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCgpLCBwcm9taXNlKTsKKworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGFsZ29yaXRobS0+aW1wb3J0S2V5KCpwYXJhbWV0
ZXJzLCBrZXlGb3JtYXQsIGRhdGEsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHN0ZDo6bW92ZShw
cm9taXNlV3JhcHBlciksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHByb21pc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRs
ZUNyeXB0b0N1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5pZGwJKHJldmlzaW9uIDE1ODQwNykKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw1ICszMCw4IEBACiAgICAgTm9JbnRlcmZhY2VPYmplY3QsCiAgICAgT3BlcmF0aW9uc05vdERl
bGV0YWJsZQogXSBpbnRlcmZhY2UgU3VidGxlQ3J5cHRvIHsKKyAgICBbQ3VzdG9tXSBQcm9taXNl
IHNpZ24oQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIEtleSBrZXksIHNlcXVlbmNlPENy
eXB0b09wZXJhdGlvbkRhdGE+IGRhdGEpOworICAgIFtDdXN0b21dIFByb21pc2UgdmVyaWZ5KEFs
Z29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtLCBLZXkga2V5LCBDcnlwdG9PcGVyYXRpb25EYXRh
IHNpZ25hdHVyZSwgc2VxdWVuY2U8Q3J5cHRvT3BlcmF0aW9uRGF0YT4gZGF0YSk7CiAgICAgW0N1
c3RvbV0gUHJvbWlzZSBkaWdlc3QoQWxnb3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG0sIHNlcXVl
bmNlPENyeXB0b09wZXJhdGlvbkRhdGE+IGRhdGEpOworICAgIFtDdXN0b21dIFByb21pc2UgaW1w
b3J0S2V5KEtleUZvcm1hdCBmb3JtYXQsIENyeXB0b09wZXJhdGlvbkRhdGEga2V5RGF0YSwgQWxn
b3JpdGhtSWRlbnRpZmllcj8gYWxnb3JpdGhtLCBvcHRpb25hbCBib29sZWFuIGV4dHJhY3RhYmxl
LCBvcHRpb25hbCBLZXlVc2FnZVtdIGtleVVzYWdlcyk7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1ITUFDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobUhN
QUMuaCIKKworI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorCisjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtSG1hY1BhcmFtcy5oIgorI2luY2x1ZGUgIkNyeXB0b0tleUhNQUMuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY29uc3QgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6c19u
YW1lID0gImhtYWMiOworCitDcnlwdG9BbGdvcml0aG1ITUFDOjpDcnlwdG9BbGdvcml0aG1ITUFD
KCkKK3sKK30KKworQ3J5cHRvQWxnb3JpdGhtSE1BQzo6fkNyeXB0b0FsZ29yaXRobUhNQUMoKQor
eworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBDcnlwdG9BbGdvcml0aG1I
TUFDOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtPihuZXcgQ3J5cHRvQWxnb3JpdGhtSE1BQyk7Cit9CisKK0NyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHNfaWRlbnRpZmllcjsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRL
ZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYgcGFyYW1ldGVycywgQ3J5cHRvS2V5
Rm9ybWF0IGZvcm1hdCwgY29uc3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgZGF0YSwgYm9vbCBleHRy
YWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3Jh
cHBlcj4gcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGZvcm1hdCAhPSBD
cnlwdG9LZXlGb3JtYXQ6OlJhdykgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IENyeXB0b0FsZ29yaXRobUhtYWNQYXJh
bXMmIGhtYWNQYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1h
Y1BhcmFtcyY+KHBhcmFtZXRlcnMpOworICAgIFZlY3RvcjxjaGFyPiBrZXlEYXRhOworICAgIGtl
eURhdGEuYXBwZW5kKGRhdGEuZmlyc3QsIGRhdGEuc2Vjb25kKTsKKyAgICBSZWZQdHI8Q3J5cHRv
S2V5SE1BQz4gcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6Y3JlYXRlKGtleURhdGEsIGhtYWNQYXJh
bWV0ZXJzLmhhc2gsIGV4dHJhY3RhYmxlLCB1c2FnZSk7CisgICAgcHJvbWlzZS0+ZnVsZmlsbChy
ZXN1bHQucmVsZWFzZSgpKTsKK30KKwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjpleHBvcnRL
ZXkoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIENyeXB0b0tleUZvcm1hdCwgY29u
c3QgQ3J5cHRvS2V5Jiwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KKyAgICBlYyA9IE5PVF9T
VVBQT1JURURfRVJSOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBUTykK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUhNQUMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMg
LTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1ITUFDLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ3J5cHRvQWxnb3JpdGhtSE1BQ19oCisjZGVmaW5lIENy
eXB0b0FsZ29yaXRobUhNQUNfaAorCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtLmgiCisKKyNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
cnlwdG9BbGdvcml0aG1ITUFDIEZJTkFMIDogcHVibGljIENyeXB0b0FsZ29yaXRobSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfbmFtZTsKKyAgICBzdGF0aWMgY29u
c3QgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBzX2lkZW50aWZpZXIgPSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpITUFDOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG0+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCBDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyIGlkZW50aWZpZXIoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzaWdu
KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBjb25zdCBDcnlwdG9LZXkmLCBjb25z
dCBWZWN0b3I8Q3J5cHRvT3BlcmF0aW9uRGF0YT4mLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdy
YXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHZlcmlm
eShjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzJiwgY29uc3QgQ3J5cHRvS2V5JiwgY29u
c3QgQ3J5cHRvT3BlcmF0aW9uRGF0YSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3Bl
cmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2Vw
dGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVLZXkoY29uc3Qg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlLCBzdGQ6OnVuaXF1ZV9wdHI8UHJvbWlzZVdyYXBwZXI+LCBFeGNlcHRpb25Db2RlJikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGltcG9ydEtleShjb25zdCBDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzJiwgQ3J5cHRvS2V5Rm9ybWF0LCBjb25zdCBDcnlwdG9PcGVyYXRpb25EYXRhJiwg
Ym9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNl
V3JhcHBlcj4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhw
b3J0S2V5KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBDcnlwdG9LZXlGb3JtYXQs
IGNvbnN0IENyeXB0b0tleSYsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2Vw
dGlvbkNvZGUmKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDcnlwdG9BbGdvcml0aG1ITUFD
KCk7CisgICAgdmlydHVhbCB+Q3J5cHRvQWxnb3JpdGhtSE1BQygpOworfTsKKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKworI2VuZGlmIC8vIENyeXB0b0FsZ29yaXRo
bUhNQUNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDcnlwdG9LZXlITUFDLmgiCisKKyNpZiBFTkFCTEUoU1VC
VExFX0NSWVBUTykKKworI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRl
ci5oIgorI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3J5cHRvS2V5SE1B
Qzo6Q3J5cHRvS2V5SE1BQyhjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBoYXNoLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkK
KyAgICA6IENyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDLCBDcnlwdG9L
ZXlUeXBlOjpTZWNyZXQsIGV4dHJhY3RhYmxlLCB1c2FnZSkKKyAgICAsIG1faGFzaChoYXNoKQor
ICAgICwgbV9rZXkoa2V5KQoreworfQorCitDcnlwdG9LZXlITUFDOjp+Q3J5cHRvS2V5SE1BQygp
Cit7Cit9CisKK3ZvaWQgQ3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihD
cnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAg
Q3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOworCisgICAgYXV0
byBoYXNoRGVzY3JpcHRpb25CdWlsZGVyID0gYnVpbGRlci5jcmVhdGVFbXB0eUNsb25lKCk7Cisg
ICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnNoYXJlZCgpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOworICAgIGJ1aWxkZXIu
YWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIpOworCisgICAgYnVpbGRlci5hZGQo
Imxlbmd0aCIsIG1fa2V5LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5
SE1BQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tl
eUhNQUMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0
b0tleUhNQUMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDcnlwdG9LZXlITUFDX2gKKyNkZWZpbmUgQ3J5cHRvS2V5SE1BQ19oCisKKyNpbmNs
dWRlICJDcnlwdG9LZXkuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ3J5cHRvS2V5SE1BQyBGSU5BTCA6IHB1YmxpYyBDcnlwdG9LZXkgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyeXB0b0tleUhNQUM+IGNyZWF0ZShjb25zdCBW
ZWN0b3I8Y2hhcj4mIGtleSwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBib29sIGV4
dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZSB1c2FnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ3J5cHRvS2V5SE1BQyhrZXksIGhhc2gsIGV4dHJhY3RhYmxlLCB1c2FnZSkp
OworICAgIH0KKyAgICB2aXJ0dWFsIH5DcnlwdG9LZXlITUFDKCk7CisKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXImKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDcnlwdG9LZXlITUFDKGNv
bnN0IFZlY3RvcjxjaGFyPiYga2V5LCBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGJv
b2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVzYWdlKTsKKworICAgIENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIgbV9oYXNoOworICAgIFZlY3RvcjxjaGFyPiBtX2tleTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQorI2VuZGlm
IC8vIENyeXB0b0tleUhNQUNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0
aG1ITUFDTWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvQWxnb3JpdGhtSE1BQ01hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxn
b3JpdGhtSE1BQy5oIgorCisjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCisKKyNpbmNsdWRlICJD
cnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5cHRvS2V5SE1BQy5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKyNp
bmNsdWRlIDxDb21tb25DcnlwdG8vQ29tbW9uSE1BQy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBib29sIGdldENvbW1vbkNyeXB0b0FsZ29yaXRobShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyIGhhc2hGdW5jdGlvbiwgQ0NIbWFjQWxnb3JpdGhtJiBhbGdvcml0aG0pCit7Cisg
ICAgc3dpdGNoIChoYXNoRnVuY3Rpb24pIHsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8xOgorICAgICAgICBhbGdvcml0aG0gPSBrQ0NIbWFjQWxnU0hBMTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFf
MjI0OgorICAgICAgICBhbGdvcml0aG0gPSBrQ0NIbWFjQWxnU0hBMjI0OworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTY6Cisg
ICAgICAgIGFsZ29yaXRobSA9IGtDQ0htYWNBbGdTSEEyNTY7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NDoKKyAgICAgICAg
YWxnb3JpdGhtID0ga0NDSG1hY0FsZ1NIQTM4NDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfNTEyOgorICAgICAgICBhbGdvcml0
aG0gPSBrQ0NIbWFjQWxnU0hBNTEyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+IGNhbGN1bGF0ZVNpZ25hdHVyZShDQ0htYWNBbGdvcml0aG0gYWxnb3JpdGhtLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgY29uc3QgVmVjdG9yPENyeXB0b09wZXJhdGlvbkRhdGE+
JiBkYXRhKQoreworICAgIHNpemVfdCBkaWdlc3RMZW5ndGg7CisgICAgc3dpdGNoIChhbGdvcml0
aG0pIHsKKyAgICBjYXNlIGtDQ0htYWNBbGdTSEExOgorICAgICAgICBkaWdlc3RMZW5ndGggPSBD
Q19TSEExX0RJR0VTVF9MRU5HVEg7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NDSG1hY0Fs
Z1NIQTIyNDoKKyAgICAgICAgZGlnZXN0TGVuZ3RoID0gQ0NfU0hBMjI0X0RJR0VTVF9MRU5HVEg7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NDSG1hY0FsZ1NIQTI1NjoKKyAgICAgICAgZGln
ZXN0TGVuZ3RoID0gQ0NfU0hBMjU2X0RJR0VTVF9MRU5HVEg7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2Uga0NDSG1hY0FsZ1NIQTM4NDoKKyAgICAgICAgZGlnZXN0TGVuZ3RoID0gQ0NfU0hBMzg0
X0RJR0VTVF9MRU5HVEg7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NDSG1hY0FsZ1NIQTUx
MjoKKyAgICAgICAgZGlnZXN0TGVuZ3RoID0gQ0NfU0hBNTEyX0RJR0VTVF9MRU5HVEg7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIENDSG1hY0NvbnRleHQgY29udGV4dDsKKyAgICBDQ0htYWNJbml0KCZjb250
ZXh0LCBhbGdvcml0aG0sIGtleS5kYXRhKCksIGtleS5zaXplKCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBzaXplID0gZGF0YS5zaXplKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIENDSG1h
Y1VwZGF0ZSgmY29udGV4dCwgZGF0YVtpXS5maXJzdCwgZGF0YVtpXS5zZWNvbmQpOworCisgICAg
VmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJlc3VsdChkaWdlc3RMZW5ndGgpOworICAgIENDSG1hY0Zp
bmFsKCZjb250ZXh0LCByZXN1bHQuZGF0YSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OnNpZ24oY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IFZlY3RvcjxDcnlw
dG9PcGVyYXRpb25EYXRhPiYgZGF0YSwgc3RkOjp1bmlxdWVfcHRyPFByb21pc2VXcmFwcGVyPiBw
cm9taXNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBjb25zdCBDcnlwdG9BbGdvcml0aG1I
bWFjUGFyYW1zJiBobWFjUGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0FsZ29y
aXRobUhtYWNQYXJhbXMmPihwYXJhbWV0ZXJzKTsKKyAgICBjb25zdCBDcnlwdG9LZXlITUFDJiBo
bWFjS2V5ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3J5cHRvS2V5SE1BQyY+KGtleSk7CisKKyAgICBD
Q0htYWNBbGdvcml0aG0gYWxnb3JpdGhtOworICAgIGlmICghZ2V0Q29tbW9uQ3J5cHRvQWxnb3Jp
dGhtKGhtYWNQYXJhbWV0ZXJzLmhhc2gsIGFsZ29yaXRobSkpIHsKKyAgICAgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBzaWduYXR1cmUgPSBjYWxjdWxhdGVTaWduYXR1cmUoYWxnb3JpdGhtLCBobWFj
S2V5LmtleSgpLCBkYXRhKTsKKworICAgIHByb21pc2UtPmZ1bGZpbGwoc2lnbmF0dXJlKTsKK30K
Kwordm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjp2ZXJpZnkoY29uc3QgQ3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ3J5cHRvS2V5JiBrZXksIGNvbnN0IENyeXB0
b09wZXJhdGlvbkRhdGEmIGV4cGVjdGVkU2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8Q3J5cHRvT3Bl
cmF0aW9uRGF0YT4mIGRhdGEsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4gcHJvbWlz
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgY29uc3QgQ3J5cHRvQWxnb3JpdGhtSG1hY1Bh
cmFtcyYgaG1hY1BhcmFtZXRlcnMgPSBzdGF0aWNfY2FzdDxjb25zdCBDcnlwdG9BbGdvcml0aG1I
bWFjUGFyYW1zJj4ocGFyYW1ldGVycyk7CisgICAgY29uc3QgQ3J5cHRvS2V5SE1BQyYgaG1hY0tl
eSA9IHN0YXRpY19jYXN0PGNvbnN0IENyeXB0b0tleUhNQUMmPihrZXkpOworCisgICAgQ0NIbWFj
QWxnb3JpdGhtIGFsZ29yaXRobTsKKyAgICBpZiAoIWdldENvbW1vbkNyeXB0b0FsZ29yaXRobSho
bWFjUGFyYW1ldGVycy5oYXNoLCBhbGdvcml0aG0pKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBP
UlRFRF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gc2lnbmF0dXJlID0gY2FsY3VsYXRlU2lnbmF0dXJlKGFsZ29yaXRobSwgaG1hY0tleS5r
ZXkoKSwgZGF0YSk7CisKKyAgICBib29sIHJlc3VsdCA9IHNpZ25hdHVyZS5zaXplKCkgPT0gZXhw
ZWN0ZWRTaWduYXR1cmUuc2Vjb25kICYmICFtZW1jbXAoc2lnbmF0dXJlLmRhdGEoKSwgZXhwZWN0
ZWRTaWduYXR1cmUuZmlyc3QsIHNpZ25hdHVyZS5zaXplKCkpOworCisgICAgcHJvbWlzZS0+ZnVs
ZmlsbChyZXN1bHQpOworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmdlbmVyYXRlS2V5
KGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmLCBib29sIC8qZXh0cmFjdGFibGUqLywg
Q3J5cHRvS2V5VXNhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxQcm9taXNlV3JhcHBlcj4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQuCisgICAgZWMgPSBOT1Rf
U1VQUE9SVEVEX0VSUjsKK30KKworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoU1VCVExFX0NSWVBU
TykKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
QWxnb3JpdGhtSE1BQ01hYy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAt
MCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeU1hYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeU1hYy5jcHAJKHJldmlzaW9uIDE1ODQwNykKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9tYWMvQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnlNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCwxNCArMjgsMTQgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0vLyNpbmNsdWRl
ICJDcnlwdG9BbGdvcml0aG1ITUFDLmgiCisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtSE1BQy5o
IgogI2luY2x1ZGUgIkNyeXB0b0FsZ29yaXRobVNIQTEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB2b2lkIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpwbGF0Zm9ybVJlZ2lzdGVyQWxnb3Jp
dGhtcygpCiB7Ci0vLyAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1ITUFDOjpz
X25hbWUsIENyeXB0b0FsZ29yaXRobUhNQUM6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3JpdGht
SE1BQzo6Y3JlYXRlKTsKKyAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1ITUFD
OjpzX25hbWUsIENyeXB0b0FsZ29yaXRobUhNQUM6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxnb3Jp
dGhtSE1BQzo6Y3JlYXRlKTsKICAgICByZWdpc3RlckFsZ29yaXRobShDcnlwdG9BbGdvcml0aG1T
SEExOjpzX25hbWUsIENyeXB0b0FsZ29yaXRobVNIQTE6OnNfaWRlbnRpZmllciwgQ3J5cHRvQWxn
b3JpdGhtU0hBMTo6Y3JlYXRlKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4NDA4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTMtMTAtMzEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIGEgTWFjIFdlYkNyeXB0byBpbXBsZW1lbnRhdGlvbiBvZiBITUFDIGltcG9ydEtleS9zaWdu
L3ZlcmlmeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIzNTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAg
ICogY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWw6IEFkZGVkLgorCiAy
MDEzLTEwLTMxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uZkBnbWFpbC5jb20+CiAKICAgICAgICAg
Q29ycmVjdCB0aGUgZWxhcHNlZFRpbWUgY2FsY3VsYXRpb24gaW4gU1ZHIGFuaW1hdGlvbnMKSW5k
ZXg6IExheW91dFRlc3RzL2NyeXB0by9zdWJ0bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVy
aWZ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2NyeXB0by9zdWJ0
bGUvaG1hYy1zaWduLXZlcmlmeS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMCBAQAorVGVzdCBjcnlwdG8uc3VidGxlLmRpZ2VzdC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK0ltcG9ydGluZyBhIHJhdyBITUFDIGtleSBmcm9tIHN0cmluZyBsaXRlcmFs
Li4uCitQQVNTIGtleS50eXBlIGlzICdzZWNyZXQnCitQQVNTIGtleS5leHRyYWN0YWJsZSBpcyB0
cnVlCitQQVNTIGtleS5hbGdvcml0aG0ubmFtZSBpcyAnaG1hYycKK1BBU1Mga2V5LmFsZ29yaXRo
bS5sZW5ndGggaXMgMQorUEFTUyBrZXkuYWxnb3JpdGhtLmhhc2gubmFtZSBpcyAnc2hhLTEnCitQ
QVNTIGtleS51c2FnZXMgaXMgWydzaWduJywgJ3ZlcmlmeSddCitVc2luZyB0aGUga2V5IHRvIHNp
Z24gJ2ZvbycuLi4KKyAgICA9IFtiZSBiYiBjMCAyZSA0NiBiMCBmOCAxMSA4MyBmNCAwYyAyNSBk
YyBlMiAzZSA1MCA0NSBkNiA1NSAxOV0KK1ZlcmlmeWluZyB0aGUgc2lnbmF0dXJlLi4uCitQQVNT
IHZlcmlmaWNhdGlvblJlc3VsdCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvcGxhaW4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCitu
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMv
Y3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvY3J5cHRvL3N1YnRsZS9obWFjLXNpZ24tdmVyaWZ5Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9jcnlwdG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnkuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IGNyeXB0by5zdWJ0bGUuZGlnZXN0LiIpOwor
Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworaWYgKCF3aW5kb3cuc3VidGxlKQorICAgIHdpbmRv
dy5jcnlwdG8uc3VidGxlID0gd2luZG93LmNyeXB0by53ZWJraXRTdWJ0bGU7CisKK3ZhciBobWFj
S2V5ID0gYXNjaWlUb0FycmF5QnVmZmVyKCdhJyk7Cit2YXIgZXh0cmFjdGFibGUgPSB0cnVlOwor
CitkZWJ1ZygiSW1wb3J0aW5nIGEgcmF3IEhNQUMga2V5IGZyb20gc3RyaW5nIGxpdGVyYWwuLi4i
KTsKK2NyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCJyYXciLCBobWFjS2V5LCB7bmFtZTogJ2htYWMn
LCBoYXNoOiB7bmFtZTogJ3NoYS0xJ319LCBleHRyYWN0YWJsZSwgWyJzaWduIiwgInZlcmlmeSJd
KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGtleSA9IHJlc3VsdDsKKyAgICBzaG91bGRC
ZSgia2V5LnR5cGUiLCAiJ3NlY3JldCciKTsKKyAgICBzaG91bGRCZSgia2V5LmV4dHJhY3RhYmxl
IiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgia2V5LmFsZ29yaXRobS5uYW1lIiwgIidobWFjJyIp
OworICAgIHNob3VsZEJlKCJrZXkuYWxnb3JpdGhtLmxlbmd0aCIsICIxIik7IC8vIFNlZSA8aHR0
cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMzA5OD4uCisgICAg
c2hvdWxkQmUoImtleS5hbGdvcml0aG0uaGFzaC5uYW1lIiwgIidzaGEtMSciKTsKKyAgICBzaG91
bGRCZSgia2V5LnVzYWdlcyIsICJbJ3NpZ24nLCAndmVyaWZ5J10iKTsKKworICAgIGRlYnVnKCJV
c2luZyB0aGUga2V5IHRvIHNpZ24gJ2ZvbycuLi4iKTsKKyAgICByZXR1cm4gY3J5cHRvLnN1YnRs
ZS5zaWduKGtleS5hbGdvcml0aG0sIGtleSwgW2FzY2lpVG9BcnJheUJ1ZmZlcignZm9vJyldKTsK
K30pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgcHJpbnRBY2NlcHRlZFJlc3VsdChyZXN1
bHQpOworCisgICAgZGVidWcoIlZlcmlmeWluZyB0aGUgc2lnbmF0dXJlLi4uIik7CisgICAgcmV0
dXJuIGNyeXB0by5zdWJ0bGUudmVyaWZ5KGtleS5hbGdvcml0aG0sIGtleSwgcmVzdWx0LCBbYXNj
aWlUb0FycmF5QnVmZmVyKCdmb28nKV0pOworfSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKKyAg
ICB2ZXJpZmljYXRpb25SZXN1bHQgPSByZXN1bHQ7CisgICAgc2hvdWxkQmUoInZlcmlmaWNhdGlv
blJlc3VsdCIsICJ0cnVlIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0Pgor
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9jcnlw
dG8vc3VidGxlL2htYWMtc2lnbi12ZXJpZnkuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiMjIC0wLDAgKzEgIyMKK3RleHQvaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>