<?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>205999</bug_id>
          
          <creation_ts>2020-01-09 06:35:13 -0800</creation_ts>
          <short_desc>[EME][ClearKey] Refactor CDMClearKey::update()</short_desc>
          <delta_ts>2020-01-10 04:32:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Charlie Turner">cturner</reporter>
          <assigned_to name="Charlie Turner">cturner</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1604588</commentid>
    <comment_count>0</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-09 06:35:13 -0800</bug_when>
    <thetext>[EME][ClearKey] Refactor CDMClearKey::update()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604589</commentid>
    <comment_count>1</comment_count>
      <attachid>387218</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-09 06:39:33 -0800</bug_when>
    <thetext>Created attachment 387218
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604636</commentid>
    <comment_count>2</comment_count>
      <attachid>387218</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-09 08:18:47 -0800</bug_when>
    <thetext>Comment on attachment 387218
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        (WebCore::sharedBufferAsHexString): Helper method to convert a shared buffer containing bytes into a hex string, useful for debug prints.
&gt; +        (WebCore::CDMInstanceClearKey::Key::keyIDAsString const): Uses the helper to return a string containing the hex values of the key ID.
&gt; +        (WebCore::CDMInstanceClearKey::Key::keyValueAsString const): Ditto for the key value.
&gt; +        (WebCore::operator==): Added comparison operators to refactor updateLicense&apos;s duplication of comparisons.
&gt; +        (WebCore::operator&lt;): Ditto.
&gt; +        (WebCore::CDMInstanceSessionClearKey::updateLicense): Refactor to rely on equality comparisons in one place, the key class, and to remove thorny open-coded memcmp&apos;s in the middle of conditionals which made the method unnecessarily hard to reason about. The extra copying of the key status vector from the key store has been eliminated, instead the vector is sorted in-place directly inside the HashMap, which also cleaned up the method further.
&gt; +        * platform/encryptedmedia/clearkey/CDMClearKey.h:

Aren&apos;t these lines two long? (This is funny coming from me)

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:543
&gt; +static String sharedBufferAsHexString(const RefPtr&lt;SharedBuffer&gt; buf)

&amp; or directly move this to SharedBuffer::toHexString?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:545
&gt; +    StringBuilder sb;

stringBuilder

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:550
&gt; +        if (byteOffset &lt; buf-&gt;size() - 1)
&gt; +            sb.append(&apos; &apos;);

Are appending a space after each byte? Do you think it is needed?

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:565
&gt; +bool operator==(const CDMInstanceClearKey::Key &amp;k1, const CDMInstanceClearKey::Key &amp;k2)

Move the &amp; next to the type, both parameters

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:573
&gt; +bool operator&lt;(const CDMInstanceClearKey::Key &amp;k1, const CDMInstanceClearKey::Key &amp;k2)

Ditto

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:582
&gt; +    if (k1.keyIDData-&gt;size() != k2.keyIDData-&gt;size())
&gt; +        return k1.keyIDData-&gt;size() &lt; k2.keyIDData-&gt;size();
&gt; +
&gt; +    size_t minimumBufferSize = std::min(k1.keyIDData-&gt;size(), k2.keyIDData-&gt;size());
&gt; +    return memcmp(k1.keyIDData-&gt;data(), k2.keyIDData-&gt;data(), minimumBufferSize);

Aren&apos;t the buffers going to have the same size after the if? I think you can remove the minimum size and use one of the sizes, right? Am I missing anything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604657</commentid>
    <comment_count>3</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-09 08:58:32 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #2)
&gt; Comment on attachment 387218 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387218&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        (WebCore::sharedBufferAsHexString): Helper method to convert a shared buffer containing bytes into a hex string, useful for debug prints.
&gt; &gt; +        (WebCore::CDMInstanceClearKey::Key::keyIDAsString const): Uses the helper to return a string containing the hex values of the key ID.
&gt; &gt; +        (WebCore::CDMInstanceClearKey::Key::keyValueAsString const): Ditto for the key value.
&gt; &gt; +        (WebCore::operator==): Added comparison operators to refactor updateLicense&apos;s duplication of comparisons.
&gt; &gt; +        (WebCore::operator&lt;): Ditto.
&gt; &gt; +        (WebCore::CDMInstanceSessionClearKey::updateLicense): Refactor to rely on equality comparisons in one place, the key class, and to remove thorny open-coded memcmp&apos;s in the middle of conditionals which made the method unnecessarily hard to reason about. The extra copying of the key status vector from the key store has been eliminated, instead the vector is sorted in-place directly inside the HashMap, which also cleaned up the method further.
&gt; &gt; +        * platform/encryptedmedia/clearkey/CDMClearKey.h:
&gt; 
&gt; Aren&apos;t these lines two long? (This is funny coming from me)

Hehe, fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:543
&gt; &gt; +static String sharedBufferAsHexString(const RefPtr&lt;SharedBuffer&gt; buf)
&gt; 
&gt; &amp; or directly move this to SharedBuffer::toHexString?
&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:545
&gt; &gt; +    StringBuilder sb;
&gt; 
&gt; stringBuilder

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:550
&gt; &gt; +        if (byteOffset &lt; buf-&gt;size() - 1)
&gt; &gt; +            sb.append(&apos; &apos;);
&gt; 
&gt; Are appending a space after each byte? Do you think it is needed?

I don&apos;t know how to get the `hex` modified to zero pad, without that it can be hard, without the added spaces, to see the individual byte values, since a byte value of 5 between, say, a1 and b2 would look like a15b2 and it&apos;s get confusing...

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:565
&gt; &gt; +bool operator==(const CDMInstanceClearKey::Key &amp;k1, const CDMInstanceClearKey::Key &amp;k2)
&gt; 
&gt; Move the &amp; next to the type, both parameters

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:573
&gt; &gt; +bool operator&lt;(const CDMInstanceClearKey::Key &amp;k1, const CDMInstanceClearKey::Key &amp;k2)
&gt; 
&gt; Ditto

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:582
&gt; &gt; +    if (k1.keyIDData-&gt;size() != k2.keyIDData-&gt;size())
&gt; &gt; +        return k1.keyIDData-&gt;size() &lt; k2.keyIDData-&gt;size();
&gt; &gt; +
&gt; &gt; +    size_t minimumBufferSize = std::min(k1.keyIDData-&gt;size(), k2.keyIDData-&gt;size());
&gt; &gt; +    return memcmp(k1.keyIDData-&gt;data(), k2.keyIDData-&gt;data(), minimumBufferSize);
&gt; 
&gt; Aren&apos;t the buffers going to have the same size after the if? I think you can
&gt; remove the minimum size and use one of the sizes, right? Am I missing
&gt; anything?

You are right, the defensive code was from a previous iteration. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604658</commentid>
    <comment_count>4</comment_count>
      <attachid>387238</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-09 08:59:41 -0800</bug_when>
    <thetext>Created attachment 387238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604674</commentid>
    <comment_count>5</comment_count>
      <attachid>387238</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-09 09:37:52 -0800</bug_when>
    <thetext>Comment on attachment 387238
Patch

Rejecting attachment 387238 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 387238, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.

Full output: https://webkit-queues.webkit.org/results/13301813</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605037</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-10 01:38:34 -0800</bug_when>
    <thetext>(In reply to Charlie Turner from comment #3)
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:550
&gt; &gt; &gt; +        if (byteOffset &lt; buf-&gt;size() - 1)
&gt; &gt; &gt; +            sb.append(&apos; &apos;);
&gt; &gt; 
&gt; &gt; Are appending a space after each byte? Do you think it is needed?
&gt; 
&gt; I don&apos;t know how to get the `hex` modified to zero pad, without that it can
&gt; be hard, without the added spaces, to see the individual byte values, since
&gt; a byte value of 5 between, say, a1 and b2 would look like a15b2 and it&apos;s get
&gt; confusing...

And wouldn&apos;t it be better to write a105b2 instead, cause the 0 is actually there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605038</commentid>
    <comment_count>7</comment_count>
      <attachid>387238</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2020-01-10 01:42:44 -0800</bug_when>
    <thetext>Comment on attachment 387238
Patch

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

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:543
&gt; +static String sharedBufferAsHexString(const RefPtr&lt;SharedBuffer&gt;&amp; buf)

The more I look at this, the more I think we should move it to SharedBuffer::toHexString...

&gt; Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp:573
&gt; +bool operator&lt;(const CDMInstanceClearKey::Key &amp;k1, const CDMInstanceClearKey::Key &amp;k2)

&amp; next to the type!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605044</commentid>
    <comment_count>8</comment_count>
      <attachid>387321</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-01-10 02:58:43 -0800</bug_when>
    <thetext>Created attachment 387321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605063</commentid>
    <comment_count>9</comment_count>
      <attachid>387321</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-10 04:32:38 -0800</bug_when>
    <thetext>Comment on attachment 387321
Patch

Clearing flags on attachment: 387321

Committed r254334: &lt;https://trac.webkit.org/changeset/254334&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605064</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-10 04:32:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387218</attachid>
            <date>2020-01-09 06:39:33 -0800</date>
            <delta_ts>2020-01-09 08:59:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205999-20200109143932.patch</filename>
            <type>text/plain</type>
            <size>11745</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZkNzVhZDAyOWIyYWVh
MzUzN2YyN2JmOGJjYTgwOTM1MGU1NTZkYS4uNWNiODk2M2FmYWU0Y2ZmM2NkMzcxYmQ3M2I4MTIz
M2FmZGIzZTkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTAxLTA5ICBDaGFy
bGllIFR1cm5lciAgPG1haWxAY2hhcmxlcy5wbHVzPgorCisgICAgICAgIFtFTUVdW0NsZWFyS2V5
XSBSZWZhY3RvciBDRE1JbnN0YW5jZUNsZWFyS2V5Ojp1cGRhdGUoKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1OTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZlckFzSGV4U3RyaW5nKTogSGVs
cGVyIG1ldGhvZCB0byBjb252ZXJ0IGEgc2hhcmVkIGJ1ZmZlciBjb250YWluaW5nIGJ5dGVzIGlu
dG8gYSBoZXggc3RyaW5nLCB1c2VmdWwgZm9yIGRlYnVnIHByaW50cy4KKyAgICAgICAgKFdlYkNv
cmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZyBjb25zdCk6IFVzZXMg
dGhlIGhlbHBlciB0byByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgaGV4IHZhbHVlcyBv
ZiB0aGUga2V5IElELgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5
OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KTogRGl0dG8gZm9yIHRoZSBrZXkgdmFsdWUuCisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogQWRkZWQgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8g
cmVmYWN0b3IgdXBkYXRlTGljZW5zZSdzIGR1cGxpY2F0aW9uIG9mIGNvbXBhcmlzb25zLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDRE1J
bnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvIHJlbHkg
b24gZXF1YWxpdHkgY29tcGFyaXNvbnMgaW4gb25lIHBsYWNlLCB0aGUga2V5IGNsYXNzLCBhbmQg
dG8gcmVtb3ZlIHRob3JueSBvcGVuLWNvZGVkIG1lbWNtcCdzIGluIHRoZSBtaWRkbGUgb2YgY29u
ZGl0aW9uYWxzIHdoaWNoIG1hZGUgdGhlIG1ldGhvZCB1bm5lY2Vzc2FyaWx5IGhhcmQgdG8gcmVh
c29uIGFib3V0LiBUaGUgZXh0cmEgY29weWluZyBvZiB0aGUga2V5IHN0YXR1cyB2ZWN0b3IgZnJv
bSB0aGUga2V5IHN0b3JlIGhhcyBiZWVuIGVsaW1pbmF0ZWQsIGluc3RlYWQgdGhlIHZlY3RvciBp
cyBzb3J0ZWQgaW4tcGxhY2UgZGlyZWN0bHkgaW5zaWRlIHRoZSBIYXNoTWFwLCB3aGljaCBhbHNv
IGNsZWFuZWQgdXAgdGhlIG1ldGhvZCBmdXJ0aGVyLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5Lmg6CisKIDIwMjAtMDEtMDcgIHlvdWVubiBm
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBNZWRpYVJlY29y
ZGVyIGJhY2tlbmQgaW4gR1BVUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmlu
ZGV4IDkxNjFmNDU0NWY3NTgwNzVkMjQ5N2RlOTI0YzAwMTRiNDc2OTRlYjkuLjI0ZTUxZDg5NmYw
NDRmM2E4NjQ5MWI0YjhkNmMxZjk2Yzg5OWNlOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktl
eS5jcHAKQEAgLTM0LDExICszNCwxNCBAQAogI2luY2x1ZGUgIkNETUtleVN5c3RlbUNvbmZpZ3Vy
YXRpb24uaCIKICNpbmNsdWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJDRE1TZXNz
aW9uVHlwZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MzcsNiArNTQw
LDQ4IEBAIFJlZlB0cjxDRE1JbnN0YW5jZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJLZXk6OmNy
ZWF0ZVNlc3Npb24oKQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXkoKSk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgc2hhcmVkQnVmZmVyQXNIZXhTdHJpbmco
Y29uc3QgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmKQoreworICAgIFN0cmluZ0J1aWxkZXIgc2I7
CisgICAgZm9yICh1bnNpZ25lZCBieXRlT2Zmc2V0ID0gMDsgYnl0ZU9mZnNldCA8IGJ1Zi0+c2l6
ZSgpOyBieXRlT2Zmc2V0KyspIHsKKyAgICAgICAgY29uc3QgdWludDhfdCBieXRlID0gYnVmLT5k
YXRhKClbYnl0ZU9mZnNldF07CisgICAgICAgIHNiLmFwcGVuZChoZXgoYnl0ZSkpOworICAgICAg
ICBpZiAoYnl0ZU9mZnNldCA8IGJ1Zi0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgIHNiLmFwcGVu
ZCgnICcpOworICAgIH0KKyAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIENE
TUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIlsiLCBzaGFyZWRCdWZmZXJBc0hleFN0cmluZyhrZXlJRERhdGEpLCAi
XSIpOworfQorCitTdHJpbmcgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiWyIsIHNoYXJlZEJ1ZmZlckFz
SGV4U3RyaW5nKGtleVZhbHVlRGF0YSksICJdIik7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25z
dCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkgJmsxLCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5
OjpLZXkgJmsyKQoreworICAgIEFTU0VSVChrMS5rZXlJRERhdGEpOworICAgIEFTU0VSVChrMi5r
ZXlJRERhdGEpOworCisgICAgcmV0dXJuICprMS5rZXlJRERhdGEgPT0gKmsyLmtleUlERGF0YTsK
K30KKworYm9vbCBvcGVyYXRvcjwoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5ICZrMSwg
Y29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5ICZrMikKK3sKKyAgICBBU1NFUlQoazEua2V5
SUREYXRhKTsKKyAgICBBU1NFUlQoazIua2V5SUREYXRhKTsKKworICAgIGlmIChrMS5rZXlJRERh
dGEtPnNpemUoKSAhPSBrMi5rZXlJRERhdGEtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGsxLmtl
eUlERGF0YS0+c2l6ZSgpIDwgazIua2V5SUREYXRhLT5zaXplKCk7CisKKyAgICBzaXplX3QgbWlu
aW11bUJ1ZmZlclNpemUgPSBzdGQ6Om1pbihrMS5rZXlJRERhdGEtPnNpemUoKSwgazIua2V5SURE
YXRhLT5zaXplKCkpOworICAgIHJldHVybiBtZW1jbXAoazEua2V5SUREYXRhLT5kYXRhKCksIGsy
LmtleUlERGF0YS0+ZGF0YSgpLCBtaW5pbXVtQnVmZmVyU2l6ZSk7Cit9CisKIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnJlcXVlc3RMaWNlbnNlKExpY2Vuc2VUeXBlLCBjb25zdCBB
dG9tU3RyaW5nJiBpbml0RGF0YVR5cGUsIFJlZjxTaGFyZWRCdWZmZXI+JiYgaW5pdERhdGEsIExp
Y2Vuc2VDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIHN0YXRpYyB1aW50MzJfdCBzX3Nlc3Np
b25JZFZhbHVlID0gMDsKQEAgLTU3Miw3MiArNjE3LDUyIEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vu
c2VUCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH07CiAKLSAgICAvLyBQYXJzZSB0aGUg
cmVzcG9uc2UgYnVmZmVyIGFzIGFuIEpTT04gb2JqZWN0LgogICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHJvb3QgPSBwYXJzZUpTT05PYmplY3QocmVzcG9uc2UpOwogICAgIGlmICghcm9vdCkgewog
ICAgICAgICBkaXNwYXRjaENhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFN1Y2Nlc3NWYWx1
ZTo6RmFpbGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFBhcnNlIHRoZSBy
ZXNwb25zZSB1c2luZyAnbGljZW5zZScgZm9ybWF0dGluZywgaWYgcG9zc2libGUuCisgICAgTE9H
KEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gdXBkYXRpbmcgbGljZW5zZSBmb3Igc2Vzc2lvbiAlcyIs
IHNlc3Npb25JZC51dGY4KCkuZGF0YSgpKTsKKwogICAgIGlmIChhdXRvIGRlY29kZWRLZXlzID0g
cGFyc2VMaWNlbnNlRm9ybWF0KCpyb290KSkgewogICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgdGFy
Z2V0IFZlY3RvciBvZiBLZXkgb2JqZWN0cyBmb3IgdGhpcyBzZXNzaW9uLgotICAgICAgICBhdXRv
JiBrZXlWZWN0b3IgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkuZW5zdXJlKHNl
c3Npb25JZCwgW10geyByZXR1cm4gVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6OktleT4geyB9
OyB9KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIHN0
YXRlIG1hbmFnZW1lbnQgY29kZS4KKyAgICAgICAgVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6
OktleT4mIGtleVZlY3RvciA9IENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5lbnN1
cmUoc2Vzc2lvbklkLCBbXSB7IHJldHVybiBWZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5
PiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKIAotICAgICAgICAvLyBGb3IgZWFjaCBkZWNvZGVk
IGtleSwgZmluZCBhbiBleGlzdGluZyBpdGVtIGZvciB0aGUgZGVjb2RlZCBrZXkncyBJRC4gSWYg
bm9uZSBleGlzdCwKLSAgICAgICAgLy8gdGhlIGtleSBpcyBkZWNvZGVkLiBPdGhlcndpc2UsIHRo
ZSBrZXkgaXMgdXBkYXRlZCBpbiBjYXNlIHRoZXJlJ3MgYSBtaXNtYXRjaCBiZXR3ZWVuCi0gICAg
ICAgIC8vIHRoZSBzaXplIG9yIGRhdGEgb2YgdGhlIGV4aXN0aW5nIGFuZCBwcm9wb3NlZCBrZXku
CiAgICAgICAgIGJvb2wga2V5c0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiAqZGVjb2RlZEtleXMpIHsKLSAgICAgICAgICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYo
a2V5VmVjdG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSwKLSAgICAgICAgICAgICAgICBbJmtl
eV0gKGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgY29udGFpbmVkS2V5KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZWRLZXkua2V5SUREYXRhLT5zaXplKCkgPT0g
a2V5LmtleUlERGF0YS0+c2l6ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhc3RkOjpt
ZW1jbXAoY29udGFpbmVkS2V5LmtleUlERGF0YS0+ZGF0YSgpLCBrZXkua2V5SUREYXRhLT5kYXRh
KCksIGNvbnRhaW5lZEtleS5rZXlJRERhdGEtPnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYg
ZGVjb2RlZEtleSA6ICpkZWNvZGVkS2V5cykgeworICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAt
IENsZWFyS2V5IC0gRGVjb2RlZCBhIGtleSB3aXRoIElEICVzIGFuZCBrZXkgZGF0YSAlcyIsIGRl
Y29kZWRLZXkua2V5SURBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGRlY29kZWRLZXkua2V5VmFs
dWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgYXV0byBrZXlXaXRoTWF0
Y2hpbmdLZXlJRCA9IHN0ZDo6ZmluZF9pZihrZXlWZWN0b3IuYmVnaW4oKSwga2V5VmVjdG9yLmVu
ZCgpLAorICAgICAgICAgICAgICAgIFsmZGVjb2RlZEtleV0gKGNvbnN0IENETUluc3RhbmNlQ2xl
YXJLZXk6OktleSYgY29udGFpbmVkS2V5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
b250YWluZWRLZXkgPT0gZGVjb2RlZEtleTsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIGlmIChpdCAhPSBrZXlWZWN0b3IuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBl
eGlzdGluZ0tleSA9IGl0LT5rZXlWYWx1ZURhdGE7Ci0gICAgICAgICAgICAgICAgYXV0byYgcHJv
cG9zZWRLZXkgPSBrZXkua2V5VmFsdWVEYXRhOworICAgICAgICAgICAgaWYgKGtleVdpdGhNYXRj
aGluZ0tleUlEICE9IGtleVZlY3Rvci5lbmQoKSkgeworICAgICAgICAgICAgICAgIExPRyhFTUUs
ICJFTUUgLSBDbGVhcktleSAtIEV4aXN0aW5nIGtleSBmb3VuZCB3aXRoIGRhdGEgJXMiLCBrZXlX
aXRoTWF0Y2hpbmdLZXlJRC0+a2V5VmFsdWVBc1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBLZXkgaWYgaXQgZGlmZmVycyBm
cm9tIHRoZSBwcm9wb3NlZCBrZXkgaW4ga2V5IHZhbHVlLgotICAgICAgICAgICAgICAgIGlmIChl
eGlzdGluZ0tleS0+c2l6ZSgpICE9IHByb3Bvc2VkS2V5LT5zaXplKCkgfHwgc3RkOjptZW1jbXAo
ZXhpc3RpbmdLZXktPmRhdGEoKSwgcHJvcG9zZWRLZXktPmRhdGEoKSwgZXhpc3RpbmdLZXktPnNp
emUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgKml0ID0gV1RGTW92ZShrZXkpOworICAgICAg
ICAgICAgICAgIGlmICgha2V5V2l0aE1hdGNoaW5nS2V5SUQtPmhhc1NhbWVLZXlWYWx1ZShkZWNv
ZGVkS2V5KSkgeworICAgICAgICAgICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkg
LSBVcGRhdGluZyBrZXkgc2luY2UgdGhlIGRhdGEgYXJlIGRpZmZlcmVudCIpOworICAgICAgICAg
ICAgICAgICAgICAqa2V5V2l0aE1hdGNoaW5nS2V5SUQgPSBXVEZNb3ZlKGRlY29kZWRLZXkpOwog
ICAgICAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIGEgS2V5
IGZvciB0aGlzIGtleSBJRCBkb2Vzbid0IGV4aXN0IHlldCwgYXBwZW5kIHRoZSBuZXcgb25lIHRv
IGtleVZlY3Rvci4KLSAgICAgICAgICAgICAgICBrZXlWZWN0b3IuYXBwZW5kKFdURk1vdmUoa2V5
KSk7CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gVGhpcyBpcyBh
IG5ldyBrZXkiKTsKKyAgICAgICAgICAgICAgICBrZXlWZWN0b3IuYXBwZW5kKFdURk1vdmUoZGVj
b2RlZEtleSkpOwogICAgICAgICAgICAgICAgIGtleXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIEluIGNhc2Ugb2YgY2hhbmdlZCBrZXlzLCB3
ZSBoYXZlIHRvIHByb3ZpZGUgYSBLZXlTdGF0dXNWZWN0b3Igb2YgYWxsIHRoZSBrZXlzIGZvcgot
ICAgICAgICAvLyB0aGlzIHNlc3Npb24uCisgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktl
eSAtIFVwZGF0ZSBoYXMgcHJvdmlkZWQgJXp1IGtleXMiLCBrZXlWZWN0b3Iuc2l6ZSgpKTsKKwog
ICAgICAgICBPcHRpb25hbDxLZXlTdGF0dXNWZWN0b3I+IGNoYW5nZWRLZXlzOwogICAgICAgICBp
ZiAoa2V5c0NoYW5nZWQpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0IGEgaGVscGVyIFZlY3RvciBp
cyBjb25zdHJ1Y3RlZCwgY290YWluaW5nIHBhaXJzIG9mIFNoYXJlZEJ1ZmZlciBSZWZQdHJzCi0g
ICAgICAgICAgICAvLyByZXByZXNlbnRpbnQga2V5IElEIGRhdGEsIGFuZCB0aGUgY29ycmVzcG9u
ZGluZyBrZXkgc3RhdHVzZXMuCi0gICAgICAgICAgICAvLyBXZSBjYW4ndCB1c2UgS2V5U3RhdHVz
VmVjdG9yIGhlcmUgYmVjYXVzZSB0aGlzIFZlY3RvciBoYXMgdG8gYmUgc29ydGVkLCB3aGljaAot
ICAgICAgICAgICAgLy8gaXMgbm90IHBvc3NpYmxlIHRvIGRvIG9uIFJlZjw+IG9iamVjdHMuCi0g
ICAgICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0
dXM+PiBrZXlzOwotICAgICAgICAgICAga2V5cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGtleVZl
Y3Rvci5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpdCA6IGtleVZlY3RvcikKLSAg
ICAgICAgICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8UmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyBpdC5rZXlJRERhdGEsIGl0LnN0YXR1cyB9KTsKLQotICAg
ICAgICAgICAgLy8gU29ydCBmaXJzdCBieSBzaXplLCBzZWNvbmQgYnkgZGF0YS4KLSAgICAgICAg
ICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCksCi0gICAgICAgICAgICAgICAg
W10gKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGEuZmlyc3QtPnNpemUoKSAhPSBiLmZpcnN0LT5zaXplKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYS5maXJzdC0+c2l6ZSgpIDwgYi5maXJzdC0+c2l6ZSgpOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1lbWNtcChhLmZpcnN0LT5kYXRhKCksIGIuZmly
c3QtPmRhdGEoKSwgYS5maXJzdC0+c2l6ZSgpKSA8IDA7Ci0gICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAvLyBTb3J0IGJ5IGtleSBJRHMuCisgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5
VmVjdG9yLmJlZ2luKCksIGtleVZlY3Rvci5lbmQoKSk7CiAKLSAgICAgICAgICAgIC8vIEZpbmFs
bHkgY29uc3RydWN0IHRoZSBtaXJyb3JpbmcgS2V5U3RhdHVzVmVjdG9yIG9iamVjdCBhbmQgbW92
ZSBpdCBpbnRvIHRoZQotICAgICAgICAgICAgLy8gT3B0aW9uYWw8PiBvYmplY3QgdGhhdCB3aWxs
IGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suCiAgICAgICAgICAgICBLZXlTdGF0dXNWZWN0b3Ig
a2V5U3RhdHVzVmVjdG9yOwotICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoa2V5cy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBpdCA6IGtl
eXMpCi0gICAgICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6
OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqaXQuZmlyc3QsIGl0LnNlY29u
ZCB9KTsKKyAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGtleVZlY3Rvci5zaXplKCkpOworICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlWZWN0
b3IpCisgICAgICAgICAgICAgICAga2V5U3RhdHVzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChzdGQ6
OnBhaXI8UmVmPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4geyAqa2V5LmtleUlERGF0YSwga2V5
LnN0YXR1cyB9KTsKIAogICAgICAgICAgICAgY2hhbmdlZEtleXMgPSBXVEZNb3ZlKGtleVN0YXR1
c1ZlY3Rvcik7CiAgICAgICAgIH0KQEAgLTY0Niw3ICs2NzEsNiBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBM
aWNlbnNlVAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gUGFyc2UgdGhlIHJlc3Bv
bnNlIHVzaW5nICdsaWNlbnNlIHJlbGVhc2UgYWNrbm93bGVkZ2VtZW50JyBmb3JtYXR0aW5nLCBp
ZiBwb3NzaWJsZS4KICAgICBpZiAocGFyc2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZv
cm1hdCgqcm9vdCkpIHsKICAgICAgICAgLy8gRklYTUU6IFJldHJpZXZlIHRoZSBrZXkgSUQgaW5m
b3JtYXRpb24gYW5kIHVzZSBpdCB0byB2YWxpZGF0ZSB0aGUga2V5cyBmb3IgdGhpcyBzZXNzaW9u
SWQuCiAgICAgICAgIENsZWFyS2V5U3RhdGU6OnNpbmdsZXRvbigpLmtleXMoKS5yZW1vdmUoc2Vz
c2lvbklkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCmluZGV4IDdkNjY2NGQ5MmYwMTVkNzM4
Mzc1YTYwMDkzYjhmMzNiM2YxMGIxNDUuLjg1YjMxOWIxYTM4YzEyMTY5OTE5NzViODAxOWFkMmIx
NmIzNmMxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaApAQCAtMTEwLDYgKzExMCwyNiBA
QCBwdWJsaWM6CiAgICAgICAgIENETUluc3RhbmNlU2Vzc2lvbjo6S2V5U3RhdHVzIHN0YXR1czsK
ICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5SUREYXRhOwogICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBrZXlWYWx1ZURhdGE7CisKKyAgICAgICAgU3RyaW5nIGtleUlEQXNTdHJp
bmcoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGtleVZhbHVlQXNTdHJpbmcoKSBjb25zdDsKKwor
ICAgICAgICBib29sIGhhc1NhbWVLZXlWYWx1ZShjb25zdCBLZXkgJm90aGVyKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoa2V5VmFsdWVEYXRhKTsKKyAgICAgICAgICAgIEFTU0VSVChv
dGhlci5rZXlWYWx1ZURhdGEpOworICAgICAgICAgICAgcmV0dXJuICprZXlWYWx1ZURhdGEgPT0g
Km90aGVyLmtleVZhbHVlRGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR3byBrZXlzIGFy
ZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgSUQsIGlnbm9yaW5nIGtleSB2YWx1ZSBhbmQg
c3RhdHVzLgorICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleSAmazEsIGNv
bnN0IEtleSAmazIpOworICAgICAgICAvLyBLZXkncyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMs
IGZpcnN0IGJ5IHNpemUsIHRoZW4gYnkgY29udGVudHMuCisgICAgICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPChjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKTsKKworICAgICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICEo
b3BlcmF0b3I9PShrMSwgazIpKTsgfQorICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj4oY29u
c3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPT0oazEsIGsyKSAm
JiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KKyAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8PShj
b25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I+KGsxLCBrMik7
IH0KKyAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBLZXkgJmsxLCBjb25zdCBL
ZXkgJmsyKSB7IHJldHVybiAhb3BlcmF0b3I8KGsxLCBrMik7IH0KICAgICB9OwogCiAgICAgUmVm
UHRyPFByb3h5Q0RNPiBwcm94eUNETSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJveHlDRE07
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387238</attachid>
            <date>2020-01-09 08:59:41 -0800</date>
            <delta_ts>2020-01-10 02:58:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205999-20200109165940.patch</filename>
            <type>text/plain</type>
            <size>11806</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZkNzVhZDAyOWIyYWVh
MzUzN2YyN2JmOGJjYTgwOTM1MGU1NTZkYS4uMGNhYTA2YjQxZDEyZDFjYzMyOWNmMWI5Y2RhYzIx
NGI3MTFjZGJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIwLTAxLTA5ICBDaGFy
bGllIFR1cm5lciAgPG1haWxAY2hhcmxlcy5wbHVzPgorCisgICAgICAgIFtFTUVdW0NsZWFyS2V5
XSBSZWZhY3RvciBDRE1JbnN0YW5jZUNsZWFyS2V5Ojp1cGRhdGUoKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1OTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFy
S2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZlckFzSGV4U3RyaW5nKTogSGVs
cGVyIG1ldGhvZCB0byBjb252ZXJ0IGEKKyAgICAgICAgc2hhcmVkIGJ1ZmZlciBjb250YWluaW5n
IGJ5dGVzIGludG8gYSBoZXggc3RyaW5nLCB1c2VmdWwgZm9yIGRlYnVnCisgICAgICAgIHByaW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0
cmluZyBjb25zdCk6IFVzZXMgdGhlCisgICAgICAgIGhlbHBlciB0byByZXR1cm4gYSBzdHJpbmcg
Y29udGFpbmluZyB0aGUgaGV4IHZhbHVlcyBvZiB0aGUga2V5IElELgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KTogRGl0
dG8KKyAgICAgICAgZm9yIHRoZSBrZXkgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KTogQWRkZWQgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gcmVmYWN0b3IKKyAgICAgICAgdXBk
YXRlTGljZW5zZSdzIGR1cGxpY2F0aW9uIG9mIGNvbXBhcmlzb25zLgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I8KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Np
b25DbGVhcktleTo6dXBkYXRlTGljZW5zZSk6IFJlZmFjdG9yIHRvCisgICAgICAgIHJlbHkgb24g
ZXF1YWxpdHkgY29tcGFyaXNvbnMgaW4gb25lIHBsYWNlLCB0aGUga2V5IGNsYXNzLCBhbmQgdG8K
KyAgICAgICAgcmVtb3ZlIHRob3JueSBvcGVuLWNvZGVkIG1lbWNtcCdzIGluIHRoZSBtaWRkbGUg
b2YgY29uZGl0aW9uYWxzCisgICAgICAgIHdoaWNoIG1hZGUgdGhlIG1ldGhvZCB1bm5lY2Vzc2Fy
aWx5IGhhcmQgdG8gcmVhc29uIGFib3V0LiBUaGUKKyAgICAgICAgZXh0cmEgY29weWluZyBvZiB0
aGUga2V5IHN0YXR1cyB2ZWN0b3IgZnJvbSB0aGUga2V5IHN0b3JlIGhhcyBiZWVuCisgICAgICAg
IGVsaW1pbmF0ZWQsIGluc3RlYWQgdGhlIHZlY3RvciBpcyBzb3J0ZWQgaW4tcGxhY2UgZGlyZWN0
bHkgaW5zaWRlCisgICAgICAgIHRoZSBIYXNoTWFwLCB3aGljaCBhbHNvIGNsZWFuZWQgdXAgdGhl
IG1ldGhvZCBmdXJ0aGVyLgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFy
a2V5L0NETUNsZWFyS2V5Lmg6CisKIDIwMjAtMDEtMDcgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBNZWRpYVJlY29yZGVyIGJhY2tlbmQgaW4g
R1BVUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IDkxNjFmNDU0NWY3
NTgwNzVkMjQ5N2RlOTI0YzAwMTRiNDc2OTRlYjkuLjc4NzNiZTgzMjlmNzhmYzAxM2E5ZDEzMDUz
ZTVjM2M0NmM5MmQwZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTM0LDEx
ICszNCwxNCBAQAogI2luY2x1ZGUgIkNETUtleVN5c3RlbUNvbmZpZ3VyYXRpb24uaCIKICNpbmNs
dWRlICJDRE1SZXN0cmljdGlvbnMuaCIKICNpbmNsdWRlICJDRE1TZXNzaW9uVHlwZS5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MzcsNiArNTQwLDQ3IEBAIFJlZlB0cjxD
RE1JbnN0YW5jZVNlc3Npb24+IENETUluc3RhbmNlQ2xlYXJLZXk6OmNyZWF0ZVNlc3Npb24oKQog
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXkoKSk7CiB9
CiAKK3N0YXRpYyBTdHJpbmcgc2hhcmVkQnVmZmVyQXNIZXhTdHJpbmcoY29uc3QgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4mIGJ1ZikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Cisg
ICAgZm9yICh1bnNpZ25lZCBieXRlT2Zmc2V0ID0gMDsgYnl0ZU9mZnNldCA8IGJ1Zi0+c2l6ZSgp
OyBieXRlT2Zmc2V0KyspIHsKKyAgICAgICAgY29uc3QgdWludDhfdCBieXRlID0gYnVmLT5kYXRh
KClbYnl0ZU9mZnNldF07CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGhleChieXRlKSk7
CisgICAgICAgIGlmIChieXRlT2Zmc2V0IDwgYnVmLT5zaXplKCkgLSAxKQorICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5
SURBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBzaGFyZWRC
dWZmZXJBc0hleFN0cmluZyhrZXlJRERhdGEpLCAiXSIpOworfQorCitTdHJpbmcgQ0RNSW5zdGFu
Y2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bWFrZVN0cmluZygiWyIsIHNoYXJlZEJ1ZmZlckFzSGV4U3RyaW5nKGtleVZhbHVlRGF0YSksICJd
Iik7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkm
IGsxLCBjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGsyKQoreworICAgIEFTU0VSVChr
MS5rZXlJRERhdGEpOworICAgIEFTU0VSVChrMi5rZXlJRERhdGEpOworCisgICAgcmV0dXJuICpr
MS5rZXlJRERhdGEgPT0gKmsyLmtleUlERGF0YTsKK30KKworYm9vbCBvcGVyYXRvcjwoY29uc3Qg
Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5ICZrMSwgY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6
S2V5ICZrMikKK3sKKyAgICBBU1NFUlQoazEua2V5SUREYXRhKTsKKyAgICBBU1NFUlQoazIua2V5
SUREYXRhKTsKKworICAgIGlmIChrMS5rZXlJRERhdGEtPnNpemUoKSAhPSBrMi5rZXlJRERhdGEt
PnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGsxLmtleUlERGF0YS0+c2l6ZSgpIDwgazIua2V5SURE
YXRhLT5zaXplKCk7CisKKyAgICByZXR1cm4gbWVtY21wKGsxLmtleUlERGF0YS0+ZGF0YSgpLCBr
Mi5rZXlJRERhdGEtPmRhdGEoKSwgazEua2V5SUREYXRhLT5zaXplKCkpOworfQorCiB2b2lkIENE
TUluc3RhbmNlU2Vzc2lvbkNsZWFyS2V5OjpyZXF1ZXN0TGljZW5zZShMaWNlbnNlVHlwZSwgY29u
c3QgQXRvbVN0cmluZyYgaW5pdERhdGFUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIGluaXREYXRh
LCBMaWNlbnNlQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBzdGF0aWMgdWludDMyX3Qgc19z
ZXNzaW9uSWRWYWx1ZSA9IDA7CkBAIC01NzIsNzIgKzYxNiw1MiBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYgc2Vzc2lvbklkLCBM
aWNlbnNlVAogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9OwogCi0gICAgLy8gUGFyc2Ug
dGhlIHJlc3BvbnNlIGJ1ZmZlciBhcyBhbiBKU09OIG9iamVjdC4KICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiByb290ID0gcGFyc2VKU09OT2JqZWN0KHJlc3BvbnNlKTsKICAgICBpZiAoIXJvb3Qp
IHsKICAgICAgICAgZGlzcGF0Y2hDYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0LCBTdWNjZXNz
VmFsdWU6OkZhaWxlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBQYXJzZSB0
aGUgcmVzcG9uc2UgdXNpbmcgJ2xpY2Vuc2UnIGZvcm1hdHRpbmcsIGlmIHBvc3NpYmxlLgorICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIHVwZGF0aW5nIGxpY2Vuc2UgZm9yIHNlc3Npb24g
JXMiLCBzZXNzaW9uSWQudXRmOCgpLmRhdGEoKSk7CisKICAgICBpZiAoYXV0byBkZWNvZGVkS2V5
cyA9IHBhcnNlTGljZW5zZUZvcm1hdCgqcm9vdCkpIHsKICAgICAgICAgLy8gUmV0cmlldmUgdGhl
IHRhcmdldCBWZWN0b3Igb2YgS2V5IG9iamVjdHMgZm9yIHRoaXMgc2Vzc2lvbi4KLSAgICAgICAg
YXV0byYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0ZTo6c2luZ2xldG9uKCkua2V5cygpLmVuc3Vy
ZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+
IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhp
cyBzdGF0ZSBtYW5hZ2VtZW50IGNvZGUuCisgICAgICAgIFZlY3RvcjxDRE1JbnN0YW5jZUNsZWFy
S2V5OjpLZXk+JiBrZXlWZWN0b3IgPSBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCku
ZW5zdXJlKHNlc3Npb25JZCwgW10geyByZXR1cm4gVmVjdG9yPENETUluc3RhbmNlQ2xlYXJLZXk6
OktleT4geyB9OyB9KS5pdGVyYXRvci0+dmFsdWU7CiAKLSAgICAgICAgLy8gRm9yIGVhY2ggZGVj
b2RlZCBrZXksIGZpbmQgYW4gZXhpc3RpbmcgaXRlbSBmb3IgdGhlIGRlY29kZWQga2V5J3MgSUQu
IElmIG5vbmUgZXhpc3QsCi0gICAgICAgIC8vIHRoZSBrZXkgaXMgZGVjb2RlZC4gT3RoZXJ3aXNl
LCB0aGUga2V5IGlzIHVwZGF0ZWQgaW4gY2FzZSB0aGVyZSdzIGEgbWlzbWF0Y2ggYmV0d2Vlbgot
ICAgICAgICAvLyB0aGUgc2l6ZSBvciBkYXRhIG9mIHRoZSBleGlzdGluZyBhbmQgcHJvcG9zZWQg
a2V5LgogICAgICAgICBib29sIGtleXNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0
byYga2V5IDogKmRlY29kZWRLZXlzKSB7Ci0gICAgICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5k
X2lmKGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCi0gICAgICAgICAgICAgICAg
WyZrZXldIChjb25zdCBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXkmIGNvbnRhaW5lZEtleSkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVkS2V5LmtleUlERGF0YS0+c2l6ZSgp
ID09IGtleS5rZXlJRERhdGEtPnNpemUoKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXN0
ZDo6bWVtY21wKGNvbnRhaW5lZEtleS5rZXlJRERhdGEtPmRhdGEoKSwga2V5LmtleUlERGF0YS0+
ZGF0YSgpLCBjb250YWluZWRLZXkua2V5SUREYXRhLT5zaXplKCkpOworICAgICAgICBmb3IgKGF1
dG8mIGRlY29kZWRLZXkgOiAqZGVjb2RlZEtleXMpIHsKKyAgICAgICAgICAgIExPRyhFTUUsICJF
TUUgLSBDbGVhcktleSAtIERlY29kZWQgYSBrZXkgd2l0aCBJRCAlcyBhbmQga2V5IGRhdGEgJXMi
LCBkZWNvZGVkS2V5LmtleUlEQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBkZWNvZGVkS2V5Lmtl
eVZhbHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGF1dG8ga2V5V2l0
aE1hdGNoaW5nS2V5SUQgPSBzdGQ6OmZpbmRfaWYoa2V5VmVjdG9yLmJlZ2luKCksIGtleVZlY3Rv
ci5lbmQoKSwKKyAgICAgICAgICAgICAgICBbJmRlY29kZWRLZXldIChjb25zdCBDRE1JbnN0YW5j
ZUNsZWFyS2V5OjpLZXkmIGNvbnRhaW5lZEtleSkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29udGFpbmVkS2V5ID09IGRlY29kZWRLZXk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICBpZiAoaXQgIT0ga2V5VmVjdG9yLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byYgZXhpc3RpbmdLZXkgPSBpdC0+a2V5VmFsdWVEYXRhOwotICAgICAgICAgICAgICAgIGF1dG8m
IHByb3Bvc2VkS2V5ID0ga2V5LmtleVZhbHVlRGF0YTsKKyAgICAgICAgICAgIGlmIChrZXlXaXRo
TWF0Y2hpbmdLZXlJRCAhPSBrZXlWZWN0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBMT0co
RU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBFeGlzdGluZyBrZXkgZm91bmQgd2l0aCBkYXRhICVzIiwg
a2V5V2l0aE1hdGNoaW5nS2V5SUQtPmtleVZhbHVlQXNTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
IAotICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgS2V5IGlmIGl0IGRpZmZl
cnMgZnJvbSB0aGUgcHJvcG9zZWQga2V5IGluIGtleSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBp
ZiAoZXhpc3RpbmdLZXktPnNpemUoKSAhPSBwcm9wb3NlZEtleS0+c2l6ZSgpIHx8IHN0ZDo6bWVt
Y21wKGV4aXN0aW5nS2V5LT5kYXRhKCksIHByb3Bvc2VkS2V5LT5kYXRhKCksIGV4aXN0aW5nS2V5
LT5zaXplKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICppdCA9IFdURk1vdmUoa2V5KTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWtleVdpdGhNYXRjaGluZ0tleUlELT5oYXNTYW1lS2V5VmFsdWUo
ZGVjb2RlZEtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFy
S2V5IC0gVXBkYXRpbmcga2V5IHNpbmNlIHRoZSBkYXRhIGFyZSBkaWZmZXJlbnQiKTsKKyAgICAg
ICAgICAgICAgICAgICAgKmtleVdpdGhNYXRjaGluZ0tleUlEID0gV1RGTW92ZShkZWNvZGVkS2V5
KTsKICAgICAgICAgICAgICAgICAgICAga2V5c0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBh
IEtleSBmb3IgdGhpcyBrZXkgSUQgZG9lc24ndCBleGlzdCB5ZXQsIGFwcGVuZCB0aGUgbmV3IG9u
ZSB0byBrZXlWZWN0b3IuCi0gICAgICAgICAgICAgICAga2V5VmVjdG9yLmFwcGVuZChXVEZNb3Zl
KGtleSkpOworICAgICAgICAgICAgICAgIExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFRoaXMg
aXMgYSBuZXcga2V5Iik7CisgICAgICAgICAgICAgICAga2V5VmVjdG9yLmFwcGVuZChXVEZNb3Zl
KGRlY29kZWRLZXkpKTsKICAgICAgICAgICAgICAgICBrZXlzQ2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJbiBjYXNlIG9mIGNoYW5nZWQga2V5
cywgd2UgaGF2ZSB0byBwcm92aWRlIGEgS2V5U3RhdHVzVmVjdG9yIG9mIGFsbCB0aGUga2V5cyBm
b3IKLSAgICAgICAgLy8gdGhpcyBzZXNzaW9uLgorICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xl
YXJLZXkgLSBVcGRhdGUgaGFzIHByb3ZpZGVkICV6dSBrZXlzIiwga2V5VmVjdG9yLnNpemUoKSk7
CisKICAgICAgICAgT3B0aW9uYWw8S2V5U3RhdHVzVmVjdG9yPiBjaGFuZ2VkS2V5czsKICAgICAg
ICAgaWYgKGtleXNDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAvLyBGaXJzdCBhIGhlbHBlciBWZWN0
b3IgaXMgY29uc3RydWN0ZWQsIGNvdGFpbmluZyBwYWlycyBvZiBTaGFyZWRCdWZmZXIgUmVmUHRy
cwotICAgICAgICAgICAgLy8gcmVwcmVzZW50aW50IGtleSBJRCBkYXRhLCBhbmQgdGhlIGNvcnJl
c3BvbmRpbmcga2V5IHN0YXR1c2VzLgotICAgICAgICAgICAgLy8gV2UgY2FuJ3QgdXNlIEtleVN0
YXR1c1ZlY3RvciBoZXJlIGJlY2F1c2UgdGhpcyBWZWN0b3IgaGFzIHRvIGJlIHNvcnRlZCwgd2hp
Y2gKLSAgICAgICAgICAgIC8vIGlzIG5vdCBwb3NzaWJsZSB0byBkbyBvbiBSZWY8PiBvYmplY3Rz
LgotICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8U2hhcmVkQnVmZmVyPiwgS2V5
U3RhdHVzPj4ga2V5czsKLSAgICAgICAgICAgIGtleXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShr
ZXlWZWN0b3Iuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaXQgOiBrZXlWZWN0b3Ip
Ci0gICAgICAgICAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFJlZlB0cjxT
aGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgaXQua2V5SUREYXRhLCBpdC5zdGF0dXMgfSk7Ci0K
LSAgICAgICAgICAgIC8vIFNvcnQgZmlyc3QgYnkgc2l6ZSwgc2Vjb25kIGJ5IGRhdGEuCi0gICAg
ICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpLAotICAgICAgICAgICAg
ICAgIFtdIChjb25zdCBhdXRvJiBhLCBjb25zdCBhdXRvJiBiKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhLmZpcnN0LT5zaXplKCkgIT0gYi5maXJzdC0+c2l6ZSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3QtPnNpemUoKSA8IGIuZmlyc3QtPnNpemUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptZW1jbXAoYS5maXJzdC0+ZGF0YSgpLCBi
LmZpcnN0LT5kYXRhKCksIGEuZmlyc3QtPnNpemUoKSkgPCAwOwotICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgLy8gU29ydCBieSBrZXkgSURzLgorICAgICAgICAgICAgc3RkOjpzb3J0
KGtleVZlY3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCkpOwogCi0gICAgICAgICAgICAvLyBG
aW5hbGx5IGNvbnN0cnVjdCB0aGUgbWlycm9yaW5nIEtleVN0YXR1c1ZlY3RvciBvYmplY3QgYW5k
IG1vdmUgaXQgaW50byB0aGUKLSAgICAgICAgICAgIC8vIE9wdGlvbmFsPD4gb2JqZWN0IHRoYXQg
d2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLgogICAgICAgICAgICAgS2V5U3RhdHVzVmVj
dG9yIGtleVN0YXR1c1ZlY3RvcjsKLSAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGtleXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaXQg
OiBrZXlzKQotICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
c3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKml0LmZpcnN0LCBpdC5z
ZWNvbmQgfSk7CisgICAgICAgICAgICBrZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShrZXlWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5
VmVjdG9yKQorICAgICAgICAgICAgICAgIGtleVN0YXR1c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
c3RkOjpwYWlyPFJlZjxTaGFyZWRCdWZmZXI+LCBLZXlTdGF0dXM+IHsgKmtleS5rZXlJRERhdGEs
IGtleS5zdGF0dXMgfSk7CiAKICAgICAgICAgICAgIGNoYW5nZWRLZXlzID0gV1RGTW92ZShrZXlT
dGF0dXNWZWN0b3IpOwogICAgICAgICB9CkBAIC02NDYsNyArNjcwLDYgQEAgdm9pZCBDRE1JbnN0
YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmIHNlc3Npb25J
ZCwgTGljZW5zZVQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFBhcnNlIHRoZSBy
ZXNwb25zZSB1c2luZyAnbGljZW5zZSByZWxlYXNlIGFja25vd2xlZGdlbWVudCcgZm9ybWF0dGlu
ZywgaWYgcG9zc2libGUuCiAgICAgaWYgKHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1l
bnRGb3JtYXQoKnJvb3QpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBSZXRyaWV2ZSB0aGUga2V5IElE
IGluZm9ybWF0aW9uIGFuZCB1c2UgaXQgdG8gdmFsaWRhdGUgdGhlIGtleXMgZm9yIHRoaXMgc2Vz
c2lvbklkLgogICAgICAgICBDbGVhcktleVN0YXRlOjpzaW5nbGV0b24oKS5rZXlzKCkucmVtb3Zl
KHNlc3Npb25JZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAppbmRleCA3ZDY2NjRkOTJmMDE1
ZDczODM3NWE2MDA5M2I4ZjMzYjNmMTBiMTQ1Li44NWIzMTliMWEzOGMxMjE2OTkxOTc1YjgwMTlh
ZDJiMTZiMzZjMTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmgKQEAgLTExMCw2ICsxMTAs
MjYgQEAgcHVibGljOgogICAgICAgICBDRE1JbnN0YW5jZVNlc3Npb246OktleVN0YXR1cyBzdGF0
dXM7CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUlERGF0YTsKICAgICAgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4ga2V5VmFsdWVEYXRhOworCisgICAgICAgIFN0cmluZyBrZXlJREFz
U3RyaW5nKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBrZXlWYWx1ZUFzU3RyaW5nKCkgY29uc3Q7
CisKKyAgICAgICAgYm9vbCBoYXNTYW1lS2V5VmFsdWUoY29uc3QgS2V5ICZvdGhlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKGtleVZhbHVlRGF0YSk7CisgICAgICAgICAgICBBU1NF
UlQob3RoZXIua2V5VmFsdWVEYXRhKTsKKyAgICAgICAgICAgIHJldHVybiAqa2V5VmFsdWVEYXRh
ID09ICpvdGhlci5rZXlWYWx1ZURhdGE7CisgICAgICAgIH0KKworICAgICAgICAvLyBUd28ga2V5
cyBhcmUgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIElELCBpZ25vcmluZyBrZXkgdmFsdWUg
YW5kIHN0YXR1cy4KKyAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXkgJmsx
LCBjb25zdCBLZXkgJmsyKTsKKyAgICAgICAgLy8gS2V5J3MgYXJlIG9yZGVyZWQgYnkgdGhlaXIg
SURzLCBmaXJzdCBieSBzaXplLCB0aGVuIGJ5IGNvbnRlbnRzLgorICAgICAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcjwoY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7CisKKyAgICAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJldHVy
biAhKG9wZXJhdG9yPT0oazEsIGsyKSk7IH0KKyAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcj09KGsxLCBr
MikgJiYgIW9wZXJhdG9yPChrMSwgazIpOyB9CisgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PD0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPihrMSwg
azIpOyB9CisgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPj0oY29uc3QgS2V5ICZrMSwgY29u
c3QgS2V5ICZrMikgeyByZXR1cm4gIW9wZXJhdG9yPChrMSwgazIpOyB9CiAgICAgfTsKIAogICAg
IFJlZlB0cjxQcm94eUNETT4gcHJveHlDRE0oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Byb3h5
Q0RNOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387321</attachid>
            <date>2020-01-10 02:58:43 -0800</date>
            <delta_ts>2020-01-10 04:32:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205999-20200110105842.patch</filename>
            <type>text/plain</type>
            <size>14339</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZkNzVhZDAyOWIyYWVh
MzUzN2YyN2JmOGJjYTgwOTM1MGU1NTZkYS4uYzJjN2Q3Mzk3MTBhZWMwNGQ2OTgyOTUyNWZhOTg2
ODU3ZTBkNjUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTAxLTEwICBDaGFy
bGllIFR1cm5lciAgPG1haWxAY2hhcmxlcy5wbHVzPgorCisgICAgICAgIFtFTUVdW0NsZWFyS2V5
XSBSZWZhY3RvciBDRE1JbnN0YW5jZUNsZWFyS2V5Ojp1cGRhdGVMaWNlbnNlKCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTk5OQorCisgICAgICAg
IFJldmlld2VkIGJ5IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjp0b0hleFN0cmluZyBjb25zdCk6IEhl
bHBlciB1dGlsaXR5IHRvIHZpZXcKKyAgICAgICAgYSBzaGFyZWQgYnVmZmVyJ3MgY29udGVudHMg
YXMgYSBoZXggc3RyaW5nLgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmlu
ZyBjb25zdCk6IFVzZXMgdGhlCisgICAgICAgIG5ldyB1dGlsaXR5IHRvIHJldHVybiBhIGhleCBz
dHJpbmcgb2YgdGhlIGtleSBJRCBmb3IgZGVidWdnaW5nLgorICAgICAgICAoV2ViQ29yZTo6Q0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5OjprZXlWYWx1ZUFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAg
RGl0dG8sIGJ1dCBmb3IgdGhlIGtleSBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6IEFkZGVkIGNvbXBhcmlzb24gb3BlcmF0aW9ucyB0bworICAgICAgICBDRE1JbnN0YW5jZUNs
ZWFyS2V5OjpLZXkgdG8gY2xlYW51cCBjb2RlIGluIHVwZGF0ZUxpY2Vuc2UuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjwpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9u
Q2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2UpOiBSZWZhY3RvcmVkCisgICAgICAgIHRvIHVzZSBvcGVy
YXRvcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgY2xhc3MsIHNvIGFzIHRvIGF2b2lkCisgICAg
ICAgIG9wZW4tY29kZWQgbWVtY21wJ3MgaW4gdGhlIG1pZGRsZSBvZiBjb25kaXRpb25hbHMgYW5k
IG90aGVyCisgICAgICAgIHRlY2huaXF1ZXMgdGhhdCBtYWRlIHRoZSBjb2RlIGhhcmRlciB0byBy
ZWFkIHRoYXQgbmVjZXNzYXJ5LgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2Ns
ZWFya2V5L0NETUNsZWFyS2V5Lmg6CisKIDIwMjAtMDEtMDcgIHlvdWVubiBmYWJsZXQgIDx5b3Vl
bm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBNZWRpYVJlY29yZGVyIGJhY2tlbmQg
aW4gR1BVUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5k
ZXggNWMzZTAzNDVjOTkxNzMzMTIzNzRhZmIzN2MxOTIwMzMwZTgwOGFkYy4uMjRkMjBiNjQ2OGJh
ZjdlN2VmMmNiMzBlZTYxZDY4MmRmMjUxMzVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuY3BwCkBAIC0yOSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgog
I2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjhDb252
ZXJzaW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEzMiw2ICsxMzQsMTYgQEAgU2hh
cmVkQnVmZmVyRGF0YVZpZXcgU2hhcmVkQnVmZmVyOjpnZXRTb21lRGF0YShzaXplX3QgcG9zaXRp
b24pIGNvbnN0CiAgICAgcmV0dXJuIHsgZWxlbWVudC0+c2VnbWVudC5jb3B5UmVmKCksIHBvc2l0
aW9uIC0gZWxlbWVudC0+YmVnaW5Qb3NpdGlvbiB9OwogfQogCitTdHJpbmcgU2hhcmVkQnVmZmVy
Ojp0b0hleFN0cmluZygpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OworICAgIGZvciAodW5zaWduZWQgYnl0ZU9mZnNldCA9IDA7IGJ5dGVPZmZzZXQgPCBzaXplKCk7
IGJ5dGVPZmZzZXQrKykgeworICAgICAgICBjb25zdCB1aW50OF90IGJ5dGUgPSBkYXRhKClbYnl0
ZU9mZnNldF07CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHBhZCgnMCcsIDIsIGhleChi
eXRlKSkpOworICAgIH0KKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQor
CiBSZWZQdHI8QXJyYXlCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6dHJ5Q3JlYXRlQXJyYXlCdWZmZXIo
KSBjb25zdAogewogICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSwgc2l6ZW9mKGNoYXIp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggMGNkOGI1NGZhNWVh
MTc1ZGE3MzU2NGMxMGQ4NGFmNDgyNjAwZDIyZS4uNWZiZjAzNmMwM2NiM2IyMTkzNDQ3MDQyMjY4
OWQ2Y2I2NTIxZTk0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKQEAg
LTE5OCw2ICsxOTgsOCBAQCBwdWJsaWM6CiAgICAgLy8gYmVnaW4gYW5kIGVuZCB0YWtlIE8oMSkg
dGltZSwgdGhpcyB0YWtlcyBPKGxvZyhOKSkgdGltZS4KICAgICBTaGFyZWRCdWZmZXJEYXRhVmll
dyBnZXRTb21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0OwogCisgICAgU3RyaW5nIHRvSGV4
U3RyaW5nKCkgY29uc3Q7CisKICAgICB2b2lkIGhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKCkgY29u
c3Q7CiAKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpEZWNvZGVyIGRlY29kZXIoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5
L0NETUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAppbmRleCA5MTYxZjQ1NDVmNzU4MDc1ZDI0OTdkZTky
NGMwMDE0YjQ3Njk0ZWI5Li42NDg1ZGI3NWQ3ZTczMzliMTU2MWRjNmQ1OGVmMjljOWIzMTIzNTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVh
cmtleS9DRE1DbGVhcktleS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiQ0RNS2V5U3lzdGVtQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkNETVJlc3RyaWN0
aW9ucy5oIgogI2luY2x1ZGUgIkNETVNlc3Npb25UeXBlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTUzNyw2ICs1MzgsMzUgQEAgUmVmUHRy
PENETUluc3RhbmNlU2Vzc2lvbj4gQ0RNSW5zdGFuY2VDbGVhcktleTo6Y3JlYXRlU2Vzc2lvbigp
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleSgpKTsK
IH0KIAorU3RyaW5nIENETUluc3RhbmNlQ2xlYXJLZXk6OktleTo6a2V5SURBc1N0cmluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlsiLCBrZXlJRERhdGEtPnRvSGV4U3RyaW5n
KCksICJdIik7Cit9CisKK1N0cmluZyBDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk6OmtleVZhbHVl
QXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJbIiwga2V5VmFsdWVE
YXRhLT50b0hleFN0cmluZygpLCAiXSIpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5JiBrMSwgY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5
JiBrMikKK3sKKyAgICBBU1NFUlQoazEua2V5SUREYXRhKTsKKyAgICBBU1NFUlQoazIua2V5SURE
YXRhKTsKKworICAgIHJldHVybiAqazEua2V5SUREYXRhID09ICprMi5rZXlJRERhdGE7Cit9CisK
K2Jvb2wgb3BlcmF0b3I8KGNvbnN0IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazEsIGNvbnN0
IENETUluc3RhbmNlQ2xlYXJLZXk6OktleSYgazIpCit7CisgICAgQVNTRVJUKGsxLmtleUlERGF0
YSk7CisgICAgQVNTRVJUKGsyLmtleUlERGF0YSk7CisKKyAgICBpZiAoazEua2V5SUREYXRhLT5z
aXplKCkgIT0gazIua2V5SUREYXRhLT5zaXplKCkpCisgICAgICAgIHJldHVybiBrMS5rZXlJRERh
dGEtPnNpemUoKSA8IGsyLmtleUlERGF0YS0+c2l6ZSgpOworCisgICAgcmV0dXJuIG1lbWNtcChr
MS5rZXlJRERhdGEtPmRhdGEoKSwgazIua2V5SUREYXRhLT5kYXRhKCksIGsxLmtleUlERGF0YS0+
c2l6ZSgpKTsKK30KKwogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6cmVxdWVzdExp
Y2Vuc2UoTGljZW5zZVR5cGUsIGNvbnN0IEF0b21TdHJpbmcmIGluaXREYXRhVHlwZSwgUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBpbml0RGF0YSwgTGljZW5zZUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAg
ICAgc3RhdGljIHVpbnQzMl90IHNfc2Vzc2lvbklkVmFsdWUgPSAwOwpAQCAtNTcyLDcyICs2MDIs
NTIgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25DbGVhcktleTo6dXBkYXRlTGljZW5zZShjb25z
dCBTdHJpbmcmIHNlc3Npb25JZCwgTGljZW5zZVQKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfTsKIAotICAgIC8vIFBhcnNlIHRoZSByZXNwb25zZSBidWZmZXIgYXMgYW4gSlNPTiBvYmpl
Y3QuCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcm9vdCA9IHBhcnNlSlNPTk9iamVjdChyZXNw
b25zZSk7CiAgICAgaWYgKCFyb290KSB7CiAgICAgICAgIGRpc3BhdGNoQ2FsbGJhY2soZmFsc2Us
IFdURjo6bnVsbG9wdCwgU3VjY2Vzc1ZhbHVlOjpGYWlsZWQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgLy8gUGFyc2UgdGhlIHJlc3BvbnNlIHVzaW5nICdsaWNlbnNlJyBmb3JtYXR0
aW5nLCBpZiBwb3NzaWJsZS4KKyAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSB1cGRhdGlu
ZyBsaWNlbnNlIGZvciBzZXNzaW9uICVzIiwgc2Vzc2lvbklkLnV0ZjgoKS5kYXRhKCkpOworCiAg
ICAgaWYgKGF1dG8gZGVjb2RlZEtleXMgPSBwYXJzZUxpY2Vuc2VGb3JtYXQoKnJvb3QpKSB7CiAg
ICAgICAgIC8vIFJldHJpZXZlIHRoZSB0YXJnZXQgVmVjdG9yIG9mIEtleSBvYmplY3RzIGZvciB0
aGlzIHNlc3Npb24uCi0gICAgICAgIGF1dG8mIGtleVZlY3RvciA9IENsZWFyS2V5U3RhdGU6OnNp
bmdsZXRvbigpLmtleXMoKS5lbnN1cmUoc2Vzc2lvbklkLCBbXSB7IHJldHVybiBWZWN0b3I8Q0RN
SW5zdGFuY2VDbGVhcktleTo6S2V5PiB7IH07IH0pLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAg
Ly8gRklYTUU6IFJlZmFjdG9yIHRoaXMgc3RhdGUgbWFuYWdlbWVudCBjb2RlLgorICAgICAgICBW
ZWN0b3I8Q0RNSW5zdGFuY2VDbGVhcktleTo6S2V5PiYga2V5VmVjdG9yID0gQ2xlYXJLZXlTdGF0
ZTo6c2luZ2xldG9uKCkua2V5cygpLmVuc3VyZShzZXNzaW9uSWQsIFtdIHsgcmV0dXJuIFZlY3Rv
cjxDRE1JbnN0YW5jZUNsZWFyS2V5OjpLZXk+IHsgfTsgfSkuaXRlcmF0b3ItPnZhbHVlOwogCi0g
ICAgICAgIC8vIEZvciBlYWNoIGRlY29kZWQga2V5LCBmaW5kIGFuIGV4aXN0aW5nIGl0ZW0gZm9y
IHRoZSBkZWNvZGVkIGtleSdzIElELiBJZiBub25lIGV4aXN0LAotICAgICAgICAvLyB0aGUga2V5
IGlzIGRlY29kZWQuIE90aGVyd2lzZSwgdGhlIGtleSBpcyB1cGRhdGVkIGluIGNhc2UgdGhlcmUn
cyBhIG1pc21hdGNoIGJldHdlZW4KLSAgICAgICAgLy8gdGhlIHNpemUgb3IgZGF0YSBvZiB0aGUg
ZXhpc3RpbmcgYW5kIHByb3Bvc2VkIGtleS4KICAgICAgICAgYm9vbCBrZXlzQ2hhbmdlZCA9IGZh
bHNlOwotICAgICAgICBmb3IgKGF1dG8mIGtleSA6ICpkZWNvZGVkS2V5cykgewotICAgICAgICAg
ICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZihrZXlWZWN0b3IuYmVnaW4oKSwga2V5VmVjdG9yLmVu
ZCgpLAotICAgICAgICAgICAgICAgIFsma2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6
S2V5JiBjb250YWluZWRLZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5l
ZEtleS5rZXlJRERhdGEtPnNpemUoKSA9PSBrZXkua2V5SUREYXRhLT5zaXplKCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICYmICFzdGQ6Om1lbWNtcChjb250YWluZWRLZXkua2V5SUREYXRhLT5k
YXRhKCksIGtleS5rZXlJRERhdGEtPmRhdGEoKSwgY29udGFpbmVkS2V5LmtleUlERGF0YS0+c2l6
ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBkZWNvZGVkS2V5IDogKmRlY29kZWRLZXlzKSB7Cisg
ICAgICAgICAgICBMT0coRU1FLCAiRU1FIC0gQ2xlYXJLZXkgLSBEZWNvZGVkIGEga2V5IHdpdGgg
SUQgJXMgYW5kIGtleSBkYXRhICVzIiwgZGVjb2RlZEtleS5rZXlJREFzU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgZGVjb2RlZEtleS5rZXlWYWx1ZUFzU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBhdXRvIGtleVdpdGhNYXRjaGluZ0tleUlEID0gc3RkOjpmaW5kX2lmKGtleVZl
Y3Rvci5iZWdpbigpLCBrZXlWZWN0b3IuZW5kKCksCisgICAgICAgICAgICAgICAgWyZkZWNvZGVk
S2V5XSAoY29uc3QgQ0RNSW5zdGFuY2VDbGVhcktleTo6S2V5JiBjb250YWluZWRLZXkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lZEtleSA9PSBkZWNvZGVkS2V5OwogICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGl0ICE9IGtleVZlY3Rvci5lbmQoKSkg
ewotICAgICAgICAgICAgICAgIGF1dG8mIGV4aXN0aW5nS2V5ID0gaXQtPmtleVZhbHVlRGF0YTsK
LSAgICAgICAgICAgICAgICBhdXRvJiBwcm9wb3NlZEtleSA9IGtleS5rZXlWYWx1ZURhdGE7Cisg
ICAgICAgICAgICBpZiAoa2V5V2l0aE1hdGNoaW5nS2V5SUQgIT0ga2V5VmVjdG9yLmVuZCgpKSB7
CisgICAgICAgICAgICAgICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gRXhpc3Rpbmcga2V5
IGZvdW5kIHdpdGggZGF0YSAlcyIsIGtleVdpdGhNYXRjaGluZ0tleUlELT5rZXlWYWx1ZUFzU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4
aXN0aW5nIEtleSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHByb3Bvc2VkIGtleSBpbiBrZXkgdmFs
dWUuCi0gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nS2V5LT5zaXplKCkgIT0gcHJvcG9zZWRL
ZXktPnNpemUoKSB8fCBzdGQ6Om1lbWNtcChleGlzdGluZ0tleS0+ZGF0YSgpLCBwcm9wb3NlZEtl
eS0+ZGF0YSgpLCBleGlzdGluZ0tleS0+c2l6ZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAq
aXQgPSBXVEZNb3ZlKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFrZXlXaXRoTWF0Y2hpbmdL
ZXlJRC0+aGFzU2FtZUtleVZhbHVlKGRlY29kZWRLZXkpKSB7CisgICAgICAgICAgICAgICAgICAg
IExPRyhFTUUsICJFTUUgLSBDbGVhcktleSAtIFVwZGF0aW5nIGtleSBzaW5jZSB0aGUgZGF0YSBh
cmUgZGlmZmVyZW50Iik7CisgICAgICAgICAgICAgICAgICAgICprZXlXaXRoTWF0Y2hpbmdLZXlJ
RCA9IFdURk1vdmUoZGVjb2RlZEtleSk7CiAgICAgICAgICAgICAgICAgICAgIGtleXNDaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIEluIGNhc2UgYSBLZXkgZm9yIHRoaXMga2V5IElEIGRvZXNuJ3QgZXhpc3Qg
eWV0LCBhcHBlbmQgdGhlIG5ldyBvbmUgdG8ga2V5VmVjdG9yLgotICAgICAgICAgICAgICAgIGtl
eVZlY3Rvci5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICAgICAgICAgICAgICBMT0coRU1FLCAi
RU1FIC0gQ2xlYXJLZXkgLSBUaGlzIGlzIGEgbmV3IGtleSIpOworICAgICAgICAgICAgICAgIGtl
eVZlY3Rvci5hcHBlbmQoV1RGTW92ZShkZWNvZGVkS2V5KSk7CiAgICAgICAgICAgICAgICAga2V5
c0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8g
SW4gY2FzZSBvZiBjaGFuZ2VkIGtleXMsIHdlIGhhdmUgdG8gcHJvdmlkZSBhIEtleVN0YXR1c1Zl
Y3RvciBvZiBhbGwgdGhlIGtleXMgZm9yCi0gICAgICAgIC8vIHRoaXMgc2Vzc2lvbi4KKyAgICAg
ICAgTE9HKEVNRSwgIkVNRSAtIENsZWFyS2V5IC0gVXBkYXRlIGhhcyBwcm92aWRlZCAlenUga2V5
cyIsIGtleVZlY3Rvci5zaXplKCkpOworCiAgICAgICAgIE9wdGlvbmFsPEtleVN0YXR1c1ZlY3Rv
cj4gY2hhbmdlZEtleXM7CiAgICAgICAgIGlmIChrZXlzQ2hhbmdlZCkgewotICAgICAgICAgICAg
Ly8gRmlyc3QgYSBoZWxwZXIgVmVjdG9yIGlzIGNvbnN0cnVjdGVkLCBjb3RhaW5pbmcgcGFpcnMg
b2YgU2hhcmVkQnVmZmVyIFJlZlB0cnMKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGludCBrZXkg
SUQgZGF0YSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGtleSBzdGF0dXNlcy4KLSAgICAgICAgICAg
IC8vIFdlIGNhbid0IHVzZSBLZXlTdGF0dXNWZWN0b3IgaGVyZSBiZWNhdXNlIHRoaXMgVmVjdG9y
IGhhcyB0byBiZSBzb3J0ZWQsIHdoaWNoCi0gICAgICAgICAgICAvLyBpcyBub3QgcG9zc2libGUg
dG8gZG8gb24gUmVmPD4gb2JqZWN0cy4KLSAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIEtleVN0YXR1cz4+IGtleXM7Ci0gICAgICAgICAgICBrZXlzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGl0IDoga2V5VmVjdG9yKQotICAgICAgICAgICAgICAgIGtleXMudW5jaGVja2VkQXBw
ZW5kKHN0ZDo6cGFpcjxSZWZQdHI8U2hhcmVkQnVmZmVyPiwgS2V5U3RhdHVzPiB7IGl0LmtleUlE
RGF0YSwgaXQuc3RhdHVzIH0pOwotCi0gICAgICAgICAgICAvLyBTb3J0IGZpcnN0IGJ5IHNpemUs
IHNlY29uZCBieSBkYXRhLgotICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5
cy5lbmQoKSwKLSAgICAgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYg
YikgewotICAgICAgICAgICAgICAgICAgICBpZiAoYS5maXJzdC0+c2l6ZSgpICE9IGIuZmlyc3Qt
PnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmZpcnN0LT5zaXplKCkg
PCBiLmZpcnN0LT5zaXplKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWVt
Y21wKGEuZmlyc3QtPmRhdGEoKSwgYi5maXJzdC0+ZGF0YSgpLCBhLmZpcnN0LT5zaXplKCkpIDwg
MDsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIFNvcnQgYnkga2V5IElEcy4K
KyAgICAgICAgICAgIHN0ZDo6c29ydChrZXlWZWN0b3IuYmVnaW4oKSwga2V5VmVjdG9yLmVuZCgp
KTsKIAotICAgICAgICAgICAgLy8gRmluYWxseSBjb25zdHJ1Y3QgdGhlIG1pcnJvcmluZyBLZXlT
dGF0dXNWZWN0b3Igb2JqZWN0IGFuZCBtb3ZlIGl0IGludG8gdGhlCi0gICAgICAgICAgICAvLyBP
cHRpb25hbDw+IG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4KICAg
ICAgICAgICAgIEtleVN0YXR1c1ZlY3RvciBrZXlTdGF0dXNWZWN0b3I7Ci0gICAgICAgICAgICBr
ZXlTdGF0dXNWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlzLnNpemUoKSk7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGl0IDoga2V5cykKLSAgICAgICAgICAgICAgICBrZXlTdGF0dXNW
ZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3Rh
dHVzPiB7ICppdC5maXJzdCwgaXQuc2Vjb25kIH0pOworICAgICAgICAgICAga2V5U3RhdHVzVmVj
dG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5VmVjdG9yLnNpemUoKSk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIGtleSA6IGtleVZlY3RvcikKKyAgICAgICAgICAgICAgICBrZXlTdGF0dXNW
ZWN0b3IudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxSZWY8U2hhcmVkQnVmZmVyPiwgS2V5U3Rh
dHVzPiB7ICprZXkua2V5SUREYXRhLCBrZXkuc3RhdHVzIH0pOwogCiAgICAgICAgICAgICBjaGFu
Z2VkS2V5cyA9IFdURk1vdmUoa2V5U3RhdHVzVmVjdG9yKTsKICAgICAgICAgfQpAQCAtNjQ2LDcg
KzY1Niw2IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZUxpY2Vuc2Uo
Y29uc3QgU3RyaW5nJiBzZXNzaW9uSWQsIExpY2Vuc2VUCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICAvLyBQYXJzZSB0aGUgcmVzcG9uc2UgdXNpbmcgJ2xpY2Vuc2UgcmVsZWFzZSBhY2tu
b3dsZWRnZW1lbnQnIGZvcm1hdHRpbmcsIGlmIHBvc3NpYmxlLgogICAgIGlmIChwYXJzZUxpY2Vu
c2VSZWxlYXNlQWNrbm93bGVkZ2VtZW50Rm9ybWF0KCpyb290KSkgewogICAgICAgICAvLyBGSVhN
RTogUmV0cmlldmUgdGhlIGtleSBJRCBpbmZvcm1hdGlvbiBhbmQgdXNlIGl0IHRvIHZhbGlkYXRl
IHRoZSBrZXlzIGZvciB0aGlzIHNlc3Npb25JZC4KICAgICAgICAgQ2xlYXJLZXlTdGF0ZTo6c2lu
Z2xldG9uKCkua2V5cygpLnJlbW92ZShzZXNzaW9uSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5
LmgKaW5kZXggN2Q2NjY0ZDkyZjAxNWQ3MzgzNzVhNjAwOTNiOGYzM2IzZjEwYjE0NS4uODViMzE5
YjFhMzhjMTIxNjk5MTk3NWI4MDE5YWQyYjE2YjM2YzE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVh
cktleS5oCkBAIC0xMTAsNiArMTEwLDI2IEBAIHB1YmxpYzoKICAgICAgICAgQ0RNSW5zdGFuY2VT
ZXNzaW9uOjpLZXlTdGF0dXMgc3RhdHVzOwogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBr
ZXlJRERhdGE7CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleVZhbHVlRGF0YTsKKwor
ICAgICAgICBTdHJpbmcga2V5SURBc1N0cmluZygpIGNvbnN0OworICAgICAgICBTdHJpbmcga2V5
VmFsdWVBc1N0cmluZygpIGNvbnN0OworCisgICAgICAgIGJvb2wgaGFzU2FtZUtleVZhbHVlKGNv
bnN0IEtleSAmb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChrZXlWYWx1ZURh
dGEpOworICAgICAgICAgICAgQVNTRVJUKG90aGVyLmtleVZhbHVlRGF0YSk7CisgICAgICAgICAg
ICByZXR1cm4gKmtleVZhbHVlRGF0YSA9PSAqb3RoZXIua2V5VmFsdWVEYXRhOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVHdvIGtleXMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBJ
RCwgaWdub3Jpbmcga2V5IHZhbHVlIGFuZCBzdGF0dXMuCisgICAgICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2V5ICZrMSwgY29uc3QgS2V5ICZrMik7CisgICAgICAgIC8vIEtleSdz
IGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcywgZmlyc3QgYnkgc2l6ZSwgdGhlbiBieSBjb250ZW50
cy4KKyAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEtleSAmazEsIGNvbnN0IEtl
eSAmazIpOworCisgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgS2V5ICZrMSwg
Y29uc3QgS2V5ICZrMikgeyByZXR1cm4gIShvcGVyYXRvcj09KGsxLCBrMikpOyB9CisgICAgICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPihjb25zdCBLZXkgJmsxLCBjb25zdCBLZXkgJmsyKSB7IHJl
dHVybiAhb3BlcmF0b3I9PShrMSwgazIpICYmICFvcGVyYXRvcjwoazEsIGsyKTsgfQorICAgICAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsg
cmV0dXJuICFvcGVyYXRvcj4oazEsIGsyKTsgfQorICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IEtleSAmazEsIGNvbnN0IEtleSAmazIpIHsgcmV0dXJuICFvcGVyYXRvcjwoazEs
IGsyKTsgfQogICAgIH07CiAKICAgICBSZWZQdHI8UHJveHlDRE0+IHByb3h5Q0RNKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wcm94eUNETTsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGRmMDE5ZWMxNzliYjk2MGQ4OTYzZDNiYTFlM2Y2ZTk3
ZWQwZGY5OWMuLjBmNjZhNjFjZDU0MGIxNzg1MGIzYzRmNTBmNTQxNTlhY2JlYzE1NDcgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAyMC0wMS0xMCAgQ2hhcmxpZSBUdXJuZXIgIDxtYWlsQGNoYXJsZXMucGx1cz4KKwor
ICAgICAgICBbRU1FXVtDbGVhcktleV0gUmVmYWN0b3IgQ0RNQ2xlYXJLZXk6OnVwZGF0ZSgpCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU5OTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIgUm9kcmlndWV6LUNhbHZhci4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVF9GKTogQWRkZWQgYSB0ZXN0IGZvciB0aGUgbmV3IHRvSGV4U3Ry
aW5nCisgICAgICAgIGhlbHBlci4gSXQgc2hvdWxkIG1ha2Ugc3VyZSB0byB6ZXJvIHBhZCBlYWNo
IGJ5dGUgdG8gdHdvCisgICAgICAgIGNoYXJhY3RlcnMsIHNvIHRoYXQgaXQncyBlYXN5IHRvIHJl
YWQuCisKIDIwMjAtMDEtMDcgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBhbiBvcHRpb24gdG8gbWFrZSB2aWRlbyBjYXB0dXJlIGluIEdQVVByb2Nlc3MK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZm
ZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5j
cHAKaW5kZXggZWI5MmQ1MGI3YTQ3ODMyNGM3YjY5YjVhODk5ZDYzNzdiYjU5M2JhOC4uNzljNWRl
MjI3ZDlhMTUwMzVlZDQxMjI1MmQ2NDQxYjljY2UwMWMwYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTIxNyw0ICsyMTcs
MTUgQEAgVEVTVF9GKFNoYXJlZEJ1ZmZlclRlc3QsIGlzRXF1YWxUbykKICAgICBFWFBFQ1RfTkUo
bWFrZUJ1ZmZlcih7eydhJ30sIHsnYid9fSksIG1ha2VCdWZmZXIoe3snYSd9LCB7J2EnfX0pKTsK
IH0KIAorVEVTVF9GKFNoYXJlZEJ1ZmZlclRlc3QsIHRvSGV4U3RyaW5nKQoreworICAgIFZlY3Rv
cjxjaGFyPiB0MSA9IHsweDExLCAweDUsIDB4MTJ9OworICAgIGF1dG8gYnVmZmVyID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoKTsKKyAgICBidWZmZXItPmFwcGVuZChXVEZNb3ZlKHQxKSk7CisgICAg
U3RyaW5nIHJlc3VsdCA9IGJ1ZmZlci0+dG9IZXhTdHJpbmcoKTsKKyAgICBFWFBFQ1RfRVEocmVz
dWx0LCAiMTEwNTEyIik7CisgICAgYnVmZmVyLT5jbGVhcigpOworICAgIEVYUEVDVF9FUShidWZm
ZXItPnRvSGV4U3RyaW5nKCksICIiKTsKK30KKwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>