<?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>171420</bug_id>
          
          <creation_ts>2017-04-28 00:31:52 -0700</creation_ts>
          <short_desc>[GCrypt] AES_CTR support</short_desc>
          <delta_ts>2017-06-19 04:56:33 -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>New Bugs</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>
          
          <blocked>133122</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>buildbot</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302515</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-28 00:31:52 -0700</bug_when>
    <thetext>[GCrypt] AES_CTR support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302516</commentid>
    <comment_count>1</comment_count>
      <attachid>308507</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-28 00:32:23 -0700</bug_when>
    <thetext>Created attachment 308507
WIP

Works, but needs a simpler handling of wrap-around counters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302517</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-28 00:34:47 -0700</bug_when>
    <thetext>Attachment 308507 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:44:  gcryptAES_CTR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:201:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:229:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 4 in 4 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>1302554</commentid>
    <comment_count>3</comment_count>
      <attachid>308522</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-04-28 06:21:20 -0700</bug_when>
    <thetext>Created attachment 308522
Patch

Uploading the initial patch, cleaned up, working, but with the block-by-block fallback for wrapping counters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302555</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-28 06:23:28 -0700</bug_when>
    <thetext>Attachment 308522 did not pass style-queue:


ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:44:  gcryptAES_CTR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:204:  CryptoAlgorithmAES_CTR::platformEncrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:232:  CryptoAlgorithmAES_CTR::platformDecrypt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 4 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>1311063</commentid>
    <comment_count>5</comment_count>
      <attachid>308522</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-05-20 14:58:51 -0700</bug_when>
    <thetext>Comment on attachment 308522
Patch

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

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:42
&gt; +using GCryptCipherOperation = gcry_error_t(gcry_cipher_hd_t, void*, size_t, const void*, size_t);

This belongs in Utilities.h.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:69
&gt; +    // This is a helper functor that resets the cipher object, sets the provided counter data,
&gt; +    // and executes the encrypt or decrypt operation, retrieving and returning the output data.
&gt; +    auto callOperation =
&gt; +        [&amp;handle, &amp;operation](const Vector&lt;uint8_t&gt;&amp; counter, const uint8_t* inputData, const size_t inputSize) -&gt; std::optional&lt;Vector&lt;uint8_t&gt;&gt;

I don&apos;t see any reason to use a lambda here, when it could be a static function instead.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:101
&gt; +    {

Nice use of extra scoping.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:103
&gt; +        PAL::GCrypt::Handle&lt;gcry_mpi_t&gt; blockSizeMaskMPI(gcry_mpi_set_ui(nullptr, blockSize - 1));

Why is this named &quot;blockSizeMaskMPI&quot; if it is being used as part of an addition operation rather than a bitmask operation?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:114
&gt; +    gcry_mpi_mul_2exp(counterLimitMPI, counterLimitMPI, counterLength);

Same as in my review from a while back, this probably isn&apos;t worth worrying about at all as I doubt GCrypt will ever break this, but it will fail if GCrypt ever requires that the parameters be distinct.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:117
&gt; +    // the number of unique counter values we could procude for the specified counter

Did you mean &quot;produce&quot;?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:168
&gt; +    // FIXME: This should be optimized further by first encrypting the amount of blocks for
&gt; +    // which the counter won&apos;t yet wrap around, and then encrypting the rest of the blocks
&gt; +    // starting from the counter set to 0.

Is this not straightforward to implement?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:212
&gt; +            auto&amp; aesParameters = downcast&lt;CryptoAlgorithmAesCtrParams&gt;(*parameters);
&gt; +            auto&amp; aesKey = downcast&lt;CryptoKeyAES&gt;(key.get());
&gt; +
&gt; +            auto output = gcryptAES_CTR(gcry_cipher_encrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, plainText);

Can you think of any way to share more of the implementation of this function with the other CryptoAlgorithm classes? It looks like these three lines are the only ones that ever differ....

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:240
&gt; +            auto&amp; aesParameters = downcast&lt;CryptoAlgorithmAesCtrParams&gt;(*parameters);
&gt; +            auto&amp; aesKey = downcast&lt;CryptoKeyAES&gt;(key.get());
&gt; +
&gt; +            auto output = gcryptAES_CTR(gcry_cipher_decrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, cipherText);

Ditto. A follow-up patch should work on reducing code duplication between all the d ifferent platformEncrypt/Decrypt/Sign/Verify functions, in addition to the static functions at the top of the file. I think the only code that needs to differ is this bit here that converts the CryptoAlgorithmParameters and CryptoKey into a call to the algorithm (gcryptAES_CTR here).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1311984</commentid>
    <comment_count>6</comment_count>
      <attachid>308522</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-05-23 12:10:22 -0700</bug_when>
    <thetext>Comment on attachment 308522
Patch

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

Good job.

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:99
&gt; +    // Calculate the block count: ((inputText.size() + blockSize - 1) / blockSize), remainder discarded.

Potential overflow?

&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:125
&gt; +    if (counterLength == counter.size() * 8)

Have you confirmed that GCrypt will not fail once the counter reaches its max? As far as I know, different libraries seem to treat this differently. Some will throw exception/fail, but some will reset the counter, and then start from 0.

It is clever to have this early return though.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:212
&gt;&gt; +            auto output = gcryptAES_CTR(gcry_cipher_encrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, plainText);
&gt; 
&gt; Can you think of any way to share more of the implementation of this function with the other CryptoAlgorithm classes? It looks like these three lines are the only ones that ever differ....

Good point. I was thinking about doing this in Apple ports as well.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:240
&gt;&gt; +            auto output = gcryptAES_CTR(gcry_cipher_decrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, cipherText);
&gt; 
&gt; Ditto. A follow-up patch should work on reducing code duplication between all the d ifferent platformEncrypt/Decrypt/Sign/Verify functions, in addition to the static functions at the top of the file. I think the only code that needs to differ is this bit here that converts the CryptoAlgorithmParameters and CryptoKey into a call to the algorithm (gcryptAES_CTR here).

Please CC me for the follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312181</commentid>
    <comment_count>7</comment_count>
      <attachid>308522</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-05-23 20:25:15 -0700</bug_when>
    <thetext>Comment on attachment 308522
Patch

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

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:99
&gt;&gt; +    // Calculate the block count: ((inputText.size() + blockSize - 1) / blockSize), remainder discarded.
&gt; 
&gt; Potential overflow?

I assume that it can&apos;t overflow since it&apos;s a multi-precision integer... right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312330</commentid>
    <comment_count>8</comment_count>
      <attachid>308522</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2017-05-24 11:30:33 -0700</bug_when>
    <thetext>Comment on attachment 308522
Patch

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

BTW, please add test cases that are tied to your GCrypt implementation. For example, the one take, the leeway and so on.

&gt;&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:99
&gt;&gt;&gt; +    // Calculate the block count: ((inputText.size() + blockSize - 1) / blockSize), remainder discarded.
&gt;&gt; 
&gt;&gt; Potential overflow?
&gt; 
&gt; I assume that it can&apos;t overflow since it&apos;s a multi-precision integer... right?

Sorry, in reality, it shouldn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319921</commentid>
    <comment_count>9</comment_count>
      <attachid>308522</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-06-16 04:48:19 -0700</bug_when>
    <thetext>Comment on attachment 308522
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:99
&gt;&gt;&gt;&gt; +    // Calculate the block count: ((inputText.size() + blockSize - 1) / blockSize), remainder discarded.
&gt;&gt;&gt; 
&gt;&gt;&gt; Potential overflow?
&gt;&gt; 
&gt;&gt; I assume that it can&apos;t overflow since it&apos;s a multi-precision integer... right?
&gt; 
&gt; Sorry, in reality, it shouldn&apos;t.

It shouldn&apos;t, and the MPI operations in the following scope are used with that in mind.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:103
&gt;&gt; +        PAL::GCrypt::Handle&lt;gcry_mpi_t&gt; blockSizeMaskMPI(gcry_mpi_set_ui(nullptr, blockSize - 1));
&gt; 
&gt; Why is this named &quot;blockSizeMaskMPI&quot; if it is being used as part of an addition operation rather than a bitmask operation?

The MPI is actually not necessary at all. Should be fine to set the roundedUpSize MPI to inputText.size(), and then just add `blockSize - 1` (i.e. 15) to that.

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:125
&gt;&gt; +    if (counterLength == counter.size() * 8)
&gt; 
&gt; Have you confirmed that GCrypt will not fail once the counter reaches its max? As far as I know, different libraries seem to treat this differently. Some will throw exception/fail, but some will reset the counter, and then start from 0.
&gt; 
&gt; It is clever to have this early return though.

libgcrypt won&apos;t return an error once the counter reaches the maximum value -- it will just wrap it around silently.
https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=blob;f=cipher/cipher-ctr.c;h=f9cb6b577b75a1a0727d2cbebf753e8afa7417ac;hb=refs/heads/master#l78

&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:168
&gt;&gt; +    // starting from the counter set to 0.
&gt; 
&gt; Is this not straightforward to implement?

I&apos;d approach it later. The problem is we require MPI-to-size_t decoding, which needs more attention.

&gt;&gt;&gt; Source/WebCore/crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:240
&gt;&gt;&gt; +            auto output = gcryptAES_CTR(gcry_cipher_decrypt, aesKey.key(), aesParameters.counterVector(), aesParameters.length, cipherText);
&gt;&gt; 
&gt;&gt; Ditto. A follow-up patch should work on reducing code duplication between all the d ifferent platformEncrypt/Decrypt/Sign/Verify functions, in addition to the static functions at the top of the file. I think the only code that needs to differ is this bit here that converts the CryptoAlgorithmParameters and CryptoKey into a call to the algorithm (gcryptAES_CTR here).
&gt; 
&gt; Please CC me for the follow-up patch.

OK, I can look at that afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1319931</commentid>
    <comment_count>10</comment_count>
      <attachid>313072</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-06-16 06:26:11 -0700</bug_when>
    <thetext>Created attachment 313072
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320650</commentid>
    <comment_count>11</comment_count>
      <attachid>313072</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-06-19 04:56:29 -0700</bug_when>
    <thetext>Comment on attachment 313072
Patch for landing

Clearing flags on attachment: 313072

Committed r218484: &lt;http://trac.webkit.org/changeset/218484&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320651</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-06-19 04:56:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308507</attachid>
            <date>2017-04-28 00:32:23 -0700</date>
            <delta_ts>2017-04-28 06:21:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-171420-20170428093222.patch</filename>
            <type>text/plain</type>
            <size>15685</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2QxOGQ5NmJmZjE2NjFl
YzNjYTRmMjZhNzQ3MmU3ZGEyOGE0ZjBjNi4uYjNjNzRlNTc3ZDQyYzBlNjYxZjExYWIxNjFlZDY0
YmRmOTYzZDc4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA0LTI4ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBRVNf
Q1RSIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MTQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogY3J5cHRvL2djcnlwdC9Dcnlw
dG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdjcnlwdEFF
U19DVFIpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZv
cm1FbmNyeXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBs
YXRmb3JtRGVjcnlwdCk6CisKIDIwMTctMDQtMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIG5hdmlnYXRpb24gcG9saWN5IGNoZWNr
aW5nIG1vcmUgcm9idXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcAppbmRleCBiMzU2ZDE1ZWQ4
OWQyZDIxMmM5MzUwZGY0NTdkN2Y1MDVhYzEyZDlkLi5iOWE3Yjc0OGZjNGFkMGQ0YzFlOGY3ZTBi
M2MxNmY4ZWViNDQwMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKQEAgLTEsNSArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDE5ICszMCwyMjggQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQog
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5
cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2Ny
eXB0L1V0aWxpdGllcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwg
VmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIFdvcmtRdWV1ZSYpCit1c2luZyBHQ3J5cHRDaXBoZXJPcGVyYXRpb24gPSBnY3J5X2Vy
cm9yX3QoZ2NyeV9jaXBoZXJfaGRfdCwgdm9pZCosIHNpemVfdCwgY29uc3Qgdm9pZCosIHNpemVf
dCk7CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2NyeXB0QUVTX0NU
UihHQ3J5cHRDaXBoZXJPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjb3VudGVyLCBzaXplX3QgY291bnRlckxlbmd0
aCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBpbnB1dFRleHQpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBhdXRvIGFsZ29yaXRobSA9IFBBTDo6R0NyeXB0OjphZXNBbGdvcml0aG1Gb3JL
ZXlTaXplKGtleS5zaXplKCkgKiA4KTsKKyAgICBpZiAoIWFsZ29yaXRobSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIC8vIENvbnN0cnVjdCB0aGUgbGliZ2NyeXB0IGNpcGhl
ciBvYmplY3QgYW5kIGF0dGFjaCB0aGUga2V5IHRvIGl0LiBLZXkgaW5mb3JtYXRpb24gb24gdGhp
cworICAgIC8vIGNpcGhlciBvYmplY3Qgd2lsbCBsaXZlIHRocm91Z2ggYW55IGdjcnlfY2lwaGVy
X3Jlc2V0KCkgY2FsbHMuCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X2NpcGhlcl9oZF90
PiBoYW5kbGU7CisgICAgZ2NyeV9lcnJvcl90IGVycm9yID0gZ2NyeV9jaXBoZXJfb3BlbigmaGFu
ZGxlLCAqYWxnb3JpdGhtLCBHQ1JZX0NJUEhFUl9NT0RFX0NUUiwgMCk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBlcnJvciA9
IGdjcnlfY2lwaGVyX3NldGtleShoYW5kbGUsIGtleS5kYXRhKCksIGtleS5zaXplKCkpOworICAg
IGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojps
b2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdG9yIHRoYXQgcmVzZXRzIHRoZSBjaXBoZXIgb2Jq
ZWN0LCBzZXRzIHRoZSBwcm92aWRlZCBjb3VudGVyIGRhdGEsCisgICAgLy8gYW5kIGV4ZWN1dGVz
IHRoZSBlbmNyeXB0IG9yIGRlY3J5cHQgb3BlcmF0aW9uLCByZXRyaWV2aW5nIGFuZCByZXR1cm5p
bmcgdGhlIG91dHB1dCBkYXRhLgorICAgIGF1dG8gY2FsbE9wZXJhdGlvbiA9CisgICAgICAgIFsm
aGFuZGxlLCAmb3BlcmF0aW9uXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGNvdW50ZXIsIGNvbnN0
IHVpbnQ4X3QqIGlucHV0RGF0YSwgY29uc3Qgc2l6ZV90IGlucHV0U2l6ZSkgLT4gc3RkOjpvcHRp
b25hbDxWZWN0b3I8dWludDhfdD4+CisgICAgICAgIHsKKyAgICAgICAgICAgIGdjcnlfZXJyb3Jf
dCBlcnJvciA9IGdjcnlfY2lwaGVyX3Jlc2V0KGhhbmRsZSk7CisgICAgICAgICAgICBpZiAoZXJy
b3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgICAgIFBBTDo6R0NyeXB0Ojps
b2dFcnJvcihlcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIoaGFu
ZGxlLCBjb3VudGVyLmRhdGEoKSwgY291bnRlci5zaXplKCkpOworICAgICAgICAgICAgaWYgKGVy
cm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6
bG9nRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfZmluYWwoaGFu
ZGxlKTsKKyAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4gb3V0cHV0KGlucHV0U2l6ZSk7CisgICAgICAgICAgICBlcnJvciA9IG9wZXJh
dGlvbihoYW5kbGUsIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIGlucHV0RGF0YSwgaW5w
dXRTaXplKTsKKyAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7Cisg
ICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gb3V0cHV0OworICAgICAgICB9OworCisgICAgLy8gSWYgdGhlIGNvdW50ZXIgbGVuZ3Ro
LCBpbiBiaXRzLCBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBjb3VudGVyIGRhdGEsIHdlIGRvbid0
IGhhdmUgdG8KKyAgICAvLyB1c2UgYW55IHBhcnQgb2YgdGhlIGNvdW50ZXIgVmVjdG9yPD4gYXMg
bm9uY2UuIFRoaXMgYWxsb3dzIHVzIHRvIGRpcmVjdGx5IGVuY3J5cHQgb3IKKyAgICAvLyBkZWNy
eXB0IGFsbCB0aGUgcHJvdmlkZWQgZGF0YSBpbiBhIHNpbmdsZSBzdGVwLgorICAgIGlmIChjb3Vu
dGVyTGVuZ3RoID09IGNvdW50ZXIuc2l6ZSgpICogOCkKKyAgICAgICAgcmV0dXJuIGNhbGxPcGVy
YXRpb24oY291bnRlciwgaW5wdXRUZXh0LmRhdGEoKSwgaW5wdXRUZXh0LnNpemUoKSk7CisKKyAg
ICAvLyBTY2FuIHRoZSBjb3VudGVyIGRhdGEgaW50byB0aGUgTVBJIGZvcm1hdC4gV2UnbGwgZG8g
YWxsIHRoZSBjb3VudGVyIGNvbXB1dGF0aW9ucyB3aXRoCisgICAgLy8gdGhlIE1QSSBBUEkuCisg
ICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBjb3VudGVyRGF0YU1QSTsKKyAgICBl
cnJvciA9IGdjcnlfbXBpX3NjYW4oJmNvdW50ZXJEYXRhTVBJLCBHQ1JZTVBJX0ZNVF9VU0csIGNv
dW50ZXIuZGF0YSgpLCBjb3VudGVyLnNpemUoKSwgbnVsbHB0cik7CisgICAgaWYgKGVycm9yICE9
IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9y
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBDYWxjdWxh
dGUgdGhlIGJsb2NrIGNvdW50OiAoKGlucHV0VGV4dC5zaXplKCkgKyAxNikgLyAxNiksIHJlbWFp
bmRlciBkaXNjYXJkZWQuCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBibG9j
a0NvdW50TVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAgeworICAgICAgICBQQUw6OkdDcnlwdDo6
SGFuZGxlPGdjcnlfbXBpX3Q+IGJsb2NrU2l6ZU1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwg
MTYpKTsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiByb3VuZGVkVXBT
aXplKGdjcnlfbXBpX25ldygwKSk7CisKKyAgICAgICAgZ2NyeV9tcGlfYWRkX3VpKHJvdW5kZWRV
cFNpemUsIGJsb2NrU2l6ZU1QSSwgaW5wdXRUZXh0LnNpemUoKSk7CisgICAgICAgIGdjcnlfbXBp
X2RpdihibG9ja0NvdW50TVBJLCBudWxscHRyLCByb3VuZGVkVXBTaXplLCBibG9ja1NpemVNUEks
IDApOworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgY291bnRlciBsaW1pdCBmb3IgdGhl
IHNwZWNpZmllZCBjb3VudGVyIGxlbmd0aDogKDIgPDwgY291bnRlckxlbmd0aCkuCisgICAgLy8g
KGNvdW50ZXJMaW1pdE1QSSAtIDEpIGlzIHRoZSBtYXhpbXVtIHZhbHVlIHRoZSBjb3VudGVyIGNh
biBob2xkIC0tIGVzc2VudGlhbGx5IGl0J3MKKyAgICAvLyBhIGJpdC1tYXNrIGZvciB2YWxpZCBj
b3VudGVyIHZhbHVlcy4KKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGNvdW50
ZXJMaW1pdE1QSShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwgMSkpOworICAgIGdjcnlfbXBpX211
bF8yZXhwKGNvdW50ZXJMaW1pdE1QSSwgY291bnRlckxpbWl0TVBJLCBjb3VudGVyTGVuZ3RoKTsK
KworICAgIC8vIENvdW50ZXIgdmFsdWVzIG11c3Qgbm90IHJlcGVhdCBmb3IgYSBnaXZlbiBjaXBo
ZXIgdGV4dC4gSWYgdGhlIGNvdW50ZXIgbGltaXQgKGkuZS4KKyAgICAvLyB0aGUgbnVtYmVyIG9m
IHVuaXF1ZSBjb3VudGVyIHZhbHVlcyB3ZSBjb3VsZCBwcm9jdWRlIGZvciB0aGUgc3BlY2lmaWVk
IGNvdW50ZXIKKyAgICAvLyBsZW5ndGgpIGlzIGxvd2VyIHRoYW4gdGhlIGRlZHVjZWQgYmxvY2sg
Y291bnQsIHdlIGJhaWwuCisgICAgaWYgKGdjcnlfbXBpX2NtcChjb3VudGVyTGltaXRNUEksIGJs
b2NrQ291bnRNUEkpIDwgMCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIC8v
IEV4dHJhY3QgdGhlIGNvdW50ZXIgTVBJIGZyb20gdGhlIGNvdW50ZXJEYXRhTVBJOiAoY291bnRl
ckRhdGFNUEkgJSBjb3VudGVyTGltaXRNUEkpLgorICAgIC8vIFRoaXMgTVBJIHJlcHJlc2VudHMg
c29sZWx5IHRoZSBjb3VudGVyIHZhbHVlLCBhcyBpbml0aWFsbHkgcHJvdmlkZWQuCisgICAgUEFM
OjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBjb3VudGVyTVBJKGdjcnlfbXBpX25ldygwKSk7
CisgICAgZ2NyeV9tcGlfbW9kKGNvdW50ZXJNUEksIGNvdW50ZXJEYXRhTVBJLCBjb3VudGVyTGlt
aXRNUEkpOworCisgICAgeworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGxlZXdheSBvZiB0aGUg
aW5pdGlhbGx5LXByb3ZpZGVkIGNvdW50ZXI6IGNvdW50ZXJMaW1pdE1QSSAtIGNvdW50ZXJNUEku
CisgICAgICAgIC8vIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIG51bWJlciBvZiBibG9ja3Mgd2Ug
Y2FuIGVuY3J5cHQvZGVjcnlwdCB3aXRoIHRoYXQgY291bnRlcgorICAgICAgICAvLyAoaW5jcmVt
ZW50aW5nIGl0IGFmdGVyIGVhY2ggb3BlcmF0aW9uKSBiZWZvcmUgdGhlIGNvdW50ZXIgd3JhcHMg
YXJvdW5kIHRvIDAuCisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gY291
bnRlckxlZXdheU1QSShnY3J5X21waV9uZXcoMCkpOworICAgICAgICBnY3J5X21waV9zdWIoY291
bnRlckxlZXdheU1QSSwgY291bnRlckxpbWl0TVBJLCBjb3VudGVyTVBJKTsKKworICAgICAgICAv
LyBJZiBjb3VudGVyTGVld2F5TVBJIGlzIGxhcmdlciBvciBlcXVhbCB0byB0aGUgZGVkdWNlZCBi
bG9jayBjb3VudCwgd2UgY2FuIGRpcmVjdGx5CisgICAgICAgIC8vIGVuY3J5cHQgb3IgZGVjcnlw
dCB0aGUgcHJvdmlkZWQgZGF0YSBpbiBhIHNpbmdsZSBzdGVwLgorICAgICAgICBpZiAoZ2NyeV9t
cGlfY21wKGNvdW50ZXJMZWV3YXlNUEksIGJsb2NrQ291bnRNUEkpID49IDApCisgICAgICAgICAg
ICByZXR1cm4gY2FsbE9wZXJhdGlvbihjb3VudGVyLCBpbnB1dFRleHQuZGF0YSgpLCBpbnB1dFRl
eHQuc2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUgb253YXJkcyB3ZSdyZSBkZWFs
aW5nIHdpdGggYSBjb3VudGVyIG9mIHdoaWNoIHRoZSBsZW5ndGggZG9lc24ndCBtYXRjaCB0aGUK
KyAgICAvLyBwcm92aWRlZCBkYXRhLCBtZWFuaW5nIHdlJ2xsIGFsc28gaGF2ZSB0byBtYW5hZ2Ug
dGhlIG5vbmNlIGRhdGEuIFRoZSBjb3VudGVyIHdpbGwgYWxzbworICAgIC8vIHdyYXAgYXJvdW5k
LCBzbyB3ZSdsbCBoYXZlIHRvIGFkZHJlc3MgdGhhdCB0b28uCisKKyAgICAvLyBEZXRlcm1pbmUg
dGhlIG5vbmNlIE1QSSB0aGF0IHdlJ2xsIHVzZSB0byByZWNvbnN0cnVjdCB0aGUgY291bnRlciBk
YXRhIGZvciBlYWNoIGJsb2NrOgorICAgIC8vIChjb3VudGVyRGF0YU1QSSAtIGNvdW50ZXJNUEkp
LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY291bnRlckRhdGFNUEkgd2l0aCB0aGUgbG93ZXN0Cisg
ICAgLy8gY291bnRlckxlbmd0aCBiaXRzIGNsZWFyZWQuCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X21waV90PiBub25jZU1QSShnY3J5X21waV9uZXcoMCkpOworICAgIGdjcnlfbXBpX3N1
Yihub25jZU1QSSwgY291bnRlckRhdGFNUEksIGNvdW50ZXJNUEkpOworCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIG9wdGltaXplZCBmdXJ0aGVyIGJ5IGZpcnN0IGVuY3J5cHRpbmcgdGhl
IGFtb3VudCBvZiBibG9ja3MgZm9yCisgICAgLy8gd2hpY2ggdGhlIGNvdW50ZXIgd29uJ3QgeWV0
IHdyYXAgYXJvdW5kLCBhbmQgdGhlbiBlbmNyeXB0aW5nIHRoZSByZXN0IG9mIHRoZSBibG9ja3MK
KyAgICAvLyBzdGFydGluZyBmcm9tIHRoZSBjb3VudGVyIHNldCB0byAwLgorCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG91dHB1dDsKKyAgICBWZWN0b3I8dWludDhfdD4gYmxvY2tDb3VudGVyRGF0YSgx
Nik7CisgICAgc2l6ZV90IGlucHV0VGV4dFNpemUgPSBpbnB1dFRleHQuc2l6ZSgpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dFRleHRTaXplOyBpICs9IDE2KSB7CisgICAgICAg
IHNpemVfdCBibG9ja0lucHV0U2l6ZSA9IHN0ZDo6bWluPHNpemVfdD4oMTYsIGlucHV0VGV4dFNp
emUgLSBpKTsKKworICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGJsb2NrLXNwZWNpZmljIGNvdW50
ZXI6IChub25jZU1QSSArIGNvdW50ZXJNUEkpLgorICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxl
PGdjcnlfbXBpX3Q+IGJsb2NrQ291bnRlck1QSShnY3J5X21waV9uZXcoMCkpOworICAgICAgICBn
Y3J5X21waV9hZGQoYmxvY2tDb3VudGVyTVBJLCBub25jZU1QSSwgY291bnRlck1QSSk7CisKKyAg
ICAgICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIGJsb2NrQ291bnRl
ckRhdGEuZGF0YSgpLCBibG9ja0NvdW50ZXJEYXRhLnNpemUoKSwgbnVsbHB0ciwgYmxvY2tDb3Vu
dGVyTVBJKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAg
ICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRW5jcnlwdC9kZWNyeXB0IHRo
aXMgc2luZ2xlIGJsb2NrIHdpdGggdGhlIGJsb2NrLXNwZWNpZmljIGNvdW50ZXIuIE91dHB1dCBm
b3IgdGhpcworICAgICAgICAvLyBzaW5nbGUgYmxvY2sgaXMgYXBwZW5kZWQgdG8gdGhlIGdlbmVy
YWwgb3V0cHV0IHZlY3Rvci4KKyAgICAgICAgYXV0byBibG9ja091dHB1dCA9IGNhbGxPcGVyYXRp
b24oYmxvY2tDb3VudGVyRGF0YSwgaW5wdXRUZXh0LmRhdGEoKSArIGksIGJsb2NrSW5wdXRTaXpl
KTsKKyAgICAgICAgaWYgKCFibG9ja091dHB1dCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICAgICAgb3V0cHV0LmFwcGVuZFZlY3RvcigqYmxvY2tPdXRwdXQpOworCisg
ICAgICAgIC8vIEluY3JlbWVudCB0aGUgY291bnRlci4gVGhlIG1vZHVsdXMgb3BlcmF0aW9uIHRh
a2VzIGNhcmUgb2YgYW55IHdyYXAtYXJvdW5kLgorICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxl
PGdjcnlfbXBpX3Q+IGNvdW50ZXJJbmNyZW1lbnRNUEkoZ2NyeV9tcGlfbmV3KDApKTsKKyAgICAg
ICAgZ2NyeV9tcGlfYWRkX3VpKGNvdW50ZXJJbmNyZW1lbnRNUEksIGNvdW50ZXJNUEksIDEpOwor
ICAgICAgICBnY3J5X21waV9tb2QoY291bnRlck1QSSwgY291bnRlckluY3JlbWVudE1QSSwgY291
bnRlckxpbWl0TVBJKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0cHV0OworfQorCit2b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtl
eSwgVmVjdG9yPHVpbnQ4X3Q+JiYgcGxhaW5UZXh0LCBWZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNr
LCBFeGNlcHRpb25DYWxsYmFjayYmIGV4Y2VwdGlvbkNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKK3sKKyAgICBjb250ZXh0LnJl
ZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIHBsYWluVGV4dCA9IFdURk1vdmUo
cGxhaW5UZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3JpdGht
QWVzQ3RyUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNLZXkgPSBk
b3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gb3V0
cHV0ID0gZ2NyeXB0QUVTX0NUUihnY3J5X2NpcGhlcl9lbmNyeXB0LCBhZXNLZXkua2V5KCksIGFl
c1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgcGxhaW5U
ZXh0KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhl
IERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9zdFRh
c2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBl
eGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRp
b25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZGVy
ZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dvcmtl
ciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAgICAg
ICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
ZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKLXZvaWQgQ3J5
cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1EZWNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhf
dD4mJiwgVmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFdvcmtRdWV1ZSYpCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBs
YXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4m
JiBwYXJhbWV0ZXJzLCBSZWY8Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lw
aGVyVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBl
eGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1
ZXVlJiB3b3JrUXVldWUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb250ZXh0LnJl
ZigpOworICAgIHdvcmtRdWV1ZS5kaXNwYXRjaCgKKyAgICAgICAgW3BhcmFtZXRlcnMgPSBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBrZXkgPSBXVEZNb3ZlKGtleSksIGNpcGhlclRleHQgPSBXVEZNb3Zl
KGNpcGhlclRleHQpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBleGNlcHRpb25DYWxs
YmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spLCAmY29udGV4dF0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIGF1dG8mIGFlc1BhcmFtZXRlcnMgPSBkb3duY2FzdDxDcnlwdG9BbGdvcml0
aG1BZXNDdHJQYXJhbXM+KCpwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIGF1dG8mIGFlc0tleSA9
IGRvd25jYXN0PENyeXB0b0tleUFFUz4oa2V5LmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBv
dXRwdXQgPSBnY3J5cHRBRVNfQ1RSKGdjcnlfY2lwaGVyX2RlY3J5cHQsIGFlc0tleS5rZXkoKSwg
YWVzUGFyYW1ldGVycy5jb3VudGVyVmVjdG9yKCksIGFlc1BhcmFtZXRlcnMubGVuZ3RoLCBjaXBo
ZXJUZXh0KTsKKyAgICAgICAgICAgIGlmICghb3V0cHV0KSB7CisgICAgICAgICAgICAgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8g
dGhlIERvY3VtZW50L1dvcmtlciB0aHJlYWRzLgorICAgICAgICAgICAgICAgIGNvbnRleHQucG9z
dFRhc2soCisgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBleGNlcHRpb25DYWxsYmFjayA9IFdURk1vdmUoZXhjZXB0aW9uQ2FsbGJhY2spXShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhPcGVyYXRpb25FcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
ZGVyZWZlcmVuY2UgY2FsbGJhY2tzIGFmdGVyIGJlaW5nIGJhY2sgdG8gdGhlIERvY3VtZW50L1dv
cmtlciB0aHJlYWRzLgorICAgICAgICAgICAgY29udGV4dC5wb3N0VGFzaygKKyAgICAgICAgICAg
ICAgICBbb3V0cHV0ID0gV1RGTW92ZSgqb3V0cHV0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrKFdURk1vdmUob3V0cHV0KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQuZGVyZWYoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0ZDVhYWNlYmE5N2RiMDcxMzNlYTlmNjEyYWMyNGVl
YTIzNjQwMTc4Li5lYWVjOWU1OTZlNzU4NGE5YzUzYWZiZmE2YTU1MzZlMDE0ODEzMTIwIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMTctMDQtMjggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0Bp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHQ3J5cHRdIEFFU19DVFIgc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDIwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVz
dEV4cGVjdGF0aW9uczoKKwogMjAxNy0wNC0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgZm9yIHByb21pc2UgcmVqZWN0aW9uIGV2ZW50
cyAodW5oYW5kbGVkcmVqZWN0aW9uKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVj
dGF0aW9ucwppbmRleCBkYWYxMDQzZWRhMzcyYTE0MTc5Njg1ODllZjdjMzg0ODMyYmIyMTdjLi5i
NTVkZDc1YTYzMDVhNjU3NWY4NTQwMGVkNWM1MmJmZTc4NzBlNmNmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNzI0LDYgKzcyNCwyMyBAQCBCdWcoR1RL
KSBlZGl0aW5nL3NlY3VyZS1pbnB1dCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzEzMzEyMiBj
cnlwdG8vc3VidGxlIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by93ZWJraXRT
dWJ0bGUgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3dvcmtlcnMvc3VidGxl
IFsgU2tpcCBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItZW5jcnlwdC1tYWxmb3JtZWQtcGFyYW1l
dGVycy5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0
LWtleS1qd2stbGVuZ3RoLTEyOC5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHIt
Z2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTE5Mi5odG1sIFsgUGFzcyBdCitjcnlwdG8v
c3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTI1Ni5odG1sIFsg
UGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0LXJhdy1rZXkuaHRt
bCBbIFBhc3MgXQorY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWtleS1lbmNyeXB0LWRl
Y3J5cHQuaHRtbCBbIFBhc3MgXQorY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWtleS5o
dG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1rZXktbGVuZ3Ro
LTEyOC5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1rZXkt
bGVuZ3RoLTE5Mi5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3
ay1rZXktbGVuZ3RoLTI1Ni5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1w
b3J0LWtleS1kZWNyeXB0Lmh0bWwgWyBQYXNzIF0KK2NyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBv
cnQta2V5LWVuY3J5cHQuaHRtbCBbIFBhc3MgXQorY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9y
dC1rZXktdW53cmFwLWp3ay1rZXkuaHRtbCBbIFBhc3MgXQorY3J5cHRvL3N1YnRsZS9hZXMtY3Ry
LWltcG9ydC1rZXktdW53cmFwLXJhdy1rZXkuaHRtbCBbIFBhc3MgXQorY3J5cHRvL3N1YnRsZS9h
ZXMtY3RyLWltcG9ydC1rZXktd3JhcC1qd2sta2V5Lmh0bWwgWyBQYXNzIF0KK2NyeXB0by9zdWJ0
bGUvYWVzLWN0ci1pbXBvcnQta2V5LXdyYXAtcmF3LWtleS5odG1sIFsgUGFzcyBdCitjcnlwdG8v
c3VidGxlL2Flcy1jdHItaW1wb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQogY3J5cHRvL3N1YnRs
ZS9obWFjLWV4cG9ydC1rZXktbWFsZm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFBhc3MgXQogY3J5
cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWV4cG9ydC1rZXktandrLXNoYTEuaHRtbCBbIFBhc3Mg
XQogY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVyYXRlLWV4cG9ydC1rZXktandrLXNoYTIyNC5odG1s
IFsgUGFzcyBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308522</attachid>
            <date>2017-04-28 06:21:20 -0700</date>
            <delta_ts>2017-06-16 06:26:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171420-20170428152118.patch</filename>
            <type>text/plain</type>
            <size>18685</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2QxOGQ5NmJmZjE2NjFl
YzNjYTRmMjZhNzQ3MmU3ZGEyOGE0ZjBjNi4uYTE4MTE4MTQzOTNiMTczN2IxY2E4M2NkMzZiNDNh
M2Q3MWFhMTk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE3LTA0LTI4ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBRVNf
Q1RSIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MTQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCBBRVNfQ1RSIHN1cHBvcnQgZm9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRo
YXQgdXNlIGxpYmdjcnlwdC4KKworICAgICAgICBCb3RoIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRp
b24gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBpbiBhIHNpbmdsZSBnY3J5cHRBRVNfQ1RSKCkgZnVu
Y3Rpb24sCisgICAgICAgIHdpdGggdGhlIHNwZWNpZmljIG9wZXJhdGlvbiBiZWluZyBwYXNzZWQg
YXMgdGhlIGZpcnN0IGFyZ3VtZW50LiBUaGUgYXBwcm9wcmlhdGUgQUVTCisgICAgICAgIGFsZ29y
aXRobSBpcyBwaWNrZWQsIGFuZCBhIGdjcnlfY2lwaGVyX2hkX3Qgb2JqZWN0IGlzIGNyZWF0ZWQg
YW5kIGhhcyB0aGUgZ2l2ZW4ga2V5IHNldC4KKyAgICAgICAgVGhpcyBrZXkgd2lsbCByZW1haW4g
dGhlIHNhbWUgdGhyb3VnaG91dCB0aGUgZ2NyeV9jaXBoZXJfaGRfdCBsaWZldGltZSwgZXZlbiBh
ZnRlcgorICAgICAgICBnY3J5X2NpcGhlcl9yZXNldCgpIGNhbGxzLgorCisgICAgICAgIFRoZSBl
bmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uIGlzIHdyYXBwZWQgaW50byBhIGhlbHBlciBsYW1iZGEg
ZnVuY3RvciB0aGF0IGFjY2VwdHMgdGhlCisgICAgICAgIGdpdmVuIGNvdW50ZXIgYW5kIGlucHV0
IGRhdGEuIEl0IHJlc2V0cyB0aGUgY2lwaGVyIG9iamVjdCwgc2V0cyB0aGUgY291bnRlciBkYXRh
LCBhbmQKKyAgICAgICAgcGVyZm9ybXMgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24sIHJldHVybmlu
ZyB0aGUgb3V0cHV0IGRhdGEuCisKKyAgICAgICAgbGliZ2NyeXB0IGRvZXNuJ3Qgc3VwcG9ydCBz
ZXR0aW5nIGNvdW50ZXIgZGF0YSBvbiBhIGdjcnlfY2lwaGVyX2hkX3Qgb2JqZWN0IHdpdGggb25s
eQorICAgICAgICBwYXJ0IG9mIHRoYXQgZGF0YSBiZWluZyB1c2VkIGFzIHRoZSBhY3R1YWwgY291
bnRlciwgd2l0aCB0aGUgcmVzdCBhY3RpbmcgYXMgYSBub25jZSwgbGlrZQorICAgICAgICB0aGUg
V2ViIENyeXB0byBzcGVjaWZpY2F0aW9uIGFsbG93cy4gV2UgaGF2ZSB0byBpbXBsZW1lbnQgdGhl
IHN1cHBvcnQgZm9yIHRoYXQgb24gb3VyIG93bi4KKworICAgICAgICBXZSBjb21wdXRlIHRoZSBu
dW1iZXIgb2YgYmxvY2tzIHdlJ2xsIGJlIHByb2Nlc3NpbmcgYW5kIHRoZSB1cHBlciBleGNsdXNp
dmUgbGltaXQgZm9yIHRoZQorICAgICAgICBnaXZlbiBjb3VudGVyIGxlbmd0aC4gV2UgaW1tZWRp
YXRlbHkgYmFpbCBpZiB0aGUgY291bnRlciBsaW1pdCBpcyBsZXNzIHRoYW4gdGhlIGNvbXB1dGVk
CisgICAgICAgIGJsb2NrIGNvdW50LCBzaW5jZSB0aGF0IHdvdWxkIG1lYW4gdGhhdCB0aGUgY291
bnRlciB2YWx1ZXMgd291bGQgYmUgcmVwZWF0ZWQuCisKKyAgICAgICAgV2Ugc2hvcnQtY3V0IHRv
IGEgZGlyZWN0IG9wZXJhdGlvbiBjYWxsIGlmIHRoZSBjb3VudGVyIGxlbmd0aCBtYXRjaGVzIHNp
emUgb2YgdGhlIGNvdW50ZXIKKyAgICAgICAgZGF0YSAtLSB3ZSBkb24ndCBoYXZlIHRvIGFkanVz
dCB0aGUgY291bnRlciBkYXRhIGluIGFueSB3YXkgaWYgdGhhdCdzIHRoZSBjYXNlLgorCisgICAg
ICAgIE90aGVyd2lzZSB3ZSBtb3ZlIGNvdW50ZXIgZGF0YSBpbnRvIHRoZSBNUEkgZm9ybWF0LiBU
aGUgbm9uY2UgYW5kIHRoZSBhY3R1YWwgY291bnRlciBNUElzCisgICAgICAgIGNhbiBzcGxpdCBv
dXQgb2YgdGhlIGNvdW50ZXIgZGF0YSBNUEkgd2l0aCB0aGUgbW9kdWx1cyBvcGVyYXRpb24gYW5k
IHRoZSBjb3VudGVyIGxpbWl0IE1QSS4KKworICAgICAgICBXZSB0YWtlIGFub3RoZXIgc2hvcnRj
dXQgc3RyYWlnaHQgdG8gdGhlIG9wZXJhdGlvbiBjYWxsIGlmIHdlJ3JlIGFibGUgdG8gZGV0ZXJt
aW5lIHRoYXQgdGhlCisgICAgICAgICdjb3VudGVyIGxlZXdheScgdmFsdWUsIGkuZS4gdGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5pdGlhbCBjb3VudGVyIE1QSSBhbmQgdGhlIGNvdW50ZXIK
KyAgICAgICAgbGltaXQgTVBJLCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8gdGhlIHByZWRpY3RlZCBi
bG9jayBzaXplIC0tIGlmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGNvdW50ZXIKKyAgICAgICAgd29u
J3Qgd3JhcCBhcm91bmQgYW5kIGNoYW5nZSB0aGUgbm9uY2UgZGF0YS4KKworICAgICAgICBJbiB3
b3JzdC1jYXNlIHNjZW5hcmlvIHRoZSBjb3VudGVyIGRhdGEgd2lsbCB3cmFwIGFyb3VuZCBhbmQg
d2UgaGF2ZSB0byBhZGRyZXNzIHRoYXQuIFRoZQorICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0
aW9uIHRha2VzIHRoZSBzbG93ZXN0IHBvc3NpYmxlIHBhdGggZm9yIHRoZSBtb21lbnQsIGVuY3J5
cHRpbmcvZGVjcnlwdGluZworICAgICAgICBlYWNoIGJsb2NrIHNlcGFyYXRlbHkuIEZvciBlYWNo
IHN0ZXAgdGhlIGNvdW50ZXIgaXMgY29tYmluZWQgd2l0aCB0aGUgbm9uY2UsIHRoZSByZXN1bHRp
bmcKKyAgICAgICAgTVBJIGRhdGEgcmV0cmlldmVkIGFuZCBwYXNzZWQgdG8gdGhlIG9wZXJhdGlv
biBmdW5jdGlvbiwgYW5kIHRoZSByZXR1cm5lZCBibG9jayBvdXRwdXQKKyAgICAgICAgYXBwZW5k
ZWQgdG8gdGhlIGZpbmFsIG91dHB1dCB2ZWN0b3IuIFRoZSBjb3VudGVyIE1QSSBpcyB0aGVuIGlu
Y3JlbWVudGVkIGFuZCByYW4gdGhyb3VnaCB0aGUKKyAgICAgICAgbW9kdWx1cyBvcGVyYXRpb24s
IGxpbWl0aW5nIHRoZSBNUEkgdmFsdWUgdG8gdGhlIHByZXZpb3VzbHktY29tcHV0ZWQgY291bnRl
ciBsaW1pdC4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gcmVsZXZhbnQgdGVzdHMgYXJlIHBh
c3NpbmcgYW5kIGFyZSB1bnNraXBwZWQuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0NyeXB0
b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2NyeXB0QUVT
X0NUUik6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9y
bUVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6cGxh
dGZvcm1EZWNyeXB0KToKKwogMjAxNy0wNC0yNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgbmF2aWdhdGlvbiBwb2xpY3kgY2hlY2tp
bmcgbW9yZSByb2J1c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Z2NyeXB0L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCmluZGV4IGIzNTZkMTVlZDg5
ZDJkMjEyYzkzNTBkZjQ1N2Q3ZjUwNWFjMTJkOWQuLmUzZjc1MjZmZjdmY2U5ZGVlYzdhYzQ3MTVh
MGZjMzQ4NzFkY2Y2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9nY3J5cHQv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcApAQCAtMSw1ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsMTkgKzMwLDIzMSBAQAogCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8pCiAK
KyNpbmNsdWRlICJDcnlwdG9BbGdvcml0aG1BZXNDdHJQYXJhbXMuaCIKKyNpbmNsdWRlICJDcnlw
dG9LZXlBRVMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSA8cGFsL2NyeXB0by9nY3J5cHQvSGFuZGxlLmg+CisjaW5jbHVkZSA8cGFsL2NyeXB0by9nY3J5
cHQvVXRpbGl0aWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBDcnlwdG9BbGdv
cml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBW
ZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFjayYmLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgV29ya1F1ZXVlJikKK3VzaW5nIEdDcnlwdENpcGhlck9wZXJhdGlvbiA9IGdjcnlfZXJy
b3JfdChnY3J5X2NpcGhlcl9oZF90LCB2b2lkKiwgc2l6ZV90LCBjb25zdCB2b2lkKiwgc2l6ZV90
KTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRBRVNfQ1RS
KEdDcnlwdENpcGhlck9wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
a2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGNvdW50ZXIsIHNpemVfdCBjb3VudGVyTGVuZ3Ro
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGlucHV0VGV4dCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIGNvbnN0ZXhwciBzaXplX3QgYmxvY2tTaXplID0gMTY7CisgICAgYXV0byBhbGdv
cml0aG0gPSBQQUw6OkdDcnlwdDo6YWVzQWxnb3JpdGhtRm9yS2V5U2l6ZShrZXkuc2l6ZSgpICog
OCk7CisgICAgaWYgKCFhbGdvcml0aG0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICAvLyBDb25zdHJ1Y3QgdGhlIGxpYmdjcnlwdCBjaXBoZXIgb2JqZWN0IGFuZCBhdHRhY2gg
dGhlIGtleSB0byBpdC4gS2V5IGluZm9ybWF0aW9uIG9uIHRoaXMKKyAgICAvLyBjaXBoZXIgb2Jq
ZWN0IHdpbGwgbGl2ZSB0aHJvdWdoIGFueSBnY3J5X2NpcGhlcl9yZXNldCgpIGNhbGxzLgorICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9jaXBoZXJfaGRfdD4gaGFuZGxlOworICAgIGdjcnlf
ZXJyb3JfdCBlcnJvciA9IGdjcnlfY2lwaGVyX29wZW4oJmhhbmRsZSwgKmFsZ29yaXRobSwgR0NS
WV9DSVBIRVJfTU9ERV9DVFIsIDApOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9S
KSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRrZXko
aGFuZGxlLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIFRoaXMgaXMgYSBoZWxw
ZXIgZnVuY3RvciB0aGF0IHJlc2V0cyB0aGUgY2lwaGVyIG9iamVjdCwgc2V0cyB0aGUgcHJvdmlk
ZWQgY291bnRlciBkYXRhLAorICAgIC8vIGFuZCBleGVjdXRlcyB0aGUgZW5jcnlwdCBvciBkZWNy
eXB0IG9wZXJhdGlvbiwgcmV0cmlldmluZyBhbmQgcmV0dXJuaW5nIHRoZSBvdXRwdXQgZGF0YS4K
KyAgICBhdXRvIGNhbGxPcGVyYXRpb24gPQorICAgICAgICBbJmhhbmRsZSwgJm9wZXJhdGlvbl0o
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBjb3VudGVyLCBjb25zdCB1aW50OF90KiBpbnB1dERhdGEs
IGNvbnN0IHNpemVfdCBpbnB1dFNpemUpIC0+IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PgorICAgICAgICB7CisgICAgICAgICAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhl
cl9yZXNldChoYW5kbGUpOworICAgICAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJS
T1IpIHsKKyAgICAgICAgICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGVycm9yID0gZ2NyeV9jaXBoZXJfc2V0Y3RyKGhhbmRsZSwgY291bnRlci5kYXRhKCks
IGNvdW50ZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VS
Uk9SKSB7CisgICAgICAgICAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVycm9yKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBlcnJvciA9IGdjcnlfY2lwaGVyX2ZpbmFsKGhhbmRsZSk7CisgICAgICAgICAgICBp
ZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgICAgIFBBTDo6R0Ny
eXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChp
bnB1dFNpemUpOworICAgICAgICAgICAgZXJyb3IgPSBvcGVyYXRpb24oaGFuZGxlLCBvdXRwdXQu
ZGF0YSgpLCBvdXRwdXQuc2l6ZSgpLCBpbnB1dERhdGEsIGlucHV0U2l6ZSk7CisgICAgICAgICAg
ICBpZiAoZXJyb3IgIT0gR1BHX0VSUl9OT19FUlJPUikgeworICAgICAgICAgICAgICAgIFBBTDo6
R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAg
ICAgfTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgYmxvY2sgY291bnQ6ICgoaW5wdXRUZXh0LnNp
emUoKSArIGJsb2NrU2l6ZSAtIDEpIC8gYmxvY2tTaXplKSwgcmVtYWluZGVyIGRpc2NhcmRlZC4K
KyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGJsb2NrQ291bnRNUEkoZ2NyeV9t
cGlfbmV3KDApKTsKKyAgICB7CisgICAgICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlf
dD4gYmxvY2tTaXplTVBJKGdjcnlfbXBpX3NldF91aShudWxscHRyLCBibG9ja1NpemUpKTsKKyAg
ICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBibG9ja1NpemVNYXNrTVBJKGdj
cnlfbXBpX3NldF91aShudWxscHRyLCBibG9ja1NpemUgLSAxKSk7CisgICAgICAgIFBBTDo6R0Ny
eXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gcm91bmRlZFVwU2l6ZShnY3J5X21waV9uZXcoMCkpOwor
CisgICAgICAgIGdjcnlfbXBpX2FkZF91aShyb3VuZGVkVXBTaXplLCBibG9ja1NpemVNYXNrTVBJ
LCBpbnB1dFRleHQuc2l6ZSgpKTsKKyAgICAgICAgZ2NyeV9tcGlfZGl2KGJsb2NrQ291bnRNUEks
IG51bGxwdHIsIHJvdW5kZWRVcFNpemUsIGJsb2NrU2l6ZU1QSSwgMCk7CisgICAgfQorCisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBjb3VudGVyIGxpbWl0IGZvciB0aGUgc3BlY2lmaWVkIGNvdW50ZXIg
bGVuZ3RoOiAoMiA8PCBjb3VudGVyTGVuZ3RoKS4KKyAgICAvLyAoY291bnRlckxpbWl0TVBJIC0g
MSkgaXMgdGhlIG1heGltdW0gdmFsdWUgdGhlIGNvdW50ZXIgY2FuIGhvbGQgLS0gZXNzZW50aWFs
bHkgaXQncworICAgIC8vIGEgYml0LW1hc2sgZm9yIHZhbGlkIGNvdW50ZXIgdmFsdWVzLgorICAg
IFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gY291bnRlckxpbWl0TVBJKGdjcnlfbXBp
X3NldF91aShudWxscHRyLCAxKSk7CisgICAgZ2NyeV9tcGlfbXVsXzJleHAoY291bnRlckxpbWl0
TVBJLCBjb3VudGVyTGltaXRNUEksIGNvdW50ZXJMZW5ndGgpOworCisgICAgLy8gQ291bnRlciB2
YWx1ZXMgbXVzdCBub3QgcmVwZWF0IGZvciBhIGdpdmVuIGNpcGhlciB0ZXh0LiBJZiB0aGUgY291
bnRlciBsaW1pdCAoaS5lLgorICAgIC8vIHRoZSBudW1iZXIgb2YgdW5pcXVlIGNvdW50ZXIgdmFs
dWVzIHdlIGNvdWxkIHByb2N1ZGUgZm9yIHRoZSBzcGVjaWZpZWQgY291bnRlcgorICAgIC8vIGxl
bmd0aCkgaXMgbG93ZXIgdGhhbiB0aGUgZGVkdWNlZCBibG9jayBjb3VudCwgd2UgYmFpbC4KKyAg
ICBpZiAoZ2NyeV9tcGlfY21wKGNvdW50ZXJMaW1pdE1QSSwgYmxvY2tDb3VudE1QSSkgPCAwKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgLy8gSWYgdGhlIGNvdW50ZXIgbGVu
Z3RoLCBpbiBiaXRzLCBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBjb3VudGVyIGRhdGEsIHdlIGRv
bid0IGhhdmUgdG8KKyAgICAvLyB1c2UgYW55IHBhcnQgb2YgdGhlIGNvdW50ZXIgVmVjdG9yPD4g
YXMgbm9uY2UuIFRoaXMgYWxsb3dzIHVzIHRvIGRpcmVjdGx5IGVuY3J5cHQgb3IKKyAgICAvLyBk
ZWNyeXB0IGFsbCB0aGUgcHJvdmlkZWQgZGF0YSBpbiBhIHNpbmdsZSBzdGVwLgorICAgIGlmIChj
b3VudGVyTGVuZ3RoID09IGNvdW50ZXIuc2l6ZSgpICogOCkKKyAgICAgICAgcmV0dXJuIGNhbGxP
cGVyYXRpb24oY291bnRlciwgaW5wdXRUZXh0LmRhdGEoKSwgaW5wdXRUZXh0LnNpemUoKSk7CisK
KyAgICAvLyBTY2FuIHRoZSBjb3VudGVyIGRhdGEgaW50byB0aGUgTVBJIGZvcm1hdC4gV2UnbGwg
ZG8gYWxsIHRoZSBjb3VudGVyIGNvbXB1dGF0aW9ucyB3aXRoCisgICAgLy8gdGhlIE1QSSBBUEku
CisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBjb3VudGVyRGF0YU1QSTsKKyAg
ICBlcnJvciA9IGdjcnlfbXBpX3NjYW4oJmNvdW50ZXJEYXRhTVBJLCBHQ1JZTVBJX0ZNVF9VU0cs
IGNvdW50ZXIuZGF0YSgpLCBjb3VudGVyLnNpemUoKSwgbnVsbHB0cik7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBFeHRy
YWN0IHRoZSBjb3VudGVyIE1QSSBmcm9tIHRoZSBjb3VudGVyRGF0YU1QSTogKGNvdW50ZXJEYXRh
TVBJICUgY291bnRlckxpbWl0TVBJKS4KKyAgICAvLyBUaGlzIE1QSSByZXByZXNlbnRzIHNvbGVs
eSB0aGUgY291bnRlciB2YWx1ZSwgYXMgaW5pdGlhbGx5IHByb3ZpZGVkLgorICAgIFBBTDo6R0Ny
eXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gY291bnRlck1QSShnY3J5X21waV9uZXcoMCkpOworICAg
IGdjcnlfbXBpX21vZChjb3VudGVyTVBJLCBjb3VudGVyRGF0YU1QSSwgY291bnRlckxpbWl0TVBJ
KTsKKworICAgIHsKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBsZWV3YXkgb2YgdGhlIGluaXRp
YWxseS1wcm92aWRlZCBjb3VudGVyOiBjb3VudGVyTGltaXRNUEkgLSBjb3VudGVyTVBJLgorICAg
ICAgICAvLyBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBudW1iZXIgb2YgYmxvY2tzIHdlIGNhbiBl
bmNyeXB0L2RlY3J5cHQgd2l0aCB0aGF0IGNvdW50ZXIKKyAgICAgICAgLy8gKGluY3JlbWVudGlu
ZyBpdCBhZnRlciBlYWNoIG9wZXJhdGlvbikgYmVmb3JlIHRoZSBjb3VudGVyIHdyYXBzIGFyb3Vu
ZCB0byAwLgorICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGNvdW50ZXJM
ZWV3YXlNUEkoZ2NyeV9tcGlfbmV3KDApKTsKKyAgICAgICAgZ2NyeV9tcGlfc3ViKGNvdW50ZXJM
ZWV3YXlNUEksIGNvdW50ZXJMaW1pdE1QSSwgY291bnRlck1QSSk7CisKKyAgICAgICAgLy8gSWYg
Y291bnRlckxlZXdheU1QSSBpcyBsYXJnZXIgb3IgZXF1YWwgdG8gdGhlIGRlZHVjZWQgYmxvY2sg
Y291bnQsIHdlIGNhbiBkaXJlY3RseQorICAgICAgICAvLyBlbmNyeXB0IG9yIGRlY3J5cHQgdGhl
IHByb3ZpZGVkIGRhdGEgaW4gYSBzaW5nbGUgc3RlcCBzaW5jZSBpdCdzIGVuc3VyZWQgdGhhdCB0
aGUKKyAgICAgICAgLy8gY291bnRlciB3b24ndCBvdmVyZmxvdy4KKyAgICAgICAgaWYgKGdjcnlf
bXBpX2NtcChjb3VudGVyTGVld2F5TVBJLCBibG9ja0NvdW50TVBJKSA+PSAwKQorICAgICAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oY291bnRlciwgaW5wdXRUZXh0LmRhdGEoKSwgaW5wdXRU
ZXh0LnNpemUoKSk7CisgICAgfQorCisgICAgLy8gRnJvbSBoZXJlIG9ud2FyZHMgd2UncmUgZGVh
bGluZyB3aXRoIGEgY291bnRlciBvZiB3aGljaCB0aGUgbGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggdGhl
CisgICAgLy8gcHJvdmlkZWQgZGF0YSwgbWVhbmluZyB3ZSdsbCBhbHNvIGhhdmUgdG8gbWFuYWdl
IHRoZSBub25jZSBkYXRhLiBUaGUgY291bnRlciB3aWxsIGFsc28KKyAgICAvLyB3cmFwIGFyb3Vu
ZCwgc28gd2UnbGwgaGF2ZSB0byBhZGRyZXNzIHRoYXQgdG9vLgorCisgICAgLy8gRGV0ZXJtaW5l
IHRoZSBub25jZSBNUEkgdGhhdCB3ZSdsbCB1c2UgdG8gcmVjb25zdHJ1Y3QgdGhlIGNvdW50ZXIg
ZGF0YSBmb3IgZWFjaCBibG9jazoKKyAgICAvLyAoY291bnRlckRhdGFNUEkgLSBjb3VudGVyTVBJ
KS4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNvdW50ZXJEYXRhTVBJIHdpdGggdGhlIGxvd2VzdAor
ICAgIC8vIGNvdW50ZXJMZW5ndGggYml0cyBjbGVhcmVkLgorICAgIFBBTDo6R0NyeXB0OjpIYW5k
bGU8Z2NyeV9tcGlfdD4gbm9uY2VNUEkoZ2NyeV9tcGlfbmV3KDApKTsKKyAgICBnY3J5X21waV9z
dWIobm9uY2VNUEksIGNvdW50ZXJEYXRhTVBJLCBjb3VudGVyTVBJKTsKKworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBvcHRpbWl6ZWQgZnVydGhlciBieSBmaXJzdCBlbmNyeXB0aW5nIHRo
ZSBhbW91bnQgb2YgYmxvY2tzIGZvcgorICAgIC8vIHdoaWNoIHRoZSBjb3VudGVyIHdvbid0IHll
dCB3cmFwIGFyb3VuZCwgYW5kIHRoZW4gZW5jcnlwdGluZyB0aGUgcmVzdCBvZiB0aGUgYmxvY2tz
CisgICAgLy8gc3RhcnRpbmcgZnJvbSB0aGUgY291bnRlciBzZXQgdG8gMC4KKworICAgIFZlY3Rv
cjx1aW50OF90PiBvdXRwdXQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2NrQ291bnRlckRhdGEo
MTYpOworICAgIHNpemVfdCBpbnB1dFRleHRTaXplID0gaW5wdXRUZXh0LnNpemUoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRUZXh0U2l6ZTsgaSArPSAxNikgeworICAgICAg
ICBzaXplX3QgYmxvY2tJbnB1dFNpemUgPSBzdGQ6Om1pbjxzaXplX3Q+KDE2LCBpbnB1dFRleHRT
aXplIC0gaSk7CisKKyAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBibG9jay1zcGVjaWZpYyBjb3Vu
dGVyOiAobm9uY2VNUEkgKyBjb3VudGVyTVBJKS4KKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X21waV90PiBibG9ja0NvdW50ZXJNUEkoZ2NyeV9tcGlfbmV3KDApKTsKKyAgICAgICAg
Z2NyeV9tcGlfYWRkKGJsb2NrQ291bnRlck1QSSwgbm9uY2VNUEksIGNvdW50ZXJNUEkpOworCisg
ICAgICAgIGVycm9yID0gZ2NyeV9tcGlfcHJpbnQoR0NSWU1QSV9GTVRfVVNHLCBibG9ja0NvdW50
ZXJEYXRhLmRhdGEoKSwgYmxvY2tDb3VudGVyRGF0YS5zaXplKCksIG51bGxwdHIsIGJsb2NrQ291
bnRlck1QSSk7CisgICAgICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEVuY3J5cHQvZGVjcnlwdCB0
aGlzIHNpbmdsZSBibG9jayB3aXRoIHRoZSBibG9jay1zcGVjaWZpYyBjb3VudGVyLiBPdXRwdXQg
Zm9yIHRoaXMKKyAgICAgICAgLy8gc2luZ2xlIGJsb2NrIGlzIGFwcGVuZGVkIHRvIHRoZSBnZW5l
cmFsIG91dHB1dCB2ZWN0b3IuCisgICAgICAgIGF1dG8gYmxvY2tPdXRwdXQgPSBjYWxsT3BlcmF0
aW9uKGJsb2NrQ291bnRlckRhdGEsIGlucHV0VGV4dC5kYXRhKCkgKyBpLCBibG9ja0lucHV0U2l6
ZSk7CisgICAgICAgIGlmICghYmxvY2tPdXRwdXQpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgICAgIG91dHB1dC5hcHBlbmRWZWN0b3IoKmJsb2NrT3V0cHV0KTsKKwor
ICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGNvdW50ZXIuIFRoZSBtb2R1bHVzIG9wZXJhdGlvbiB0
YWtlcyBjYXJlIG9mIGFueSB3cmFwLWFyb3VuZC4KKyAgICAgICAgUEFMOjpHQ3J5cHQ6OkhhbmRs
ZTxnY3J5X21waV90PiBjb3VudGVySW5jcmVtZW50TVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAg
ICAgIGdjcnlfbXBpX2FkZF91aShjb3VudGVySW5jcmVtZW50TVBJLCBjb3VudGVyTVBJLCAxKTsK
KyAgICAgICAgZ2NyeV9tcGlfbW9kKGNvdW50ZXJNUEksIGNvdW50ZXJJbmNyZW1lbnRNUEksIGNv
dW50ZXJMaW1pdE1QSSk7CisgICAgfQorCisgICAgcmV0dXJuIG91dHB1dDsKK30KKwordm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybUVuY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBr
ZXksIFZlY3Rvcjx1aW50OF90PiYmIHBsYWluVGV4dCwgVmVjdG9yQ2FsbGJhY2smJiBjYWxsYmFj
aywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7CisgICAgY29udGV4dC5y
ZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RG
TW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFpblRleHQgPSBXVEZNb3Zl
KHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxi
YWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0XSgpIG11dGFibGUgewor
ICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0PENyeXB0b0FsZ29yaXRo
bUFlc0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAgYXV0byYgYWVzS2V5ID0g
ZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIG91
dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZW5jcnlwdCwgYWVzS2V5LmtleSgpLCBh
ZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVycy5sZW5ndGgsIHBsYWlu
VGV4dCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIC8vIFdl
IHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRo
ZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBvc3RU
YXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
ZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRl
cmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3Jr
ZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAgICAg
ICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCi12b2lkIENy
eXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiwgUmVmPENyeXB0b0tleT4mJiwgVmVjdG9yPHVpbnQ4
X3Q+JiYsIFZlY3RvckNhbGxiYWNrJiYsIEV4Y2VwdGlvbkNhbGxiYWNrJiYsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBXb3JrUXVldWUmKQordm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpw
bGF0Zm9ybURlY3J5cHQoc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
JiYgcGFyYW1ldGVycywgUmVmPENyeXB0b0tleT4mJiBrZXksIFZlY3Rvcjx1aW50OF90PiYmIGNp
cGhlclRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2VwdGlvbkNhbGxiYWNrJiYg
ZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFdvcmtR
dWV1ZSYgd29ya1F1ZXVlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY29udGV4dC5y
ZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtwYXJhbWV0ZXJzID0gV1RG
TW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBoZXJUZXh0ID0gV1RGTW92
ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRleHRdKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNhc3Q8Q3J5cHRvQWxnb3Jp
dGhtQWVzQ3RyUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAgICBhdXRvJiBhZXNLZXkg
PSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8g
b3V0cHV0ID0gZ2NyeXB0QUVTX0NUUihnY3J5X2NpcGhlcl9kZWNyeXB0LCBhZXNLZXkua2V5KCks
IGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0ZXJzLmxlbmd0aCwgY2lw
aGVyVGV4dCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnBv
c3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKV0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5
IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9X
b3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2soCisgICAgICAgICAg
ICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayldKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNGQ1YWFjZWJhOTdkYjA3MTMzZWE5ZjYxMmFjMjRl
ZWEyMzY0MDE3OC4uNDdhYTEyOWU1ZDU1ZTA2ZWUwNzdkYTY0OTZhZDAxYmJkYzNhNzhiNyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEyIEBACisyMDE3LTA0LTI4ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBRVNfQ1RSIHN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQyMAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Rl
c3RFeHBlY3RhdGlvbnM6IFVuc2tpcCB0aGUgcmVsZXZhbnQgQUVTX0NUUiB0ZXN0cy4KKwogMjAx
Ny0wNC0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAg
IFN1cHBvcnQgZm9yIHByb21pc2UgcmVqZWN0aW9uIGV2ZW50cyAodW5oYW5kbGVkcmVqZWN0aW9u
KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBkYWYxMDQz
ZWRhMzcyYTE0MTc5Njg1ODllZjdjMzg0ODMyYmIyMTdjLi5iNTVkZDc1YTYzMDVhNjU3NWY4NTQw
MGVkNWM1MmJmZTc4NzBlNmNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtNzI0LDYgKzcyNCwyMyBAQCBCdWcoR1RLKSBlZGl0aW5nL3NlY3VyZS1pbnB1
dCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vc3VidGxlIFsgU2tpcCBd
CiB3ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by93ZWJraXRTdWJ0bGUgWyBTa2lwIF0KIHdlYmtp
dC5vcmcvYi8xMzMxMjIgY3J5cHRvL3dvcmtlcnMvc3VidGxlIFsgU2tpcCBdCitjcnlwdG8vc3Vi
dGxlL2Flcy1jdHItZW5jcnlwdC1tYWxmb3JtZWQtcGFyYW1ldGVycy5odG1sIFsgUGFzcyBdCitj
cnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTEyOC5o
dG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0LWtleS1q
d2stbGVuZ3RoLTE5Mi5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItZ2VuZXJh
dGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTI1Ni5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxl
L2Flcy1jdHItZ2VuZXJhdGUtZXhwb3J0LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQorY3J5cHRvL3N1
YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWtleS1lbmNyeXB0LWRlY3J5cHQuaHRtbCBbIFBhc3MgXQor
Y3J5cHRvL3N1YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWtleS5odG1sIFsgUGFzcyBdCitjcnlwdG8v
c3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1rZXktbGVuZ3RoLTEyOC5odG1sIFsgUGFzcyBdCitj
cnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1rZXktbGVuZ3RoLTE5Mi5odG1sIFsgUGFz
cyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1rZXktbGVuZ3RoLTI1Ni5odG1s
IFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWtleS1kZWNyeXB0Lmh0bWwg
WyBQYXNzIF0KK2NyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5LWVuY3J5cHQuaHRtbCBb
IFBhc3MgXQorY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9ydC1rZXktdW53cmFwLWp3ay1rZXku
aHRtbCBbIFBhc3MgXQorY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9ydC1rZXktdW53cmFwLXJh
dy1rZXkuaHRtbCBbIFBhc3MgXQorY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9ydC1rZXktd3Jh
cC1qd2sta2V5Lmh0bWwgWyBQYXNzIF0KK2NyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5
LXdyYXAtcmF3LWtleS5odG1sIFsgUGFzcyBdCitjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0
LXJhdy1rZXkuaHRtbCBbIFBhc3MgXQogY3J5cHRvL3N1YnRsZS9obWFjLWV4cG9ydC1rZXktbWFs
Zm9ybWVkLXBhcmFtZXRlcnMuaHRtbCBbIFBhc3MgXQogY3J5cHRvL3N1YnRsZS9obWFjLWdlbmVy
YXRlLWV4cG9ydC1rZXktandrLXNoYTEuaHRtbCBbIFBhc3MgXQogY3J5cHRvL3N1YnRsZS9obWFj
LWdlbmVyYXRlLWV4cG9ydC1rZXktandrLXNoYTIyNC5odG1sIFsgUGFzcyBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313072</attachid>
            <date>2017-06-16 06:26:11 -0700</date>
            <delta_ts>2017-06-16 06:26:11 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-171420-20170616152609.patch</filename>
            <type>text/plain</type>
            <size>22303</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY3ZDBmZjJjMzgzNjg3
ZDNmNDUxMGYxODEzY2I4MzMyYWI4OTRmNy4uNGY0ZDY2ZWM1ZGQ0YmNiMmNmZDIzYmFiMWY3NDlk
YjRlZjcyMDAwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE3LTA2LTE2ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBRVNf
Q1RSIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MTQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56YXJvLgorCisg
ICAgICAgIEltcGxlbWVudCBBRVNfQ1RSIHN1cHBvcnQgZm9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25z
IHRoYXQgdXNlIGxpYmdjcnlwdC4KKworICAgICAgICBCb3RoIGVuY3J5cHRpb24gYW5kIGRlY3J5
cHRpb24gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBpbiBhIHNpbmdsZSBnY3J5cHRBRVNfQ1RSKCkg
ZnVuY3Rpb24sCisgICAgICAgIHdpdGggdGhlIHNwZWNpZmljIG9wZXJhdGlvbiBiZWluZyBwYXNz
ZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiBUaGUgYXBwcm9wcmlhdGUgQUVTCisgICAgICAgIGFs
Z29yaXRobSBpcyBwaWNrZWQsIGFuZCBhIGdjcnlfY2lwaGVyX2hkX3Qgb2JqZWN0IGlzIGNyZWF0
ZWQgYW5kIGhhcyB0aGUgZ2l2ZW4ga2V5IHNldC4KKyAgICAgICAgVGhpcyBrZXkgd2lsbCByZW1h
aW4gdGhlIHNhbWUgdGhyb3VnaG91dCB0aGUgZ2NyeV9jaXBoZXJfaGRfdCBsaWZldGltZSwgZXZl
biBhZnRlcgorICAgICAgICBnY3J5X2NpcGhlcl9yZXNldCgpIGNhbGxzLgorCisgICAgICAgIFRo
ZSBlbmNyeXB0L2RlY3J5cHQgb3BlcmF0aW9uIGlzIHdyYXBwZWQgaW50byBhIGhlbHBlciBsYW1i
ZGEgZnVuY3RvciB0aGF0IGFjY2VwdHMgdGhlCisgICAgICAgIGdpdmVuIGNvdW50ZXIgYW5kIGlu
cHV0IGRhdGEuIEl0IHJlc2V0cyB0aGUgY2lwaGVyIG9iamVjdCwgc2V0cyB0aGUgY291bnRlciBk
YXRhLCBhbmQKKyAgICAgICAgcGVyZm9ybXMgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24sIHJldHVy
bmluZyB0aGUgb3V0cHV0IGRhdGEuCisKKyAgICAgICAgbGliZ2NyeXB0IGRvZXNuJ3Qgc3VwcG9y
dCBzZXR0aW5nIGNvdW50ZXIgZGF0YSBvbiBhIGdjcnlfY2lwaGVyX2hkX3Qgb2JqZWN0IHdpdGgg
b25seQorICAgICAgICBwYXJ0IG9mIHRoYXQgZGF0YSBiZWluZyB1c2VkIGFzIHRoZSBhY3R1YWwg
Y291bnRlciwgd2l0aCB0aGUgcmVzdCBhY3RpbmcgYXMgYSBub25jZSwgbGlrZQorICAgICAgICB0
aGUgV2ViIENyeXB0byBzcGVjaWZpY2F0aW9uIGFsbG93cy4gV2UgaGF2ZSB0byBpbXBsZW1lbnQg
dGhlIHN1cHBvcnQgZm9yIHRoYXQgb24gb3VyIG93bi4KKworICAgICAgICBXZSBjb21wdXRlIHRo
ZSBudW1iZXIgb2YgYmxvY2tzIHdlJ2xsIGJlIHByb2Nlc3NpbmcgYW5kIHRoZSB1cHBlciBleGNs
dXNpdmUgbGltaXQgZm9yIHRoZQorICAgICAgICBnaXZlbiBjb3VudGVyIGxlbmd0aC4gV2UgaW1t
ZWRpYXRlbHkgYmFpbCBpZiB0aGUgY291bnRlciBsaW1pdCBpcyBsZXNzIHRoYW4gdGhlIGNvbXB1
dGVkCisgICAgICAgIGJsb2NrIGNvdW50LCBzaW5jZSB0aGF0IHdvdWxkIG1lYW4gdGhhdCB0aGUg
Y291bnRlciB2YWx1ZXMgd291bGQgYmUgcmVwZWF0ZWQuCisKKyAgICAgICAgV2Ugc2hvcnQtY3V0
IHRvIGEgZGlyZWN0IG9wZXJhdGlvbiBjYWxsIGlmIHRoZSBjb3VudGVyIGxlbmd0aCBtYXRjaGVz
IHNpemUgb2YgdGhlIGNvdW50ZXIKKyAgICAgICAgZGF0YSAtLSB3ZSBkb24ndCBoYXZlIHRvIGFk
anVzdCB0aGUgY291bnRlciBkYXRhIGluIGFueSB3YXkgaWYgdGhhdCdzIHRoZSBjYXNlLgorCisg
ICAgICAgIE90aGVyd2lzZSB3ZSBtb3ZlIGNvdW50ZXIgZGF0YSBpbnRvIHRoZSBNUEkgZm9ybWF0
LiBUaGUgbm9uY2UgYW5kIHRoZSBhY3R1YWwgY291bnRlciBNUElzCisgICAgICAgIGNhbiBzcGxp
dCBvdXQgb2YgdGhlIGNvdW50ZXIgZGF0YSBNUEkgd2l0aCB0aGUgbW9kdWx1cyBvcGVyYXRpb24g
YW5kIHRoZSBjb3VudGVyIGxpbWl0IE1QSS4KKworICAgICAgICBXZSB0YWtlIGFub3RoZXIgc2hv
cnRjdXQgc3RyYWlnaHQgdG8gdGhlIG9wZXJhdGlvbiBjYWxsIGlmIHdlJ3JlIGFibGUgdG8gZGV0
ZXJtaW5lIHRoYXQgdGhlCisgICAgICAgICdjb3VudGVyIGxlZXdheScgdmFsdWUsIGkuZS4gdGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5pdGlhbCBjb3VudGVyIE1QSSBhbmQgdGhlIGNvdW50
ZXIKKyAgICAgICAgbGltaXQgTVBJLCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8gdGhlIHByZWRpY3Rl
ZCBibG9jayBzaXplIC0tIGlmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGNvdW50ZXIKKyAgICAgICAg
d29uJ3Qgd3JhcCBhcm91bmQgYW5kIGNoYW5nZSB0aGUgbm9uY2UgZGF0YS4KKworICAgICAgICBJ
biB3b3JzdC1jYXNlIHNjZW5hcmlvIHRoZSBjb3VudGVyIGRhdGEgd2lsbCB3cmFwIGFyb3VuZCBh
bmQgd2UgaGF2ZSB0byBhZGRyZXNzIHRoYXQuIFRoZQorICAgICAgICBjdXJyZW50IGltcGxlbWVu
dGF0aW9uIHRha2VzIHRoZSBzbG93ZXN0IHBvc3NpYmxlIHBhdGggZm9yIHRoZSBtb21lbnQsIGVu
Y3J5cHRpbmcvZGVjcnlwdGluZworICAgICAgICBlYWNoIGJsb2NrIHNlcGFyYXRlbHkuIEZvciBl
YWNoIHN0ZXAgdGhlIGNvdW50ZXIgaXMgY29tYmluZWQgd2l0aCB0aGUgbm9uY2UsIHRoZSByZXN1
bHRpbmcKKyAgICAgICAgTVBJIGRhdGEgcmV0cmlldmVkIGFuZCBwYXNzZWQgdG8gdGhlIG9wZXJh
dGlvbiBmdW5jdGlvbiwgYW5kIHRoZSByZXR1cm5lZCBibG9jayBvdXRwdXQKKyAgICAgICAgYXBw
ZW5kZWQgdG8gdGhlIGZpbmFsIG91dHB1dCB2ZWN0b3IuIFRoZSBjb3VudGVyIE1QSSBpcyB0aGVu
IGluY3JlbWVudGVkIGFuZCByYW4gdGhyb3VnaCB0aGUKKyAgICAgICAgbW9kdWx1cyBvcGVyYXRp
b24sIGxpbWl0aW5nIHRoZSBNUEkgdmFsdWUgdG8gdGhlIHByZXZpb3VzbHktY29tcHV0ZWQgY291
bnRlciBsaW1pdC4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gcmVsZXZhbnQgdGVzdHMgYXJl
IHBhc3NpbmcgYW5kIGFyZSB1bnNraXBwZWQuCisKKyAgICAgICAgKiBjcnlwdG8vZ2NyeXB0L0Ny
eXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbE9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnY3J5cHRBRVNfQ1RSKToKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRW5jcnlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQpOgorCiAy
MDE3LTA2LTE2ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbV2luXSBXZWJLaXQgcmVuZGVycyBzY3JvbGxiYXIgd3JvbmcgYXQgMTI1JSBzY2FsZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCmluZGV4IDU3YTI4ZTQxZWExNTkyY2NkZjljZTUyNDMzNDEzNGIxYWIzYWY3
MTQuLjljYmNiODMxMmYwYjQ1OTBjNjVkMzg1MWUxM2NjMzEyOWI5NmY3NWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE3LTA2LTE2ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBRVNfQ1RSIHN1cHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTQyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56YXJvLgorCisgICAgICAgICogcGFsL2Ny
eXB0by9nY3J5cHQvVXRpbGl0aWVzLmg6IEFkZCBhIEdDcnlwdENpcGhlck9wZXJhdGlvbiB0eXBl
IGFsaWFzIHRoYXQgY2FuIGJlIHVzZWQKKyAgICAgICAgZm9yIHRoZSBnY3J5X2NpcGhlcl9kZWNy
eXB0IG9yIGdjcnlfY2lwaGVyX2VuY3J5cHQgZnVuY3Rpb24gcG9pbnRlcnMuCisKIDIwMTctMDYt
MTAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZlcnRlZCBy
MjE4MDU2IGJlY2F1c2UgaXQgbWFkZSB0aGUgSURFIHJlaW5kZXggY29uc3RhbnRseS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2djcnlwdC9VdGlsaXRpZXMuaAppbmRleCAz
ZGRmOGQwM2JjNmI2MzE5ZWI3OTk5NDY1NWNmNmYwOTQzY2MzNzczLi4xNDYwOGZmZDJlYWYzZjAy
OTVkY2VjZGI3ZjUxZDJlOGRlYmFjOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2NyeXB0by9nY3J5cHQvVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9jcnlwdG8vZ2NyeXB0L1V0aWxpdGllcy5oCkBAIC0zOSw2ICszOSw4IEBAIG5hbWVzcGFjZSBH
Q3J5cHQgewogICAgICAgICAgICAgZ2NyeV9jaXBoZXJfY3RsICgoYSksIEdDUllDVExfRklOQUxJ
WkUsIE5VTEwsIDApCiAjZW5kaWYKIAordXNpbmcgR0NyeXB0Q2lwaGVyT3BlcmF0aW9uID0gZ2Ny
eV9lcnJvcl90KGdjcnlfY2lwaGVyX2hkX3QsIHZvaWQqLCBzaXplX3QsIGNvbnN0IHZvaWQqLCBz
aXplX3QpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9nRXJyb3IoZ2NyeV9lcnJvcl90IGVycm9y
KQogewogICAgIFdURkxvZ0Fsd2F5cygibGliZ2NyeXB0IGVycm9yOiBzb3VyY2UgJyVzJywgZGVz
Y3JpcHRpb24gJyVzJyIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRv
L2djcnlwdC9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSR0NyeXB0LmNwcAppbmRleCBiMzU2ZDE1ZWQ4
OWQyZDIxMmM5MzUwZGY0NTdkN2Y1MDVhYzEyZDlkLi44OTc0OWUxZTkxNmMyZjRiYWYxMWUyOGM0
NzBlMTJhNTkzODE5NjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vZ2NyeXB0
L0NyeXB0b0FsZ29yaXRobUFFU19DVFJHQ3J5cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9nY3J5cHQvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUkdDcnlwdC5jcHAKQEAgLTEsNSArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDE5ICszMCwyMjcgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQog
CisjaW5jbHVkZSAiQ3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zLmgiCisjaW5jbHVkZSAiQ3J5
cHRvS2V5QUVTLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgPHBhbC9jcnlwdG8vZ2NyeXB0L0hhbmRsZS5oPgorI2luY2x1ZGUgPHBhbC9jcnlwdG8vZ2Ny
eXB0L1V0aWxpdGllcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPiYmLCBSZWY8Q3J5cHRvS2V5PiYmLCBWZWN0b3I8dWludDhfdD4mJiwg
VmVjdG9yQ2FsbGJhY2smJiwgRXhjZXB0aW9uQ2FsbGJhY2smJiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIFdvcmtRdWV1ZSYpCisvLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmVz
ZXRzIHRoZSBjaXBoZXIgb2JqZWN0LCBzZXRzIHRoZSBwcm92aWRlZCBjb3VudGVyIGRhdGEsCisv
LyBhbmQgZXhlY3V0ZXMgdGhlIGVuY3J5cHQgb3IgZGVjcnlwdCBvcGVyYXRpb24sIHJldHJpZXZp
bmcgYW5kIHJldHVybmluZyB0aGUgb3V0cHV0IGRhdGEuCitzdGF0aWMgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGNhbGxPcGVyYXRpb24oR0NyeXB0Q2lwaGVyT3BlcmF0aW9uIG9wZXJh
dGlvbiwgZ2NyeV9jaXBoZXJfaGRfdCBoYW5kbGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgY291
bnRlciwgY29uc3QgdWludDhfdCogZGF0YSwgY29uc3Qgc2l6ZV90IHNpemUpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9yZXNl
dChoYW5kbGUpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9zZXRjdHIoaGFuZGxlLCBjb3Vu
dGVyLmRhdGEoKSwgY291bnRlci5zaXplKCkpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05P
X0VSUk9SKSB7CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZXJyb3IgPSBnY3J5X2NpcGhlcl9m
aW5hbChoYW5kbGUpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG91dHB1dChzaXplKTsKKyAgICBl
cnJvciA9IG9wZXJhdGlvbihoYW5kbGUsIG91dHB1dC5kYXRhKCksIG91dHB1dC5zaXplKCksIGRh
dGEsIHNpemUpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorCisgICAgcmV0dXJuIG91dHB1dDsKK30KKworc3RhdGljIHN0ZDo6b3B0aW9u
YWw8VmVjdG9yPHVpbnQ4X3Q+PiBnY3J5cHRBRVNfQ1RSKEdDcnlwdENpcGhlck9wZXJhdGlvbiBv
cGVyYXRpb24sIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGNvdW50ZXIsIHNpemVfdCBjb3VudGVyTGVuZ3RoLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGlucHV0VGV4dCkKK3sKKyAgICBjb25zdGV4cHIgc2l6ZV90IGJsb2NrU2l6ZSA9IDE2OworICAg
IGF1dG8gYWxnb3JpdGhtID0gUEFMOjpHQ3J5cHQ6OmFlc0FsZ29yaXRobUZvcktleVNpemUoa2V5
LnNpemUoKSAqIDgpOworICAgIGlmICghYWxnb3JpdGhtKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgLy8gQ29uc3RydWN0IHRoZSBsaWJnY3J5cHQgY2lwaGVyIG9iamVjdCBh
bmQgYXR0YWNoIHRoZSBrZXkgdG8gaXQuIEtleSBpbmZvcm1hdGlvbiBvbiB0aGlzCisgICAgLy8g
Y2lwaGVyIG9iamVjdCB3aWxsIGxpdmUgdGhyb3VnaCBhbnkgZ2NyeV9jaXBoZXJfcmVzZXQoKSBj
YWxscy4KKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfY2lwaGVyX2hkX3Q+IGhhbmRsZTsK
KyAgICBnY3J5X2Vycm9yX3QgZXJyb3IgPSBnY3J5X2NpcGhlcl9vcGVuKCZoYW5kbGUsICphbGdv
cml0aG0sIEdDUllfQ0lQSEVSX01PREVfQ1RSLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR1BHX0VS
Ul9OT19FUlJPUikgeworICAgICAgICBQQUw6OkdDcnlwdDo6bG9nRXJyb3IoZXJyb3IpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGVycm9yID0gZ2NyeV9jaXBo
ZXJfc2V0a2V5KGhhbmRsZSwga2V5LmRhdGEoKSwga2V5LnNpemUoKSk7CisgICAgaWYgKGVycm9y
ICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAgUEFMOjpHQ3J5cHQ6OmxvZ0Vycm9yKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBDYWxj
dWxhdGUgdGhlIGJsb2NrIGNvdW50OiAoKGlucHV0VGV4dC5zaXplKCkgKyBibG9ja1NpemUgLSAx
KSAvIGJsb2NrU2l6ZSksIHJlbWFpbmRlciBkaXNjYXJkZWQuCisgICAgUEFMOjpHQ3J5cHQ6Okhh
bmRsZTxnY3J5X21waV90PiBibG9ja0NvdW50TVBJKGdjcnlfbXBpX25ldygwKSk7CisgICAgewor
ICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+IGJsb2NrU2l6ZU1QSShnY3J5
X21waV9zZXRfdWkobnVsbHB0ciwgYmxvY2tTaXplKSk7CisgICAgICAgIFBBTDo6R0NyeXB0OjpI
YW5kbGU8Z2NyeV9tcGlfdD4gcm91bmRlZFVwU2l6ZShnY3J5X21waV9zZXRfdWkobnVsbHB0ciwg
aW5wdXRUZXh0LnNpemUoKSkpOworCisgICAgICAgIGdjcnlfbXBpX2FkZF91aShyb3VuZGVkVXBT
aXplLCByb3VuZGVkVXBTaXplLCBibG9ja1NpemUgLSAxKTsKKyAgICAgICAgZ2NyeV9tcGlfZGl2
KGJsb2NrQ291bnRNUEksIG51bGxwdHIsIHJvdW5kZWRVcFNpemUsIGJsb2NrU2l6ZU1QSSwgMCk7
CisgICAgfQorCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb3VudGVyIGxpbWl0IGZvciB0aGUgc3Bl
Y2lmaWVkIGNvdW50ZXIgbGVuZ3RoOiAoMiA8PCBjb3VudGVyTGVuZ3RoKS4KKyAgICAvLyAoY291
bnRlckxpbWl0TVBJIC0gMSkgaXMgdGhlIG1heGltdW0gdmFsdWUgdGhlIGNvdW50ZXIgY2FuIGhv
bGQgLS0gZXNzZW50aWFsbHkgaXQncworICAgIC8vIGEgYml0LW1hc2sgZm9yIHZhbGlkIGNvdW50
ZXIgdmFsdWVzLgorICAgIFBBTDo6R0NyeXB0OjpIYW5kbGU8Z2NyeV9tcGlfdD4gY291bnRlckxp
bWl0TVBJKGdjcnlfbXBpX3NldF91aShudWxscHRyLCAxKSk7CisgICAgZ2NyeV9tcGlfbXVsXzJl
eHAoY291bnRlckxpbWl0TVBJLCBjb3VudGVyTGltaXRNUEksIGNvdW50ZXJMZW5ndGgpOworCisg
ICAgLy8gQ291bnRlciB2YWx1ZXMgbXVzdCBub3QgcmVwZWF0IGZvciBhIGdpdmVuIGNpcGhlciB0
ZXh0LiBJZiB0aGUgY291bnRlciBsaW1pdCAoaS5lLgorICAgIC8vIHRoZSBudW1iZXIgb2YgdW5p
cXVlIGNvdW50ZXIgdmFsdWVzIHdlIGNvdWxkIHByb2R1Y2UgZm9yIHRoZSBzcGVjaWZpZWQgY291
bnRlcgorICAgIC8vIGxlbmd0aCkgaXMgbG93ZXIgdGhhbiB0aGUgZGVkdWNlZCBibG9jayBjb3Vu
dCwgd2UgYmFpbC4KKyAgICBpZiAoZ2NyeV9tcGlfY21wKGNvdW50ZXJMaW1pdE1QSSwgYmxvY2tD
b3VudE1QSSkgPCAwKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgLy8gSWYg
dGhlIGNvdW50ZXIgbGVuZ3RoLCBpbiBiaXRzLCBtYXRjaGVzIHRoZSBzaXplIG9mIHRoZSBjb3Vu
dGVyIGRhdGEsIHdlIGRvbid0IGhhdmUgdG8KKyAgICAvLyB1c2UgYW55IHBhcnQgb2YgdGhlIGNv
dW50ZXIgVmVjdG9yPD4gYXMgbm9uY2UuIFRoaXMgYWxsb3dzIHVzIHRvIGRpcmVjdGx5IGVuY3J5
cHQgb3IKKyAgICAvLyBkZWNyeXB0IGFsbCB0aGUgcHJvdmlkZWQgZGF0YSBpbiBhIHNpbmdsZSBz
dGVwLgorICAgIGlmIChjb3VudGVyTGVuZ3RoID09IGNvdW50ZXIuc2l6ZSgpICogOCkKKyAgICAg
ICAgcmV0dXJuIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBoYW5kbGUsIGNvdW50ZXIsIGlucHV0
VGV4dC5kYXRhKCksIGlucHV0VGV4dC5zaXplKCkpOworCisgICAgLy8gU2NhbiB0aGUgY291bnRl
ciBkYXRhIGludG8gdGhlIE1QSSBmb3JtYXQuIFdlJ2xsIGRvIGFsbCB0aGUgY291bnRlciBjb21w
dXRhdGlvbnMgd2l0aAorICAgIC8vIHRoZSBNUEkgQVBJLgorICAgIFBBTDo6R0NyeXB0OjpIYW5k
bGU8Z2NyeV9tcGlfdD4gY291bnRlckRhdGFNUEk7CisgICAgZXJyb3IgPSBnY3J5X21waV9zY2Fu
KCZjb3VudGVyRGF0YU1QSSwgR0NSWU1QSV9GTVRfVVNHLCBjb3VudGVyLmRhdGEoKSwgY291bnRl
ci5zaXplKCksIG51bGxwdHIpOworICAgIGlmIChlcnJvciAhPSBHUEdfRVJSX05PX0VSUk9SKSB7
CisgICAgICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgLy8gRXh0cmFjdCB0aGUgY291bnRlciBNUEkgZnJv
bSB0aGUgY291bnRlckRhdGFNUEk6IChjb3VudGVyRGF0YU1QSSAlIGNvdW50ZXJMaW1pdE1QSSku
CisgICAgLy8gVGhpcyBNUEkgcmVwcmVzZW50cyBzb2xlbHkgdGhlIGNvdW50ZXIgdmFsdWUsIGFz
IGluaXRpYWxseSBwcm92aWRlZC4KKyAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdjcnlfbXBpX3Q+
IGNvdW50ZXJNUEkoZ2NyeV9tcGlfbmV3KDApKTsKKyAgICBnY3J5X21waV9tb2QoY291bnRlck1Q
SSwgY291bnRlckRhdGFNUEksIGNvdW50ZXJMaW1pdE1QSSk7CisKKyAgICB7CisgICAgICAgIC8v
IENhbGN1bGF0ZSB0aGUgbGVld2F5IG9mIHRoZSBpbml0aWFsbHktcHJvdmlkZWQgY291bnRlcjog
Y291bnRlckxpbWl0TVBJIC0gY291bnRlck1QSS4KKyAgICAgICAgLy8gVGhpcyBpcyBlc3NlbnRp
YWxseSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB3ZSBjYW4gZW5jcnlwdC9kZWNyeXB0IHdpdGggdGhh
dCBjb3VudGVyCisgICAgICAgIC8vIChpbmNyZW1lbnRpbmcgaXQgYWZ0ZXIgZWFjaCBvcGVyYXRp
b24pIGJlZm9yZSB0aGUgY291bnRlciB3cmFwcyBhcm91bmQgdG8gMC4KKyAgICAgICAgUEFMOjpH
Q3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBjb3VudGVyTGVld2F5TVBJKGdjcnlfbXBpX25ldygw
KSk7CisgICAgICAgIGdjcnlfbXBpX3N1Yihjb3VudGVyTGVld2F5TVBJLCBjb3VudGVyTGltaXRN
UEksIGNvdW50ZXJNUEkpOworCisgICAgICAgIC8vIElmIGNvdW50ZXJMZWV3YXlNUEkgaXMgbGFy
Z2VyIG9yIGVxdWFsIHRvIHRoZSBkZWR1Y2VkIGJsb2NrIGNvdW50LCB3ZSBjYW4gZGlyZWN0bHkK
KyAgICAgICAgLy8gZW5jcnlwdCBvciBkZWNyeXB0IHRoZSBwcm92aWRlZCBkYXRhIGluIGEgc2lu
Z2xlIHN0ZXAgc2luY2UgaXQncyBlbnN1cmVkIHRoYXQgdGhlCisgICAgICAgIC8vIGNvdW50ZXIg
d29uJ3Qgb3ZlcmZsb3cuCisgICAgICAgIGlmIChnY3J5X21waV9jbXAoY291bnRlckxlZXdheU1Q
SSwgYmxvY2tDb3VudE1QSSkgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbiwgaGFuZGxlLCBjb3VudGVyLCBpbnB1dFRleHQuZGF0YSgpLCBpbnB1dFRleHQu
c2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBGcm9tIGhlcmUgb253YXJkcyB3ZSdyZSBkZWFsaW5n
IHdpdGggYSBjb3VudGVyIG9mIHdoaWNoIHRoZSBsZW5ndGggZG9lc24ndCBtYXRjaCB0aGUKKyAg
ICAvLyBwcm92aWRlZCBkYXRhLCBtZWFuaW5nIHdlJ2xsIGFsc28gaGF2ZSB0byBtYW5hZ2UgdGhl
IG5vbmNlIGRhdGEuIFRoZSBjb3VudGVyIHdpbGwgYWxzbworICAgIC8vIHdyYXAgYXJvdW5kLCBz
byB3ZSdsbCBoYXZlIHRvIGFkZHJlc3MgdGhhdCB0b28uCisKKyAgICAvLyBEZXRlcm1pbmUgdGhl
IG5vbmNlIE1QSSB0aGF0IHdlJ2xsIHVzZSB0byByZWNvbnN0cnVjdCB0aGUgY291bnRlciBkYXRh
IGZvciBlYWNoIGJsb2NrOgorICAgIC8vIChjb3VudGVyRGF0YU1QSSAtIGNvdW50ZXJNUEkpLiBU
aGlzIGlzIGVxdWl2YWxlbnQgdG8gY291bnRlckRhdGFNUEkgd2l0aCB0aGUgbG93ZXN0CisgICAg
Ly8gY291bnRlckxlbmd0aCBiaXRzIGNsZWFyZWQuCisgICAgUEFMOjpHQ3J5cHQ6OkhhbmRsZTxn
Y3J5X21waV90PiBub25jZU1QSShnY3J5X21waV9uZXcoMCkpOworICAgIGdjcnlfbXBpX3N1Yihu
b25jZU1QSSwgY291bnRlckRhdGFNUEksIGNvdW50ZXJNUEkpOworCisgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIG9wdGltaXplZCBmdXJ0aGVyIGJ5IGZpcnN0IGVuY3J5cHRpbmcgdGhlIGFt
b3VudCBvZiBibG9ja3MgZm9yCisgICAgLy8gd2hpY2ggdGhlIGNvdW50ZXIgd29uJ3QgeWV0IHdy
YXAgYXJvdW5kLCBhbmQgdGhlbiBlbmNyeXB0aW5nIHRoZSByZXN0IG9mIHRoZSBibG9ja3MKKyAg
ICAvLyBzdGFydGluZyBmcm9tIHRoZSBjb3VudGVyIHNldCB0byAwLgorCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG91dHB1dDsKKyAgICBWZWN0b3I8dWludDhfdD4gYmxvY2tDb3VudGVyRGF0YSgxNik7
CisgICAgc2l6ZV90IGlucHV0VGV4dFNpemUgPSBpbnB1dFRleHQuc2l6ZSgpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dFRleHRTaXplOyBpICs9IDE2KSB7CisgICAgICAgIHNp
emVfdCBibG9ja0lucHV0U2l6ZSA9IHN0ZDo6bWluPHNpemVfdD4oMTYsIGlucHV0VGV4dFNpemUg
LSBpKTsKKworICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIGJsb2NrLXNwZWNpZmljIGNvdW50ZXI6
IChub25jZU1QSSArIGNvdW50ZXJNUEkpLgorICAgICAgICBQQUw6OkdDcnlwdDo6SGFuZGxlPGdj
cnlfbXBpX3Q+IGJsb2NrQ291bnRlck1QSShnY3J5X21waV9uZXcoMCkpOworICAgICAgICBnY3J5
X21waV9hZGQoYmxvY2tDb3VudGVyTVBJLCBub25jZU1QSSwgY291bnRlck1QSSk7CisKKyAgICAg
ICAgZXJyb3IgPSBnY3J5X21waV9wcmludChHQ1JZTVBJX0ZNVF9VU0csIGJsb2NrQ291bnRlckRh
dGEuZGF0YSgpLCBibG9ja0NvdW50ZXJEYXRhLnNpemUoKSwgbnVsbHB0ciwgYmxvY2tDb3VudGVy
TVBJKTsKKyAgICAgICAgaWYgKGVycm9yICE9IEdQR19FUlJfTk9fRVJST1IpIHsKKyAgICAgICAg
ICAgIFBBTDo6R0NyeXB0Ojpsb2dFcnJvcihlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgLy8gRW5jcnlwdC9kZWNyeXB0IHRoaXMg
c2luZ2xlIGJsb2NrIHdpdGggdGhlIGJsb2NrLXNwZWNpZmljIGNvdW50ZXIuIE91dHB1dCBmb3Ig
dGhpcworICAgICAgICAvLyBzaW5nbGUgYmxvY2sgaXMgYXBwZW5kZWQgdG8gdGhlIGdlbmVyYWwg
b3V0cHV0IHZlY3Rvci4KKyAgICAgICAgYXV0byBibG9ja091dHB1dCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uLCBoYW5kbGUsIGJsb2NrQ291bnRlckRhdGEsIGlucHV0VGV4dC5kYXRhKCkgKyBp
LCBibG9ja0lucHV0U2l6ZSk7CisgICAgICAgIGlmICghYmxvY2tPdXRwdXQpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIG91dHB1dC5hcHBlbmRWZWN0b3IoKmJs
b2NrT3V0cHV0KTsKKworICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGNvdW50ZXIuIFRoZSBtb2R1
bHVzIG9wZXJhdGlvbiB0YWtlcyBjYXJlIG9mIGFueSB3cmFwLWFyb3VuZC4KKyAgICAgICAgUEFM
OjpHQ3J5cHQ6OkhhbmRsZTxnY3J5X21waV90PiBjb3VudGVySW5jcmVtZW50TVBJKGdjcnlfbXBp
X25ldygwKSk7CisgICAgICAgIGdjcnlfbXBpX2FkZF91aShjb3VudGVySW5jcmVtZW50TVBJLCBj
b3VudGVyTVBJLCAxKTsKKyAgICAgICAgZ2NyeV9tcGlfbW9kKGNvdW50ZXJNUEksIGNvdW50ZXJJ
bmNyZW1lbnRNUEksIGNvdW50ZXJMaW1pdE1QSSk7CisgICAgfQorCisgICAgcmV0dXJuIG91dHB1
dDsKIH0KIAotdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpwbGF0Zm9ybURlY3J5cHQoc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+JiYsIFJlZjxDcnlwdG9LZXk+
JiYsIFZlY3Rvcjx1aW50OF90PiYmLCBWZWN0b3JDYWxsYmFjayYmLCBFeGNlcHRpb25DYWxsYmFj
ayYmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV29ya1F1ZXVlJikKK3ZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NUUjo6cGxhdGZvcm1FbmNyeXB0KHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPiYmIHBhcmFtZXRlcnMsIFJlZjxDcnlwdG9LZXk+JiYga2V5LCBWZWN0
b3I8dWludDhfdD4mJiBwbGFpblRleHQsIFZlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEV4Y2Vw
dGlvbkNhbGxiYWNrJiYgZXhjZXB0aW9uQ2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtw
YXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBwbGFp
blRleHQgPSBXVEZNb3ZlKHBsYWluVGV4dCksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25DYWxsYmFjayksICZjb250ZXh0
XSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byYgYWVzUGFyYW1ldGVycyA9IGRvd25jYXN0
PENyeXB0b0FsZ29yaXRobUFlc0N0clBhcmFtcz4oKnBhcmFtZXRlcnMpOworICAgICAgICAgICAg
YXV0byYgYWVzS2V5ID0gZG93bmNhc3Q8Q3J5cHRvS2V5QUVTPihrZXkuZ2V0KCkpOworCisgICAg
ICAgICAgICBhdXRvIG91dHB1dCA9IGdjcnlwdEFFU19DVFIoZ2NyeV9jaXBoZXJfZW5jcnlwdCwg
YWVzS2V5LmtleSgpLCBhZXNQYXJhbWV0ZXJzLmNvdW50ZXJWZWN0b3IoKSwgYWVzUGFyYW1ldGVy
cy5sZW5ndGgsIHBsYWluVGV4dCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAgICAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBi
ZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxi
YWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdl
IHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRvIHRo
ZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRhc2so
CisgICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRpb25D
YWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworfQorCit2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OnBsYXRmb3JtRGVjcnlwdChzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzLCBSZWY8
Q3J5cHRvS2V5PiYmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiYgY2lwaGVyVGV4dCwgVmVjdG9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgRXhjZXB0aW9uQ2FsbGJhY2smJiBleGNlcHRpb25DYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCit7
CisgICAgY29udGV4dC5yZWYoKTsKKyAgICB3b3JrUXVldWUuZGlzcGF0Y2goCisgICAgICAgIFtw
YXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKSwga2V5ID0gV1RGTW92ZShrZXkpLCBjaXBo
ZXJUZXh0ID0gV1RGTW92ZShjaXBoZXJUZXh0KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNhbGxiYWNrKSwgJmNvbnRl
eHRdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBhdXRvJiBhZXNQYXJhbWV0ZXJzID0gZG93bmNh
c3Q8Q3J5cHRvQWxnb3JpdGhtQWVzQ3RyUGFyYW1zPigqcGFyYW1ldGVycyk7CisgICAgICAgICAg
ICBhdXRvJiBhZXNLZXkgPSBkb3duY2FzdDxDcnlwdG9LZXlBRVM+KGtleS5nZXQoKSk7CisKKyAg
ICAgICAgICAgIGF1dG8gb3V0cHV0ID0gZ2NyeXB0QUVTX0NUUihnY3J5X2NpcGhlcl9kZWNyeXB0
LCBhZXNLZXkua2V5KCksIGFlc1BhcmFtZXRlcnMuY291bnRlclZlY3RvcigpLCBhZXNQYXJhbWV0
ZXJzLmxlbmd0aCwgY2lwaGVyVGV4dCk7CisgICAgICAgICAgICBpZiAoIW91dHB1dCkgeworICAg
ICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRl
ciBiZWluZyBiYWNrIHRvIHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnBvc3RUYXNrKAorICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgZXhjZXB0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGV4Y2VwdGlvbkNh
bGxiYWNrKV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soT3BlcmF0aW9uRXJyb3IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5kZXJlZigpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFdlIHNob3VsZCBvbmx5IGRlcmVmZXJlbmNlIGNhbGxiYWNrcyBhZnRlciBiZWluZyBiYWNrIHRv
IHRoZSBEb2N1bWVudC9Xb3JrZXIgdGhyZWFkcy4KKyAgICAgICAgICAgIGNvbnRleHQucG9zdFRh
c2soCisgICAgICAgICAgICAgICAgW291dHB1dCA9IFdURk1vdmUoKm91dHB1dCksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIGV4Y2VwdGlvbkNhbGxiYWNrID0gV1RGTW92ZShleGNlcHRp
b25DYWxsYmFjayldKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKG91dHB1dCkpOworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmRlcmVmKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjBlM2Y1NzIxZTFlOTQ3
ZmYzNzcwOGE5ZDliNmUwOTk1ZjFlMzkyZS4uOWU1NzhkZDIxZTU2MDNiNTk0MDU0NTE1YWFhMTAw
ZjlhY2I2MmY0YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE3LTA2LTE2ICBaYW4gRG9iZXJz
ZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbR0NyeXB0XSBBRVNfQ1RSIHN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MTQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56YXJvLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6IFVuc2tpcCB0aGUgcmVsZXZhbnQgQUVT
X0NUUiB0ZXN0cy4KKwogMjAxNy0wNi0xNSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dpbl0gVXBkYXRlIGV4cGVjdGF0aW9ucyBmb3IgbGF5b3V0IHRl
c3RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA2MDVi
MDA5ZmU0MzhiZmU0M2MwMWNiNmMzNTFlOTBkOTA1ZmRmYWUzLi5jNzJjMmU1ZjZiYmVmODFkOGQx
MTU1ZTJmMWQzZmE3YThhY2JkODEyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtNzQ4LDIzICs3NDgsNiBAQCB3ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0
by9zdWJ0bGUvYWVzLWNmYi1pbXBvcnQta2V5LXVud3JhcC1yYXcta2V5Lmh0bWwgWyBTa2lwCiB3
ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUvYWVzLWNmYi1pbXBvcnQta2V5LXdyYXAt
andrLWtleS5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUv
YWVzLWNmYi1pbXBvcnQta2V5LXdyYXAtcmF3LWtleS5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3Jn
L2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUvYWVzLWNmYi1pbXBvcnQtcmF3LWtleS5odG1sIFsgU2tp
cCBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUvYWVzLWN0ci1lbmNyeXB0LW1h
bGZvcm1lZC1wYXJhbWV0ZXJzLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5
cHRvL3N1YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWV4cG9ydC1rZXktandrLWxlbmd0aC0xMjguaHRt
bCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vc3VidGxlL2Flcy1jdHItZ2Vu
ZXJhdGUtZXhwb3J0LWtleS1qd2stbGVuZ3RoLTE5Mi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3Jn
L2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUvYWVzLWN0ci1nZW5lcmF0ZS1leHBvcnQta2V5LWp3ay1s
ZW5ndGgtMjU2Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3N1YnRs
ZS9hZXMtY3RyLWdlbmVyYXRlLWV4cG9ydC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5v
cmcvYi8xMzMxMjIgY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWdlbmVyYXRlLWtleS1lbmNyeXB0LWRl
Y3J5cHQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vc3VidGxlL2Fl
cy1jdHItZ2VuZXJhdGUta2V5Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5
cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9ydC1qd2sta2V5LWxlbmd0aC0xMjguaHRtbCBbIFNraXAg
XQotd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWp3ay1r
ZXktbGVuZ3RoLTE5Mi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9z
dWJ0bGUvYWVzLWN0ci1pbXBvcnQtandrLWtleS1sZW5ndGgtMjU2Lmh0bWwgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9ydC1rZXktZGVjcnlw
dC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUvYWVzLWN0
ci1pbXBvcnQta2V5LWVuY3J5cHQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBj
cnlwdG8vc3VidGxlL2Flcy1jdHItaW1wb3J0LWtleS11bndyYXAtandrLWtleS5odG1sIFsgU2tp
cCBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5
LXVud3JhcC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRv
L3N1YnRsZS9hZXMtY3RyLWltcG9ydC1rZXktd3JhcC1qd2sta2V5Lmh0bWwgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3N1YnRsZS9hZXMtY3RyLWltcG9ydC1rZXktd3JhcC1y
YXcta2V5Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3N1YnRsZS9h
ZXMtY3RyLWltcG9ydC1yYXcta2V5Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8xMzMxMjIg
Y3J5cHRvL3N1YnRsZS9lY2RoLWRlcml2ZS1iaXRzLW1hbGZvcm1lZC1wYXJhbWV0cnMuaHRtbCBb
IFNraXAgXQogd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vc3VidGxlL2VjZGgtZ2VuZXJhdGUt
ZXhwb3J0LWtleS1wa2NzOC1wMjU2Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8xMzMxMjIg
Y3J5cHRvL3N1YnRsZS9lY2RoLWdlbmVyYXRlLWV4cG9ydC1rZXktcGtjczgtcDM4NC5odG1sIFsg
U2tpcCBdCkBAIC04MjMsMTAgKzgwNiw2IEBAIHdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3dv
cmtlcnMvc3VidGxlL2Flcy1jZmItaW1wb3J0LWtleS1kZWNyeXB0Lmh0bWwgWyBTa2lwCiB3ZWJr
aXQub3JnL2IvMTMzMTIyIGNyeXB0by93b3JrZXJzL3N1YnRsZS9hZXMtY2ZiLWltcG9ydC1rZXkt
ZW5jcnlwdC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by93b3JrZXJz
L3N1YnRsZS9hZXMtY2ZiLWltcG9ydC1rZXktdW53cmFwLWtleS5odG1sIFsgU2tpcCBdCiB3ZWJr
aXQub3JnL2IvMTMzMTIyIGNyeXB0by93b3JrZXJzL3N1YnRsZS9hZXMtY2ZiLWltcG9ydC1rZXkt
d3JhcC1rZXkuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vd29ya2Vy
cy9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5LWRlY3J5cHQuaHRtbCBbIFNraXAgXQotd2Via2l0
Lm9yZy9iLzEzMzEyMiBjcnlwdG8vd29ya2Vycy9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5LWVu
Y3J5cHQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzEzMzEyMiBjcnlwdG8vd29ya2Vycy9z
dWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5LXVud3JhcC1rZXkuaHRtbCBbIFNraXAgXQotd2Via2l0
Lm9yZy9iLzEzMzEyMiBjcnlwdG8vd29ya2Vycy9zdWJ0bGUvYWVzLWN0ci1pbXBvcnQta2V5LXdy
YXAta2V5Lmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8xMzMxMjIgY3J5cHRvL3dvcmtlcnMv
c3VidGxlL2Flcy1wb3N0TWVzc2FnZS13b3JrZXIuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9i
LzEzMzEyMiBjcnlwdG8vd29ya2Vycy9zdWJ0bGUvZWMtZ2VuZXJhdGUtZXhwb3J0LXBrY3M4LWtl
eS5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTMzMTIyIGNyeXB0by93b3JrZXJzL3N1YnRs
ZS9lYy1nZW5lcmF0ZS1leHBvcnQtc3BraS1rZXkuaHRtbCBbIFNraXAgXQpAQCAtODYyLDkgKzg0
MSw3IEBAIHdlYmtpdC5vcmcvYi8xMzMzMjAgY3J5cHRvL3dlYmtpdFN1YnRsZS9obWFjLXNpZ24t
dmVyaWZ5Lmh0bWwgWyBQYXNzIF0KICMgVGhlc2UgYXJlIHRoZSBpbXBvcnRlZCB3ZWItcGxhdGZv
cm0tdGVzdHMgY292ZXJpbmcgY3J5cHRvIHNlY3Rpb25zIHdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQg
eWV0LgogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJDcnlwdG9BUEkvIFsgU2xv
dyBdCiB3ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC9hZXNfY2JjLndvcmtlci5odG1sIFsgRmFpbHVy
ZSBdCi13ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC9hZXNfY3RyLndvcmtlci5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvMTMzMTIyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC9yc2Eud29ya2VyLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8xNzI1OTQgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9XZWJD
cnlwdG9BUEkvZW5jcnlwdF9kZWNyeXB0L3Rlc3RfYWVzX2N0ci5odHRwcy5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvMTcyNTk0IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
V2ViQ3J5cHRvQVBJL2VuY3J5cHRfZGVjcnlwdC90ZXN0X2Flc19jYmMuaHR0cHMuaHRtbCBbIEZh
aWx1cmUgXQogd2Via2l0Lm9yZy9iLzE3MjU5NCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1dlYkNyeXB0b0FQSS9lbmNyeXB0X2RlY3J5cHQvdGVzdF9yc2Ffb2FlcC5odHRwcy5odG1s
IFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTY5MjcyIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvV2ViQ3J5cHRvQVBJL2ltcG9ydF9leHBvcnQvZWNfaW1wb3J0S2V5Lndvcmtlci5o
dG1sIFsgRmFpbHVyZSBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>