<?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>150468</bug_id>
          
          <creation_ts>2015-10-22 13:32:57 -0700</creation_ts>
          <short_desc>Modern IDB: Support IDBObjectStore.put/get support</short_desc>
          <delta_ts>2015-10-27 14:03:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>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>
          <dependson>150543</dependson>
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1135802</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-22 13:32:57 -0700</bug_when>
    <thetext>Modern IDB: Support IDBObjectStore.put support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135806</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-22 13:38:45 -0700</bug_when>
    <thetext>As part of this, fix the test skipped in https://trac.webkit.org/changeset/191470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136851</commentid>
    <comment_count>2</comment_count>
      <attachid>264141</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 10:54:45 -0700</bug_when>
    <thetext>Created attachment 264141
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136853</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 10:55:28 -0700</bug_when>
    <thetext>Add&apos;s basic support. There&apos;s lots of little edge cases that cannot be tested without other patches, and will be added/tested in upcoming work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136855</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 10:57:10 -0700</bug_when>
    <thetext>Attachment 264141 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 57 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>1136857</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 11:06:50 -0700</bug_when>
    <thetext>GCC strikes again:
../../Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:358:1: error: control reaches end of non-void function [-Werror=return-type]

Except... no, because the switch block handles all cases. *sigh*

Will workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136858</commentid>
    <comment_count>6</comment_count>
      <attachid>264143</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 11:07:21 -0700</bug_when>
    <thetext>Created attachment 264143
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136860</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 11:09:27 -0700</bug_when>
    <thetext>Attachment 264143 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 57 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>1136863</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 11:21:21 -0700</bug_when>
    <thetext>Forgot one piece that needs to be in here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136866</commentid>
    <comment_count>9</comment_count>
      <attachid>264145</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 11:33:43 -0700</bug_when>
    <thetext>Created attachment 264145
Patch v3

NM, the thing I wanted to add was going to expand the scope of the patch way too much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136867</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 11:35:03 -0700</bug_when>
    <thetext>Attachment 264145 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 57 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>1136875</commentid>
    <comment_count>11</comment_count>
      <attachid>264143</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-27 11:52:56 -0700</bug_when>
    <thetext>Comment on attachment 264143
Patch v2

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

&gt; LayoutTests/storage/indexeddb/modern/basic-put.html:48
&gt; +    tx.onabort = function(event) {

Can the putRequest or getRequest be aborted?  Please add tests where things go wrong.

&gt; LayoutTests/storage/indexeddb/modern/keypath-basic.html:49
&gt; +    request3.onsuccess = function(event) {
&gt; +        alert(&quot;Second object put SUCCESS - &quot; + request3.result);
&gt; +    }

Is the order of these callbacks guaranteed, or will we have another flaky test when the callbacks happen in a different order.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:343
&gt; +        return true;

Don&apos;t you need to compare m_type and other.m_type?

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:358
&gt; +    RELEASE_ASSERT_NOT_REACHED();

This can&apos;t be reached.  Did you mean to put a default before this?

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:106
&gt; +        hashCodes.append(m_isNull ? 1 : 0);
&gt; +        hashCodes.append(m_isDeletedValue ? 1 : 0);

Wouldn&apos;t it be better to add some large prime numbers instead of 1 or 0?

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:107
&gt; +        switch (m_type) {

Why not add m_type to the hash function? That might be related to Invalid, Max, and Min always being equal, which seems strange, but might be correct.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:121
&gt; +            for (auto&amp; key : m_arrayValue)
&gt; +                hashCodes.append(key.hash());

This is an unnecessary copy.  Just hash in place.

&gt; Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.cpp:156
&gt; +    return adoptRef(request.leakRef());

I think we need to make a better way to make a RefPtr from a Ref.  We&apos;re putting more and more of these in.

&gt; Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp:342
&gt; +    request-&gt;setResultToStructuredClone(resultData.resultData());

Early return, ASSERT(request), or make it a Ref&lt;IDBRequest&gt;

&gt; Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp:375
&gt; +    request-&gt;setResult(resultData.resultKey());

ditto.

&gt; Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:101
&gt; +        m_completeFunction = [self, this, request, completeMethod](const IDBResultData&amp; resultData) {

Stylebot wants the { on the next line. Strange that it didn&apos;t complain about the lambda with no arguments just before this.

&gt; Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:84
&gt; +    {

Why scope?

&gt; Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp:179
&gt; +        return IDBError(IDBExceptionCode::Unknown, WTF::ASCIILiteral(&quot;No backing store object store found to put record&quot;));

There are a lot of error cases here that are untested.

&gt; Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp:86
&gt; +    m_keyValueStore-&gt;remove(key);

What happens when we try to delete a record that is not there?  Should there be an assert that it contains the key? (I&apos;m guessing the answer is no, everything is ok.)

&gt; Source/WebCore/platform/ThreadSafeDataBuffer.h:42
&gt; +        m_data.swap(data);

Is the swap operation thread safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136885</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 12:12:49 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 264143 [details]
&gt; Patch v2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264143&amp;action=review
&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/modern/basic-put.html:48
&gt; &gt; +    tx.onabort = function(event) {
&gt; 
&gt; Can the putRequest or getRequest be aborted?  Please add tests where things
&gt; go wrong.

Requests cannot be aborted directly. And so far in this implementation not even indirectly.

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/modern/keypath-basic.html:49
&gt; &gt; +    request3.onsuccess = function(event) {
&gt; &gt; +        alert(&quot;Second object put SUCCESS - &quot; + request3.result);
&gt; &gt; +    }
&gt; 
&gt; Is the order of these callbacks guaranteed, or will we have another flaky
&gt; test when the callbacks happen in a different order.

The order is guaranteed.

The flaky test was not because of an order-of-callbacks issue, but because there *wasn&apos;t* an explicit callback for what we were trying to test.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:343
&gt; &gt; +        return true;
&gt; 
&gt; Don&apos;t you need to compare m_type and other.m_type?

Yes. Which is why we do:

bool IDBKeyData::operator==(const IDBKeyData&amp; other) const
{
    if (m_type != other.m_type || m_isNull != other.m_isNull || m_isDeletedValue != other.m_isDeletedValue)
        return false;
...

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:358
&gt; &gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt; 
&gt; This can&apos;t be reached.  Did you mean to put a default before this?

I agree that this cannot be reached.

However the EFL compiler does *not* agree:
https://webkit-queues.webkit.org/results/345012

So... yet another workaround for that breakage.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:106
&gt; &gt; +        hashCodes.append(m_isNull ? 1 : 0);
&gt; &gt; +        hashCodes.append(m_isDeletedValue ? 1 : 0);
&gt; 
&gt; Wouldn&apos;t it be better to add some large prime numbers instead of 1 or 0?

No.

If you have data on why it would be, we should revisit all custom hashing project-wide.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:107
&gt; &gt; +        switch (m_type) {
&gt; 
&gt; Why not add m_type to the hash function? That might be related to Invalid,
&gt; Max, and Min always being equal, which seems strange, but might be correct.

Min/Max/Invalid are not equal, so that&apos;s why we *do* hash m_type 3 lines above this:
    unsigned hash() const
    {
        Vector&lt;unsigned&gt; hashCodes;
        hashCodes.append(static_cast&lt;unsigned&gt;(m_type));
...

Or, did you mean something else...?

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:121
&gt; &gt; +            for (auto&amp; key : m_arrayValue)
&gt; &gt; +                hashCodes.append(key.hash());
&gt; 
&gt; This is an unnecessary copy.  Just hash in place.

I&apos;m confused by your comment. The hash of &quot;an array of objects&quot; depends on the hash of each individual object in the array. I don&apos;t see what I&apos;m copying here - I&apos;m just getting the hash from the subobjects.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.cpp:156
&gt; &gt; +    return adoptRef(request.leakRef());
&gt; 
&gt; I think we need to make a better way to make a RefPtr from a Ref.  We&apos;re
&gt; putting more and more of these in.

I agree. I hate doing this. Outside the scope of this patch.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp:342
&gt; &gt; +    request-&gt;setResultToStructuredClone(resultData.resultData());
&gt; 
&gt; Early return, ASSERT(request), or make it a Ref&lt;IDBRequest&gt;

Will do.

&gt; &gt; Source/WebCore/Modules/indexeddb/client/IDBTransactionImpl.cpp:375
&gt; &gt; +    request-&gt;setResult(resultData.resultKey());
&gt; 
&gt; ditto.
 
Will do.

&gt; &gt; Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:101
&gt; &gt; +        m_completeFunction = [self, this, request, completeMethod](const IDBResultData&amp; resultData) {
&gt; 
&gt; Stylebot wants the { on the next line. Strange that it didn&apos;t complain about
&gt; the lambda with no arguments just before this.

Stylebot is wrong, this is established style for lambdas. I&apos;ve filed the bugzilla (a long time ago).
&gt;
 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:84
&gt; &gt; +    {
&gt; 
&gt; Why scope?

That&apos;s a great question - historical vestige, used to be a locker-type object in there, forgot to remove it.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.cpp:179
&gt; &gt; +        return IDBError(IDBExceptionCode::Unknown, WTF::ASCIILiteral(&quot;No backing store object store found to put record&quot;));
&gt; 
&gt; There are a lot of error cases here that are untested.

Yup. Some I don&apos;t know how they can go wrong ever, and others I cannot make go wrong *yet*.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp:86
&gt; &gt; +    m_keyValueStore-&gt;remove(key);
&gt; 
&gt; What happens when we try to delete a record that is not there?  Should there
&gt; be an assert that it contains the key? (I&apos;m guessing the answer is no,
&gt; everything is ok.)

No, everything is ok.

&gt; 
&gt; &gt; Source/WebCore/platform/ThreadSafeDataBuffer.h:42
&gt; &gt; +        m_data.swap(data);
&gt; 
&gt; Is the swap operation thread safe?

The swap operation only takes place on the initial construction of the ThreadSafeDataBufferImpl, which by definition is on a single thread before the wrapper can have been passed to a background thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136903</commentid>
    <comment_count>13</comment_count>
      <attachid>264143</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-27 13:14:57 -0700</bug_when>
    <thetext>Comment on attachment 264143
Patch v2

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

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:358
&gt;&gt;&gt; +    RELEASE_ASSERT_NOT_REACHED();
&gt;&gt; 
&gt;&gt; This can&apos;t be reached.  Did you mean to put a default before this?
&gt; 
&gt; I agree that this cannot be reached.
&gt; 
&gt; However the EFL compiler does *not* agree:
&gt; https://webkit-queues.webkit.org/results/345012
&gt; 
&gt; So... yet another workaround for that breakage.

:(
I guess it could be reached if we somehow had a KeyType out of range, which will never happen.  This is good.

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:107
&gt;&gt;&gt; +        switch (m_type) {
&gt;&gt; 
&gt;&gt; Why not add m_type to the hash function? That might be related to Invalid, Max, and Min always being equal, which seems strange, but might be correct.
&gt; 
&gt; Min/Max/Invalid are not equal, so that&apos;s why we *do* hash m_type 3 lines above this:
&gt;     unsigned hash() const
&gt;     {
&gt;         Vector&lt;unsigned&gt; hashCodes;
&gt;         hashCodes.append(static_cast&lt;unsigned&gt;(m_type));
&gt; ...
&gt; 
&gt; Or, did you mean something else...?

Oh, I must have overlooked that.  Same with the check in the operator ==.

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:121
&gt;&gt;&gt; +                hashCodes.append(key.hash());
&gt;&gt; 
&gt;&gt; This is an unnecessary copy.  Just hash in place.
&gt; 
&gt; I&apos;m confused by your comment. The hash of &quot;an array of objects&quot; depends on the hash of each individual object in the array. I don&apos;t see what I&apos;m copying here - I&apos;m just getting the hash from the subobjects.

I looked at this wrong.  I thought we were copying the keys into the array, but we are indeed only appending the hash codes.  This is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136904</commentid>
    <comment_count>14</comment_count>
      <attachid>264145</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-27 13:16:00 -0700</bug_when>
    <thetext>Comment on attachment 264145
Patch v3

All right, r=me once you remove the unneeded scope and add the asserts or early returns where noted earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136909</commentid>
    <comment_count>15</comment_count>
      <attachid>264155</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 13:38:11 -0700</bug_when>
    <thetext>Created attachment 264155
Patch v4 - Handled review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136910</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 13:38:43 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 264145 [details]
&gt; Patch v3
&gt; 
&gt; All right, r=me once you remove the unneeded scope and add the asserts or
&gt; early returns where noted earlier.

Oh okay! thx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136911</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 13:40:06 -0700</bug_when>
    <thetext>Attachment 264155 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/client/TransactionOperation.h:102:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 57 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>1136925</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-10-27 14:03:07 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/191635</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264141</attachid>
            <date>2015-10-27 10:54:45 -0700</date>
            <delta_ts>2015-10-27 11:07:21 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>130672</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2MDQ5Y2YzLi5lZWFmZTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAt
MjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rl
c3RFeHBlY3RhdGlvbnM6IFJlLWVuYWJsZSBhIHRlc3QgdGhhdCBjYW4gbm93IGJlIG1hZGUgcmVs
aWFibGUuCisgICAgICAgIAorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9iYXNp
Yy1wdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vYmFzaWMtcHV0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWw6Cisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1i
YXNpYy5odG1sOiBBZGRlZC4KKwogMjAxNS0xMC0yNyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIg
IDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gQWRkIGNsb3Nl
IG1ldGhvZCB0byB3cml0YWJsZSBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azEvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1YWI3NTlkLi4zOGVlYjg3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC03Myw5ICs3Myw2IEBA
IGluc3BlY3Rvci9pbmRleGVkZGIKICMgQnV0IE1vZGVybiBJbmRleGVkREIgaXMuCiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4gWyBQYXNzIF0KIAotIyBGbGFrZXksIHNraXBwZWQgdW50aWwgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ2OCBsZXRzIHVzIGltcGxl
bWVudCBhIHByb3BlciBmaXgKLXN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3Rz
dG9yZS1iYXNpYy5odG1sCi0KICMgRmFpbHMgd2l0aCBXZWJLaXQxIG9ubHkuCiBlZGl0aW5nL3Nl
Y3VyZS1pbnB1dC9yZXNldC1zdGF0ZS1vbi1uYXZpZ2F0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFz
aWMtcHV0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZTRhMzNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL2Jhc2ljLXB1dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitBTEVSVDogVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBbb2Jq
ZWN0IElEQlRyYW5zYWN0aW9uXSAtIHZlcnNpb25jaGFuZ2UKK0FMRVJUOiBbb2JqZWN0IElEQkRh
dGFiYXNlXQorQUxFUlQ6IHB1dCBzdWNjZWVkZWQgLSBrZXkgd2FzICdmb28nCitBTEVSVDogZ2V0
IHN1Y2NlZWRlZCAtIHZhbHVlIHdhcyAnYmFyJworQUxFUlQ6IHZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uIGNvbXBsZXRlZAorQUxFUlQ6IERvbmUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJjNTcwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFzaWMtcHV0Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAor
PHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9CisKK3ZhciByZXF1
ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJOZXdEYXRhYmFzZVB1dFRlc3REYXRhYmFzZSIp
OworCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBhbGVydCgiRG9uZSIpOworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3Jl
cXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBhbGVydCgiVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2
ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOworICAgIAorICAgIHZhciB0eCA9IHJlcXVl
c3QudHJhbnNhY3Rpb247CisgICAgdmFyIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKworICAg
IGFsZXJ0KHR4ICsgIiAtICIgKyB0eC5tb2RlKTsKKyAgICBhbGVydChkYik7CisKKyAgICB2YXIg
b3MgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgdmFyIHB1
dFJlcXVlc3QgPSBvcy5wdXQoImJhciIsICJmb28iKTsKKyAgICAKKyAgICBwdXRSZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgc3VjY2VlZGVk
IC0ga2V5IHdhcyAnIiArIHB1dFJlcXVlc3QucmVzdWx0ICsgIiciKTsKKyAgICAgICAgCisgICAg
ICAgIHZhciBnZXRSZXF1ZXN0ID0gb3MuZ2V0KCJmb28iKTsKKyAgICAgICAgZ2V0UmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgYWxlcnQoImdldCBzdWNj
ZWVkZWQgLSB2YWx1ZSB3YXMgJyIgKyBnZXRSZXF1ZXN0LnJlc3VsdCArICInIik7CisgICAgICAg
IH0KKworICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICAgICAgYWxlcnQoImdldCB1bmV4cGVjdGVkbHkgZmFpbGVkIC0gIiArIGV2ZW50KTsKKyAg
ICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1dFJlcXVlc3Qub25l
cnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgdW5leHBlY3RlZGx5
IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisgICAgCisgICAg
dHgub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJ2ZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0Iik7CisgICAgICAgIGRvbmUoKTsKKyAg
ICB9CisKKyAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxl
cnQoInZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlZCIpOworICAgICAgICBkb25l
KCk7CisgICAgfQorCisgICAgdHgub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IGFsZXJ0KCJ2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIC0gIiAr
IGV2ZW50KTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3Rv
cmUtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLWV4cGVjdGVkLnR4dAppbmRleCAxOGVkZDhhLi4z
OWNmZDA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Y3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50
eHQKQEAgLTEsNiArMSw3IEBACiBBTEVSVDogSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZl
cnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQogQUxFUlQ6IE9iamVjdCBzdG9yZSBuYW1lczoKIEFM
RVJUOiBGaXJzdEFib3J0ZWRPYmplY3RTdG9yZQorQUxFUlQ6IFB1dCBzdWNjZWVkZWQKIEFMRVJU
OiBJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBhYm9ydGVkCiBBTEVS
VDogT2JqZWN0IHN0b3JlIG5hbWVzOgogQUxFUlQ6IFNlY29uZCB1cGdyYWRlIG5lZWRlZDogT2xk
IHZlcnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMu
aHRtbAppbmRleCAzOGRmNjkzLi4yMTA0Zjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFz
aWMuaHRtbApAQCAtMzAsMTMgKzMwLDE4IEBAIGNyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRl
UmVxdWVzdC50cmFuc2FjdGlvbjsKICAgICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVz
dWx0OwogICAgIHZhciBvYmplY3RTdG9yZSA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKCJG
aXJzdEFib3J0ZWRPYmplY3RTdG9yZSIpOworICAgIHZhciByZXF1ZXN0ID0gb2JqZWN0U3RvcmUu
cHV0KCJmb28iLCAiYmFyIik7CiAKLSAgICB2YXIgZiA9IGZ1bmN0aW9uKCkgeworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlB1dCBzdWNj
ZWVkZWQiKTsKICAgICAgICAgdmVyc2lvblRyYW5zYWN0aW9uLmFib3J0KCk7Ci0gICAgfTsKLQor
ICAgIH0KKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBh
bGVydCgiUHV0IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cisg
ICAgCiAgICAgZHVtcE9iamVjdFN0b3JlcyhkYXRhYmFzZSk7ICAgIAotICAgIHNldFRpbWVvdXQo
ZiwgMCk7CiAgICAgCiAgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihl
dmVudCkgewogICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJh
bnNhY3Rpb24gYWJvcnRlZCIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmMxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1iYXNpYy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQUxFUlQ6IEluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9s
ZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBvYmplY3QgcHV0IFNVQ0NFU1Mg
LSBmb28xCitBTEVSVDogYXJyYXkgcHV0IFNVQ0NFU1MgLSBmb28yCitBTEVSVDogU2Vjb25kIG9i
amVjdCBwdXQgU1VDQ0VTUyAtIGJhejEKK0FMRVJUOiBTZWNvbmQgYXJyYXkgcHV0IFNVQ0NFU1Mg
LSBiYXoyCitBTEVSVDogSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
Y29tcGxldGUKK0FMRVJUOiBEb25lCitUaGlzIHRlc3QgY3JlYXRlcyBzb21lIG9iamVjdCBzdG9y
ZXMgd2l0aCBrZXlwYXRocy4KK0l0IHRoZW4gcHV0cyBzb21lIHZhbHVlcyBpbiB0aGVtLgorSXQg
bWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2ljLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYWViMAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2lj
Lmh0bWwKQEAgLTAsMCArMSw3NCBAQAorVGhpcyB0ZXN0IGNyZWF0ZXMgc29tZSBvYmplY3Qgc3Rv
cmVzIHdpdGgga2V5cGF0aHMuPGJyPgorSXQgdGhlbiBwdXRzIHNvbWUgdmFsdWVzIGluIHRoZW0u
PGJyPgorSXQgbWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC48YnI+Cis8
c2NyaXB0PgorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30KKworZnVuY3Rpb24g
ZG9uZSgpCit7CisgICAgYWxlcnQoIkRvbmUiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCit2YXIgY3JlYXRlUmVxdWVz
dCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiS2V5cGF0aEJhc2ljVGVzdERhdGFiYXNlIiwgMSk7
CisKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQu
b2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAg
ICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAg
ICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OyAgICAKKyAgICB2YXIgb2JqZWN0
U3RvcmUxID0gZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIk9TMSIsIHsga2V5UGF0aDogImZv
byIgfSk7CisgICAgdmFyIG9iamVjdFN0b3JlMiA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3Jl
KCJPUzIiLCB7IGtleVBhdGg6ICJmb28uYmFyIiB9KTsKKworICAgIHZhciBvYmplY3QgPSBuZXcg
T2JqZWN0OworICAgIG9iamVjdC5zdHVmZiA9ICJiYXIxIjsKKyAgICBvYmplY3QuZm9vID0gImZv
bzEiOworICAgICAgICAKKyAgICB2YXIgcmVxdWVzdDEgPSBvYmplY3RTdG9yZTEucHV0KG9iamVj
dCk7CisgICAgcmVxdWVzdDEub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
YWxlcnQoIm9iamVjdCBwdXQgU1VDQ0VTUyAtICIgKyByZXF1ZXN0MS5yZXN1bHQpOworICAgIH0K
KworICAgIHZhciBhcnJheSA9IHsgZm9vOiAiZm9vMiIsIHN0dWZmOiAiYmFyMiIgfTsKKworICAg
IHZhciByZXF1ZXN0MiA9IG9iamVjdFN0b3JlMS5wdXQoYXJyYXkpOworICAgIHJlcXVlc3QyLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJhcnJheSBwdXQgU1VD
Q0VTUyAtICIgKyByZXF1ZXN0Mi5yZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QuZm9v
ID0gbmV3IE9iamVjdDsKKyAgICBvYmplY3QuZm9vLmJhciA9ICJiYXoxIjsKKyAgICB2YXIgcmVx
dWVzdDMgPSBvYmplY3RTdG9yZTIucHV0KG9iamVjdCk7CisgICAgcmVxdWVzdDMub25zdWNjZXNz
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlNlY29uZCBvYmplY3QgcHV0IFNV
Q0NFU1MgLSAiICsgcmVxdWVzdDMucmVzdWx0KTsKKyAgICB9CisKKyAgICBhcnJheS5mb28gPSB7
IGJhcjogImJhejIiIH07CisKKyAgICB2YXIgcmVxdWVzdDQgPSBvYmplY3RTdG9yZTIucHV0KGFy
cmF5KTsKKyAgICByZXF1ZXN0NC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICBhbGVydCgiU2Vjb25kIGFycmF5IHB1dCBTVUNDRVNTIC0gIiArIHJlcXVlc3Q0LnJlc3VsdCk7
CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNh
Y3Rpb24gdW5leHBlY3RlZCBhYm9ydGVkIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAg
ICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgIGFsZXJ0KCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21w
bGV0ZSIpOworICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9u
Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdy
YWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7
CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGM4Mzg3ZC4uODFmZWE1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTg3Niw2ICs4NzYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAogICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwCisgICAgTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcAogCiAgICAgTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGNmMGUwNzMuLmVmMjE2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMDQgQEAKKzIwMTUt
MTAtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVy
biBJREI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9iYXNpYy1wdXQuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlEYXRhOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Om9wZXJhdG9yPT0p
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGE6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpoYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGFIYXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRyYWl0czo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGFIYXNo
VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRy
YWl0czo6aXNFbXB0eVZhbHVlKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0luZGV4
ZWREQi5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJBbnk6OklEQkFueSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6bW9kZXJuSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6Y3JlYXRlKToKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
OjpkaWRDcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpnZXRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6
c2F2ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Ub1NlcnZlcjo6Y29tcGxldGVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6YXV0b0luY3JlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6Z2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjppbmZvKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJlcXVl
c3QpOiBEZWxldGVkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJl
cXVlc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6SURCUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnNvdXJjZU9i
amVjdFN0b3JlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50
OjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJ
REJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJSZXF1ZXN0OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkNsaWVudDo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6Y29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmRpZEFi
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmNyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGll
bnQ6OklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpk
aWRQdXRPckFkZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmRlYWN0aXZhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJUcmFuc2FjdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
VHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpU
cmFuc2FjdGlvbkFjdGl2YXRvcjo6VHJhbnNhY3Rpb25BY3RpdmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbkFjdGl2YXRvcjo6flRyYW5zYWN0aW9uQWN0aXZh
dG9yKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9w
ZXJhdGlvbi5jcHA6IAorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbjo6VHJhbnNhY3Rpb25PcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVy
YXRpb24pOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
Q29ubmVjdGlvblRvQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
Q29ubmVjdGlvblRvQ2xpZW50OjpkaWRQdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkR2V0UmVjb3JkKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRl
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwdXRPckFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bjo6cmVjb3JkVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpjb250YWluc1Jl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpk
ZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RT
dG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2Jq
ZWN0U3RvcmU6OnZhbHVlRm9yS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1WYWx1ZURh
dGFDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OmdldFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VJbmZvOjppbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oOgorCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlkYkVycm9y
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppZGJFcnJvckRlc2NyaXB0aW9uKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaDoKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdERhdGE6OnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3REYXRhOjpvYmplY3RTdG9yZUlkZW50aWZpZXIpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVzdWx0RGF0YTo6SURCUmVzdWx0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXN1bHREYXRhOjpwdXRPckFkZFN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0
RGF0YTo6Z2V0UmVjb3JkU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlJlc3VsdERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6OnJl
c3VsdEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXN1bHREYXRhOjpyZXN1bHREYXRhKToK
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpkaWRQdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZEdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlk
YktleVRvSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXliZUNyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKworICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFk
Q29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyPjo6Y29w
eSk6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKworICAgICAgICAq
IHBsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpjb3B5VmVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGF0YSk6CisKIDIwMTUt
MTAtMjcgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbU3RyZWFtcyBBUEldIEFkZCBjbG9zZSBtZXRob2QgdG8gd3JpdGFibGUgc3RyZWFt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCmlu
ZGV4IDkyYzMwMWYuLmU3NGI4MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleURhdGEuY3BwCkBAIC0zMTksNiArMzE5LDQ0IEBAIHZvaWQgSURCS2V5RGF0
YTo6c2V0TnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlKQogICAgIG1faXNOdWxsID0gZmFsc2U7CiB9
CiAKK0lEQktleURhdGEgSURCS2V5RGF0YTo6ZGVsZXRlZFZhbHVlKCkKK3sKKyAgICBJREJLZXlE
YXRhIHJlc3VsdDsKKyAgICByZXN1bHQubV9pc051bGwgPSBmYWxzZTsKKyAgICByZXN1bHQubV9p
c0RlbGV0ZWRWYWx1ZSA9IHRydWU7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOworfQor
Citib29sIElEQktleURhdGE6Om9wZXJhdG9yPChjb25zdCBJREJLZXlEYXRhJiByaHMpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbXBhcmUocmhzKSA8IDA7Cit9CisKK2Jvb2wgSURCS2V5RGF0YTo6
b3BlcmF0b3I9PShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV90
eXBlICE9IG90aGVyLm1fdHlwZSB8fCBtX2lzTnVsbCAhPSBvdGhlci5tX2lzTnVsbCB8fCBtX2lz
RGVsZXRlZFZhbHVlICE9IG90aGVyLm1faXNEZWxldGVkVmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoK
KyAgICBjYXNlIEtleVR5cGU6Ok1heDoKKyAgICBjYXNlIEtleVR5cGU6Ok1pbjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CisgICAgY2FzZSBLZXlUeXBl
OjpEYXRlOgorICAgICAgICByZXR1cm4gbV9udW1iZXJWYWx1ZSA9PSBvdGhlci5tX251bWJlclZh
bHVlOworICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmdW
YWx1ZSA9PSBvdGhlci5tX3N0cmluZ1ZhbHVlOworICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Cisg
ICAgICAgIGlmIChtX2FycmF5VmFsdWUuc2l6ZSgpICE9IG90aGVyLm1fYXJyYXlWYWx1ZS5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcnJheVZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9hcnJh
eVZhbHVlWzBdICE9IG90aGVyLm1fYXJyYXlWYWx1ZVswXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCA5MTU2M2IyLi5iNmFhMGM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJJ
REJLZXkuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtODcsMTQgKzg4LDg3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX2lzTnVsbDsgfQorICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBLZXlUeXBlOjpJbnZhbGlkOyB9CiAgICAgS2V5VHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPChj
b25zdCBJREJLZXlEYXRhJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElEQktl
eURhdGEmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSURCS2V5RGF0
YSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0
b3I8dW5zaWduZWQ+IGhhc2hDb2RlczsKKyAgICAgICAgaGFzaENvZGVzLmFwcGVuZChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV90eXBlKSk7CisgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQobV9pc051
bGwgPyAxIDogMCk7CisgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQobV9pc0RlbGV0ZWRWYWx1ZSA/
IDEgOiAwKTsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2FzZSBLZXlUeXBl
OjpJbnZhbGlkOgorICAgICAgICBjYXNlIEtleVR5cGU6Ok1heDoKKyAgICAgICAgY2FzZSBLZXlU
eXBlOjpNaW46CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpOdW1i
ZXI6CisgICAgICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKKyAgICAgICAgICAgIGhhc2hDb2Rlcy5h
cHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmbV9udW1iZXJW
YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5n
OgorICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpoYXNoKG1fc3RyaW5n
VmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OkFycmF5
OgorICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBtX2FycmF5VmFsdWUpCisgICAgICAgICAg
ICAgICAgaGFzaENvZGVzLmFwcGVuZChrZXkuaGFzaCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdGFyZ2V0U2l6ZSA9IFdURjo6cm91bmRVcFRv
UG93ZXJPZlR3byhoYXNoQ29kZXMuc2l6ZSgpKTsKKyAgICAgICAgaGFzaENvZGVzLnJlc2l6ZSh0
YXJnZXRTaXplKTsKKworICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhh
c2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSURCS2V5RGF0YSBkZWxldGVkVmFsdWUoKTsKKyAgICBib29sIGlz
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RlbGV0ZWRWYWx1ZTsgfQorCiBwcml2
YXRlOgogICAgIEtleVR5cGUgbV90eXBlOwogICAgIFZlY3RvcjxJREJLZXlEYXRhPiBtX2FycmF5
VmFsdWU7CiAgICAgU3RyaW5nIG1fc3RyaW5nVmFsdWU7CiAgICAgZG91YmxlIG1fbnVtYmVyVmFs
dWUgeyAwIH07CiAgICAgYm9vbCBtX2lzTnVsbCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzRGVs
ZXRlZFZhbHVlIHsgZmFsc2UgfTsKK307CisKK3N0cnVjdCBJREJLZXlEYXRhSGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkgeyByZXR1cm4gYS5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJLZXlEYXRhJiBhLCBjb25zdCBJ
REJLZXlEYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKworc3RydWN0IElEQktl
eURhdGFIYXNoVHJhaXRzIDogcHVibGljIFdURjo6Q3VzdG9tSGFzaFRyYWl0czxJREJLZXlEYXRh
PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKworICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShJREJLZXlEYXRhJiBrZXkpCisgICAg
eworICAgICAgICBrZXkgPSBJREJLZXlEYXRhOjpkZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBJREJLZXlEYXRhJiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4ga2V5LmlzRGVsZXRlZFZhbHVlKCk7CisgICAgfQorCisgICAgc3Rh
dGljIElEQktleURhdGEgZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gSURCS2V5
RGF0YSgpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBJREJL
ZXlEYXRhJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4ga2V5LmlzTnVsbCgpOworICAgIH0K
IH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0luZGV4ZWREQi5oCmluZGV4IDU1OGJiYTcuLjhmZWY1MjI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JbmRleGVkREIuaApAQCAtNDEsNyArNDEsOCBA
QCBjb25zdCB1bnNpZ25lZCBUcmFuc2FjdGlvbk1vZGVNYXhpbXVtID0gMjsKIAogZW51bSBjbGFz
cyBUcmFuc2FjdGlvblN0YXRlIHsKICAgICBVbnN0YXJ0ZWQsCi0gICAgUnVubmluZywKKyAgICBB
Y3RpdmUsCisgICAgSW5hY3RpdmUsCiAgICAgQ29tbWl0dGluZywKICAgICBBYm9ydGluZywKICAg
ICBGaW5pc2hlZCwKQEAgLTcxLDcgKzcyLDEyIEBAIGVudW0gY2xhc3MgS2V5UGF0aFR5cGUgewog
ICAgIFN0cmluZywKICAgICBBcnJheSwKIH07Ci0gICAgCisKK2VudW0gY2xhc3MgT2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlIHsKKyAgICBPdmVyd3JpdGUsCisgICAgTm9PdmVyd3JpdGUsCit9Owor
CiAvLyBJbiBvcmRlciBvZiB0aGUgbGVhc3QgdG8gdGhlIGhpZ2hlc3QgcHJlY2VkZW50IGluIHRl
cm1zIG9mIHNvcnQgb3JkZXIuCiBlbnVtIEtleVR5cGUgewogICAgIE1heCA9IC0xLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwu
Y3BwCmluZGV4IDJmZGFiN2QuLjdlOWExMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5jcHAKQEAgLTQyLDYgKzQyLDE4
IEBAIElEQkFueTo6SURCQW55KFJlZjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkKIHsKIH0KIAor
SURCQW55OjpJREJBbnkoUmVmPElEQk9iamVjdFN0b3JlPiYmIG9iamVjdFN0b3JlKQorICAgIDog
bV90eXBlKElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3RvcmUpCisgICAgLCBtX29iamVjdFN0b3Jl
KGFkb3B0UmVmKCZvYmplY3RTdG9yZS5sZWFrUmVmKCkpKQoreworfQorCitJREJBbnk6OklEQkFu
eShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUpCisgICAgOiBtX3R5cGUoSURC
QW55OjpUeXBlOjpTY3JpcHRWYWx1ZSkKKyAgICAsIG1fc2NyaXB0VmFsdWUodmFsdWUpCit7Cit9
CisKIElEQkFueTo6fklEQkFueSgpCiB7CiB9CkBAIC04Miw2ICs5NCwxMiBAQCBSZWZQdHI8V2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU+IElEQkFueTo6aWRiT2JqZWN0U3RvcmUoKQogICAgIHJldHVy
biBudWxscHRyOwogfQogCitJREJPYmplY3RTdG9yZSogSURCQW55Ojptb2Rlcm5JREJPYmplY3RT
dG9yZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQk9iamVjdFN0
b3JlKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZS5nZXQoKTsKK30KKwogUmVmUHRyPFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5zYWN0aW9uKCkKIHsKICAgICByZXR1
cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJBbnlJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQW55SW1wbC5oCmluZGV4IGMxNDI2NTYuLjA5YzQyYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaApAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VJbXBsLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbXBsLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJDbGllbnQgewpAQCAtNDEsNiArNDIsMTYgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShXVEY6Om1vdmUoZGF0YWJhc2Up
KSk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShSZWY8SURCT2Jq
ZWN0U3RvcmU+JiYgb2JqZWN0U3RvcmUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkFueShXVEY6Om1vdmUob2JqZWN0U3RvcmUpKSk7CisgICAgfQorCisgICAgc3RhdGlj
IFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueSh2YWx1ZSkpOwor
ICAgIH0KKwogICAgIHZpcnR1YWwgfklEQkFueSgpOwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUo
KSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX3R5cGU7IH0KQEAgLTU3LDExICs2OCwx
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHN0cmluZygpIG92ZXJyaWRl
IGZpbmFsOwogICAgIHZpcnR1YWwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIG92ZXJyaWRl
IGZpbmFsOwogCisgICAgSURCT2JqZWN0U3RvcmUqIG1vZGVybklEQk9iamVjdFN0b3JlKCk7CisK
IHByaXZhdGU6Ci0gICAgSURCQW55KFJlZjxJREJEYXRhYmFzZT4mJik7CisgICAgZXhwbGljaXQg
SURCQW55KFJlZjxJREJEYXRhYmFzZT4mJik7CisgICAgZXhwbGljaXQgSURCQW55KFJlZjxJREJP
YmplY3RTdG9yZT4mJik7CisgICAgZXhwbGljaXQgSURCQW55KGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJik7CisKIAogICAgIElEQkFueTo6VHlwZSBtX3R5cGUgeyBJREJBbnk6OlR5cGU6
OlVuZGVmaW5lZCB9OwogICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAgICBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7CiAKICAgICBjb25zdCBJREJLZXlQ
YXRoIG1faWRiS2V5UGF0aDsKICAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX3Nj
cmlwdFZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAppbmRleCA0NjIwOWQ4
Li5lNjEwMzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcApAQCAtOTgsOCAr
OTgsNyBAQCB2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlT2JqZWN0U3RvcmUoVHJh
bnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgYwogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVjdFN0b3JlIik7CiAKLSAgICBBU1NFUlQo
IW1fYWN0aXZlT3BlcmF0aW9ucy5jb250YWlucyhvcGVyYXRpb24uaWRlbnRpZmllcigpKSk7Ci0g
ICAgbV9hY3RpdmVPcGVyYXRpb25zLnNldChvcGVyYXRpb24uaWRlbnRpZmllcigpLCAmb3BlcmF0
aW9uKTsKKyAgICBzYXZlT3BlcmF0aW9uKG9wZXJhdGlvbik7CiAKICAgICBtX2RlbGVnYXRlLT5j
cmVhdGVPYmplY3RTdG9yZShJREJSZXF1ZXN0RGF0YShvcGVyYXRpb24pLCBpbmZvKTsKIH0KQEAg
LTEwNywxMSArMTA2LDM3IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGVPYmpl
Y3RTdG9yZShUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjCiB2b2lkIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlcjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYg
cmVzdWx0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2VydmVy
OjpkaWRDcmVhdGVPYmplY3RTdG9yZSIpOworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJlc3VsdERh
dGEpOworfQogCi0gICAgYXV0byBvcGVyYXRpb24gPSBtX2FjdGl2ZU9wZXJhdGlvbnMudGFrZShy
ZXN1bHREYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpOwotICAgIEFTU0VSVChvcGVyYXRpb24pOwor
dm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OnB1dE9yQWRkKFRyYW5zYWN0aW9uT3BlcmF0aW9u
JiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+JiBrZXksIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+JiB2YWx1ZSwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUg
b3ZlcndyaXRlTW9kZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29ubmVjdGlvblRvU2Vy
dmVyOjpwdXRPckFkZCIpOwogCi0gICAgb3BlcmF0aW9uLT5jb21wbGV0ZWQocmVzdWx0RGF0YSk7
CisgICAgc2F2ZU9wZXJhdGlvbihvcGVyYXRpb24pOworICAgIG1fZGVsZWdhdGUtPnB1dE9yQWRk
KElEQlJlcXVlc3REYXRhKG9wZXJhdGlvbiksIGtleS5nZXQoKSwgKnZhbHVlLCBvdmVyd3JpdGVN
b2RlKTsKK30KKwordm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFB1dE9yQWRkKGNvbnN0
IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkNv
bm5lY3Rpb25Ub1NlcnZlcjo6ZGlkUHV0T3JBZGQiKTsKKyAgICBjb21wbGV0ZU9wZXJhdGlvbihy
ZXN1bHREYXRhKTsKK30KKwordm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmdldFJlY29yZChU
cmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBSZWZQdHI8SURCS2V5PiYga2V5KQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmdldFJlY29yZCIpOwor
CisgICAgQVNTRVJUKGtleSk7CisKKyAgICBzYXZlT3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAg
bV9kZWxlZ2F0ZS0+Z2V0UmVjb3JkKElEQlJlcXVlc3REYXRhKG9wZXJhdGlvbiksIGtleS5nZXQo
KSk7Cit9CisKK3ZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpkaWRHZXRSZWNvcmQoY29uc3Qg
SURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRHZXRSZWNvcmQiKTsKKyAgICBjb21wbGV0ZU9wZXJhdGlvbihy
ZXN1bHREYXRhKTsKIH0KIAogdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNvbW1pdFRyYW5z
YWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKQEAgLTE4NSw2ICsyMTAsMjAgQEAg
dm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24o
SURCRGF0YWJhc2UmIGRhdGFiYXNlKQogICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uTWFwLnJlbW92
ZShkYXRhYmFzZS5kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkpOwogfQogCit2b2lkIElE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6c2F2ZU9wZXJhdGlvbihUcmFuc2FjdGlvbk9wZXJhdGlvbiYg
b3BlcmF0aW9uKQoreworICAgIEFTU0VSVCghbV9hY3RpdmVPcGVyYXRpb25zLmNvbnRhaW5zKG9w
ZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsKKyAgICBtX2FjdGl2ZU9wZXJhdGlvbnMuc2V0KG9wZXJh
dGlvbi5pZGVudGlmaWVyKCksICZvcGVyYXRpb24pOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25U
b1NlcnZlcjo6Y29tcGxldGVPcGVyYXRpb24oY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKK3sKKyAgICBhdXRvIG9wZXJhdGlvbiA9IG1fYWN0aXZlT3BlcmF0aW9ucy50YWtlKHJlc3Vs
dERhdGEucmVxdWVzdElkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG9wZXJhdGlvbik7CisKKyAg
ICBvcGVyYXRpb24tPmNvbXBsZXRlZChyZXN1bHREYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SURCQ2xpZW50CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXIuaAppbmRleCA0MzA1ZWEyLi43ZTI3ODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1Nl
cnZlci5oCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBJREJDbGllbnQgewogY2xhc3MgSURC
RGF0YWJhc2U7CiBjbGFzcyBJREJPcGVuREJSZXF1ZXN0OwogY2xhc3MgSURCVHJhbnNhY3Rpb247
CitjbGFzcyBUcmFuc2FjdGlvbk9wZXJhdGlvbjsKIAogY2xhc3MgSURCQ29ubmVjdGlvblRvU2Vy
dmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ29ubmVjdGlvblRvU2VydmVyPiB7CiBwdWJsaWM6
CkBAIC02Myw2ICs2NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShU
cmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZv
aWQgZGlkQ3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpOwogCisgICAgdm9p
ZCBwdXRPckFkZChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIFJlZlB0cjxJREJLZXk+JiwgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSk7CisgICAgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJik7
CisKKyAgICB2b2lkIGdldFJlY29yZChUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIFJlZlB0cjxJREJL
ZXk+Jik7CisgICAgdm9pZCBkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYpOworCiAg
ICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgZGlk
Q29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAKQEAgLTc3LDcgKzg0LDEwIEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXIoSURCQ29ubmVjdGlvblRv
U2VydmVyRGVsZWdhdGUmKTsKLSAgICAKKworICAgIHZvaWQgc2F2ZU9wZXJhdGlvbihUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYpOworICAgIHZvaWQgY29tcGxldGVPcGVyYXRpb24oY29uc3QgSURCUmVz
dWx0RGF0YSYpOworCiAgICAgUmVmPElEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlPiBtX2Rl
bGVnYXRlOwogCiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJD
bGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q+PiBtX29wZW5EQlJlcXVlc3RNYXA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRv
U2VydmVyRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oCmluZGV4IDA5YjJmMDEuLmVmMjY4Y2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJD
b25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oCkBAIC0zMCw5
ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQktleTsKIGNsYXNz
IElEQk9iamVjdFN0b3JlSW5mbzsKIGNsYXNzIElEQlJlcXVlc3REYXRhOwogY2xhc3MgSURCUmVz
b3VyY2VJZGVudGlmaWVyOworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworCituYW1lc3Bh
Y2UgSW5kZXhlZERCIHsKK2VudW0gY2xhc3MgT2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOworfQog
CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIApAQCAtNDYsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFib3J0VHJhbnNhY3Rpb24oSURCUmVzb3VyY2VJZGVudGlmaWVyJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmFuc2FjdGlvbihJREJSZXNvdXJjZUlkZW50aWZp
ZXImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
cXVlc3REYXRhJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIElEQktleSosIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSYsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIElE
QktleSopID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQo
dWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcikgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIHJlZigpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXggY2Y4Y2Yx
NC4uNDg4OWIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAKQEAgLTI4LDcgKzI4LDE1
IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVJlcXVl
c3RTdGF0ZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJ
REJFcnJvci5oIgorI2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3RJbXBs
LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCisjaW5jbHVkZSAiSW5kZXhlZERC
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKQEAgLTgw
LDcgKzg4LDcgQEAgUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJPYmplY3RTdG9y
ZTo6dHJhbnNhY3Rpb24oKSBjb25zdAogCiBib29sIElEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVt
ZW50KCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBtX2luZm8uYXV0b0luY3JlbWVudCgpOwogfQogCiBSZWZQdHI8V2ViQ29yZTo6SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCkBAIC04OCw5ICs5Niw5IEBAIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlJiwgRGVw
cmVjYXRlZDo6U2NyCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlNDOjpFeGVjU3Rh
dGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKQorUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHB1dE9yQWRk
KHN0YXRlLCB2YWx1ZSwgbnVsbHB0ciwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGU6Ok92ZXJ3cml0ZSwgZWMpOwogfQogCiBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlv
bkNvZGUmKQpAQCAtMTE4LDkgKzEyNiwzNCBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUmVmUHRyPFdlYkNvcmU6OklEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7CisKKyAgICBpZiAoIWNvbnRleHQpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6VHJhbnNh
Y3Rpb25JbmFjdGl2ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVz
dFN0YXRlKGNvbnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVl
VG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBpZiAoIWlkYktleSB8fCBpZGJLZXkt
PnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8
RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3Ry
YW5zYWN0aW9uLT5yZXF1ZXN0R2V0UmVjb3JkKCpjb250ZXh0LCAqdGhpcywgKmlkYktleSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKHJlcXVlc3QubGVha1JlZigpKTsKIH0KIAogUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpCkBAIC0xMzMsMTEgKzE2Niw5NCBAQCBS
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNT
dGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KEpT
Qzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKQorUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIGF1dG8gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShleGVjU3RhdGUsIGtl
eSk7CisgICAgcmV0dXJuIHB1dE9yQWRkKGV4ZWNTdGF0ZSwgdmFsdWUsIGlkYktleSwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlLCBlYyk7CiB9CiAKK1Jl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIFJlZlB0cjxJ
REJLZXk+IGtleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRl
TW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVj
dFN0b3JlOjpwdXRPckFkZCIpOworCisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHko
KSkgeworICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlv
bkNvZGU6OlJlYWRPbmx5RXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBzdGF0
aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpUcmFuc2FjdGlvbkluYWN0
aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9k
ZWxldGVkKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgdmFs
dWUuanNWYWx1ZSgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZS0+aGFzQmxvYlVSTHMoKSkg
eworICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0CisgICAg
ICAgIGVjID0gREFUQV9DTE9ORV9FUlI7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIGlmIChrZXkgJiYga2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgeworICAg
ICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkRh
dGFFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGJvb2wgdXNl
c0lubGluZUtleXMgPSAhbV9pbmZvLmtleVBhdGgoKS5pc051bGwoKTsKKyAgICBib29sIHVzZXNL
ZXlHZW5lcmF0b3IgPSBhdXRvSW5jcmVtZW50KCk7CisgICAgaWYgKHVzZXNJbmxpbmVLZXlzKSB7
CisgICAgICAgIGlmIChrZXkpIHsKKyAgICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0
aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtl
eSA9IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChzdGF0ZSwgdmFs
dWUsIG1faW5mby5rZXlQYXRoKCkpOworICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5UGF0
aEtleS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlv
bkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkRhdGFFcnJvcik7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgha2V5UGF0aEtleSkgeworICAgICAg
ICAgICAgaWYgKHVzZXNLZXlHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbklu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQYXRoKCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4o
SURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBlYyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNv
ZGU6OkRhdGFFcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5UGF0aEtleSkgeworICAgICAgICAg
ICAgQVNTRVJUKCFrZXkpOworICAgICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoIXVzZXNLZXlHZW5lcmF0b3IgJiYgIWtleSkgeworICAgICAgICBl
YyA9IHN0YXRpY19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OkRhdGFFcnJv
cik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gY29udGV4dCA9
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSk7CisgICAgaWYgKCFj
b250ZXh0KSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhj
ZXB0aW9uQ29kZTo6VW5rbm93bik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdFB1dE9y
QWRkKCpjb250ZXh0LCAqdGhpcywga2V5LmdldCgpLCAqc2VyaWFsaXplZFZhbHVlLCBvdmVyd3Jp
dGVNb2RlKTsKKyAgICByZXR1cm4gYWRvcHRSZWYocmVxdWVzdC5sZWFrUmVmKCkpOworfQorCisK
IFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZSYp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUlt
cGwuaAppbmRleCA1ZmRjOTg2Li5iZjgyMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oCkBA
IC0zMCw4ICszMCwxMiBAQAogCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKICNpbmNsdWRl
ICJJREJPYmplY3RTdG9yZUluZm8uaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXk7CisKIG5hbWVzcGFjZSBJREJDbGllbnQgewog
CiBjbGFzcyBJREJUcmFuc2FjdGlvbjsKQEAgLTcyLDExICs3NiwxNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CiAKKyAgICBjb25zdCBJREJPYmplY3RTdG9yZUluZm8m
IGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKwogcHJpdmF0ZToKICAgICBJREJPYmpl
Y3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBJREJUcmFuc2FjdGlvbiYpOwogCisg
ICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IHB1dE9yQWRkKEpTQzo6RXhlY1N0YXRlJiwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBSZWZQdHI8SURCS2V5PiwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgIElEQk9iamVjdFN0
b3JlSW5mbyBtX2luZm87CiAgICAgUmVmPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwor
CisgICAgYm9vbCBtX2RlbGV0ZWQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURC
Q2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcAppbmRleCBlMDEyNjk1Li5iNmRi
ZDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCT3BlbkRCUmVxdWVzdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAKQEAgLTU1LDcgKzU1LDYgQEAg
SURCT3BlbkRCUmVxdWVzdDo6SURCT3BlbkRCUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXIm
IGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWMKICAgICAsIG1fZGF0YWJhc2VJZGVudGlmaWVyKGRhdGFi
YXNlSWRlbnRpZmllcikKICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQogewotICAgIHN1c3BlbmRJ
Zk5lZWRlZCgpOwogfQogCiBJREJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVx
dWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlJlcXVlc3RJbXBsLmNwcAppbmRleCBiMGY3OTQ3Li5lNGMyY2Q0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1w
bC5jcHAKQEAgLTI5LDE3ICsyOSwzOSBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
CiAjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJREJLZXlEYXRh
LmgiCisjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVGhyZWFkU2FmZURh
dGFCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CiAKK1JlZjxJREJSZXF1ZXN0PiBJREJS
ZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0
U3RvcmUmIG9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCUmVxdWVzdChjb250ZXh0LCBvYmplY3RTdG9yZSwgdHJh
bnNhY3Rpb24pKTsKK30KKwogSURCUmVxdWVzdDo6SURCUmVxdWVzdChJREJDb25uZWN0aW9uVG9T
ZXJ2ZXImIGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAg
OiBJREJPcGVuREJSZXF1ZXN0KGNvbnRleHQpCiAgICAgLCBtX2Nvbm5lY3Rpb24oY29ubmVjdGlv
bikKICAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKGNvbm5lY3Rpb24pCiB7CisgICAgc3VzcGVu
ZElmTmVlZGVkKCk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24pCisgICAgOiBJREJPcGVuREJSZXF1ZXN0KCZjb250ZXh0KQorICAg
ICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24pCisgICAgLCBtX2Nvbm5lY3Rpb24odHJhbnNh
Y3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQorICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJh
bnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQorICAgICwgbV9zb3VyY2UoYWRvcHRSZWYoKklE
QkFueTo6Y3JlYXRlKG9iamVjdFN0b3JlKS5sZWFrUmVmKCkpKQoreworICAgIHN1c3BlbmRJZk5l
ZWRlZCgpOwogfQogCiBJREJSZXF1ZXN0Ojp+SURCUmVxdWVzdCgpCkBAIC03Nyw2ICs5OSwxOCBA
QCBjb25zdCBTdHJpbmcmIElEQlJlcXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAogICAgIHJldHVy
biByZWFkeVN0YXRlOwogfQogCit1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9y
ZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVy
biAwOworICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpICE9IElEQkFueTo6VHlwZTo6SURCT2JqZWN0
U3RvcmUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9zb3VyY2UtPm1vZGVybklEQk9i
amVjdFN0b3JlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fc291cmNlLT5t
b2Rlcm5JREJPYmplY3RTdG9yZSgpLT5pbmZvKCkuaWRlbnRpZmllcigpOworfQorCiBFdmVudFRh
cmdldEludGVyZmFjZSBJREJSZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIElEQlJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CkBAIC05Miw2
ICsxMjYsMTEgQEAgYm9vbCBJREJSZXF1ZXN0OjpjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHk7Cit9CisK
IHZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKIHsKICAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKQEAgLTEwMSw2ICsxNDAsODIgQEAgdm9p
ZCBJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogICAgIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudCgmZXZlbnQuZ2V0
KCkpOwogfQogCitib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gcHJwRXZlbnQpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNo
RXZlbnQgLSAlcyIsIHBycEV2ZW50LT50eXBlKCkuY2hhcmFjdGVyczgoKSk7CisKKyAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBl
dmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQorICAgICAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1
ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKKworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0
YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOworCisgICAgaWYgKG1fdHJhbnNhY3Rp
b24pIHsKKyAgICAgICAgdGFyZ2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbik7CisgICAgICAgIHRh
cmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24tPmRiKCkpOworICAgIH0KKworICAgIGJvb2wgZG9u
dFByZXZlbnREZWZhdWx0OworICAgIHsKKyAgICAgICAgVHJhbnNhY3Rpb25BY3RpdmF0b3IgYWN0
aXZhdG9yKG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgICAgICBkb250UHJldmVudERlZmF1bHQg
PSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKKyAg
ICB9CisKKyAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOworCisgICAgcmV0dXJuIGRv
bnRQcmV2ZW50RGVmYXVsdDsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3Qg
SURCS2V5RGF0YSoga2V5RGF0YSkKK3sKKyAgICBpZiAoIWtleURhdGEpIHsKKyAgICAgICAgbV9y
ZXN1bHQgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksICprZXlEYXRhKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRl
KFdURjo6bW92ZSh2YWx1ZSkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3Ry
dWN0dXJlZENsb25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25l
Iik7CisKKyAgICBhdXRvIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKCpjb250ZXh0LCB2YWx1ZURhdGEp
OworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoV1RGOjptb3ZlKHZhbHVlKSk7Cit9CisK
K3ZvaWQgSURCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKQoreworICAgIG1faWRiRXJyb3IgPSByZXN1bHREYXRhLmVycm9yKCk7CisgICAg
aWYgKCFtX2lkYkVycm9yLmlzTnVsbCgpKQorICAgICAgICBvbkVycm9yKCk7CisgICAgZWxzZQor
ICAgICAgICBvblN1Y2Nlc3MoKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpvbkVycm9yKCkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6b25FcnJvciIpOworCisgICAgQVNTRVJU
KCFtX2lkYkVycm9yLmlzTnVsbCgpKTsKKyAgICBtX2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0
ZShtX2lkYkVycm9yLm5hbWUoKSk7CisgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0
OjpvblN1Y2Nlc3MoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpvblN1Y2Nl
c3MiKTsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJDbGllbnQK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaAppbmRleCBkNDYyNDExLi4x
ZGZmYjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCUmVxdWVzdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCUmVxdWVzdEltcGwuaApAQCAtMzcsNyArMzcsMTAgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRXZlbnQ7CitjbGFzcyBJREJLZXlEYXRhOwogY2xhc3MgSURCUmVz
dWx0RGF0YTsKK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOworCiAKIG5hbWVzcGFjZSBJREJD
bGllbnQgewogCkBAIC00NSw2ICs0OCw4IEBAIGNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsK
IAogY2xhc3MgSURCUmVxdWVzdCA6IHB1YmxpYyBXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0LCBw
dWJsaWMgUmVmQ291bnRlZDxJREJSZXF1ZXN0PiB7CiBwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJ
REJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3Jl
JiwgSURCVHJhbnNhY3Rpb24mKTsKKwogICAgIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
cmVzb3VyY2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUlkZW50aWZpZXI7
IH0KIAogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKSBvdmVycmlkZTsKQEAgLTU2LDYgKzYxLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBy
ZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICB1aW50NjRfdCBzb3VyY2VPYmplY3RT
dG9yZUlkZW50aWZpZXIoKSBjb25zdDsKKwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVh
bCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CkBAIC02NCwxNSArNzEsMjMgQEAgcHVibGljOgog
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46OmRlcmVmOwogCiAgICAgdm9pZCBlbnF1
ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50Pikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICBJREJDb25uZWN0aW9uVG9T
ZXJ2ZXImIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KIAorICAgIHZvaWQg
cmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2b2lkIHNldFJl
c3VsdChjb25zdCBJREJLZXlEYXRhKik7CisgICAgdm9pZCBzZXRSZXN1bHRUb1N0cnVjdHVyZWRD
bG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOworCiBwcm90ZWN0ZWQ6CiAgICAgSURC
UmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CisgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUm
LCBJREJUcmFuc2FjdGlvbiYpOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0LgogICAgIHZpcnR1
YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kRm9yUGFnZUNhY2hlKCkgY29uc3Qgb3ZlcnJp
ZGUgZmluYWw7CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsOwogICAgIAogICAgIC8vIEV2ZW50VGFyZ2V0LgogICAgIHZpcnR1YWwgdm9p
ZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIGZpbmFsIHsgUmVmQ291bnRlZDxJREJSZXF1ZXN0
Pjo6cmVmKCk7IH0KQEAgLTgyLDEwICs5NywxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPElE
QkFueT4gbV9yZXN1bHQ7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9u
OwogICAgIFJlZlB0cjxET01FcnJvcj4gbV9kb21FcnJvcjsKKyAgICBJREJFcnJvciBtX2lkYkVy
cm9yOwogCiBwcml2YXRlOgorICAgIHZvaWQgb25FcnJvcigpOworICAgIHZvaWQgb25TdWNjZXNz
KCk7CisKICAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIG1fY29ubmVjdGlvbjsKICAgICBJREJS
ZXNvdXJjZUlkZW50aWZpZXIgbV9yZXNvdXJjZUlkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkFu
eT4gbV9zb3VyY2U7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eSB7IHRydWUgfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcApp
bmRleCA4MmU1OTYyLi5kMmRmZGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIklEQkVycm9yLmgiCiAjaW5jbHVkZSAiSURCRXZlbnRE
aXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJS
ZXF1ZXN0SW1wbC5oIgogI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtNjEsNyArNjIs
NyBAQCBJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmIGRhdGFiYXNl
LCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mCiAgICAgICAgIG1fb3JpZ2luYWxEYXRhYmFzZUlu
Zm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9kYXRhYmFzZS0+aW5mbygp
KTsKIAogICAgIHN1c3BlbmRJZk5lZWRlZCgpOwotICAgIG1fc3RhdGUgPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uU3RhdGU6OlJ1bm5pbmc7CisgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25TdGF0ZTo6SW5hY3RpdmU7CiB9CiAKIElEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rp
b24oKQpAQCAtMTMwLDEyICsxMzEsMTUgQEAgYm9vbCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVu
ZEZvclBhZ2VDYWNoZSgpIGNvbnN0CiAKIGJvb2wgSURCVHJhbnNhY3Rpb246Omhhc1BlbmRpbmdB
Y3Rpdml0eSgpIGNvbnN0CiB7CisgICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlOjpJbmFjdGl2ZSkKKyAgICAgICAgcmV0dXJuICFtX3RyYW5zYWN0aW9uT3BlcmF0
aW9uUXVldWUuaXNFbXB0eSgpIHx8ICFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmlzRW1wdHko
KTsKKwogICAgIHJldHVybiBtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6
RmluaXNoZWQ7CiB9CiAKIGJvb2wgSURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OlJ1bm5p
bmc7CisgICAgcmV0dXJuIG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpB
Y3RpdmU7CiB9CiAKIGJvb2wgSURCVHJhbnNhY3Rpb246OmlzRmluaXNoZWRPckZpbmlzaGluZygp
IGNvbnN0CkBAIC0xODEsNyArMTg1LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9u
VGltZXJGaXJlZCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaXNBY3RpdmUo
KSkKKyAgICBpZiAoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKQogICAgICAgICBjb21taXQoKTsK
IH0KIApAQCAtMTg5LDEwICsxOTMsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb21taXQoKQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y29tbWl0Iik7CiAKLSAgICBp
ZiAobV9zdGF0ZSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OlJ1bm5pbmcpIHsKLSAg
ICAgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7Cisg
ICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQog
CiAgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGluZzsK
IApAQCAtMjExLDcgKzIxMyw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEFib3J0KGNvbnN0
IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmRpZEFib3J0Iik7CiAKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkFib3J0aW5nIHx8IG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0
YXRlOjpSdW5uaW5nKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
U3RhdGU6OkZpbmlzaGVkKQorICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGFiYXNlLT5kaWRB
Ym9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKIApAQCAtMjk0LDcgKzI5Nyw3IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdGlvbiwKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKIAotICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKKyAgICBB
U1NFUlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hh
bmdlKCkpOwogCiAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLmNyZWF0ZU9iamVj
dFN0b3JlKG9wZXJhdGlvbiwgaW5mbyk7CkBAIC0zMDksNiArMzEyLDg0IEBAIHZvaWQgSURCVHJh
bnNhY3Rpb246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0
YSYgcmVzdWx0RGF0CiAgICAgc2NoZWR1bGVPcGVyYXRpb25UaW1lcigpOwogfQogCitSZWY8SURC
UmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBJREJLZXkmIGtl
eSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFk
ZCIpOworICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQoa2V5LmlzVmFsaWQoKSk7
CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBvYmplY3RTdG9yZSwgKnRoaXMpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVU
cmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgJnJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlv
bjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2
ZXIsICZrZXkpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURjo6bW92ZShvcGVyYXRpb24pKTsK
KworICAgIHJldHVybiBXVEY6Om1vdmUocmVxdWVzdCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b246OmdldFJlY29yZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJl
ZlB0cjxJREJLZXk+IGtleSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmdldFJlY29yZE9uU2VydmVyIik7CisKKyAgICBBU1NFUlQoIWlzRmluaXNoZWRPckZpbmlzaGlu
ZygpKTsKKworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5nZXRSZWNvcmQob3BlcmF0aW9uLCBrZXkp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcihSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVy
Iik7CisKKyAgICByZXF1ZXN0LT5zZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShyZXN1bHREYXRh
LnJlc3VsdERhdGEoKSk7CisgICAgcmVxdWVzdC0+cmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRh
KTsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0
b3JlLCBJREJLZXkqIGtleSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgSW5kZXhlZERC
OjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZCIpOworICAgIEFTU0VSVChp
c0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQoIWlzUmVhZE9ubHkoKSk7CisgICAgQVNTRVJUKG9iamVj
dFN0b3JlLmluZm8oKS5hdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKKworICAgIFJlZjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAq
dGhpcyk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9u
KCp0aGlzLCAmcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2Vy
dmVyLCAmSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIsIGtleSwgJnZhbHVlLCBvdmVy
d3JpdGVNb2RlKTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEY6Om1vdmUob3BlcmF0aW9uKSk7
CisKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJlcXVlc3QpOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uOjpwdXRPckFkZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJl
ZlB0cjxJREJLZXk+IGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNv
bnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlJiBvdmVyd3JpdGVNb2RlKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlciIp
OworCisgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CisgICAgQVNTRVJUKCFp
c1JlYWRPbmx5KCkpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLnB1dE9yQWRkKG9wZXJhdGlv
biwga2V5LCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OmRpZFB1dE9yQWRkT25TZXJ2ZXIoUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IElE
QlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyIik7CisKKyAgICByZXF1ZXN0LT5zZXRSZXN1bHQo
cmVzdWx0RGF0YS5yZXN1bHRLZXkoKSk7CisgICAgcmVxdWVzdC0+cmVxdWVzdENvbXBsZXRlZChy
ZXN1bHREYXRhKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6YWN0aXZhdGUoKQoreworICAg
IEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6VW5zdGFydGVk
IHx8IG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpJbmFjdGl2ZSk7Cisg
ICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZlOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjpkZWFjdGl2YXRlKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OlVuc3RhcnRlZCB8fCBtX3N0YXRlID09IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZlKQorICAgICAgICBtX3N0YXRlID0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpJbmFjdGl2ZTsKKworICAgIHNjaGVkdWxlT3BlcmF0aW9u
VGltZXIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJUcmFuc2FjdGlvbkltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAppbmRleCA1ZWI3OWE1Li40ZThjOTc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJh
bnNhY3Rpb25JbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCkBAIC04MSwxMiArODEsMTkgQEAgcHVibGljOgogICAg
IHZvaWQgZGlkQ29tbWl0KGNvbnN0IElEQkVycm9yJik7CiAKICAgICBib29sIGlzVmVyc2lvbkNo
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7
IHJldHVybiBtX2luZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFk
T25seTsgfQogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKIAogICAgIFJlZjxJREJPYmplY3RT
dG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAKKyAg
ICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdFB1dE9yQWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJPYmplY3RTdG9yZSYsIElEQktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVx
dWVzdEdldFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBJ
REJLZXkmKTsKKwogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgc2VydmVyQ29ubmVjdGlvbigp
OwogCisgICAgdm9pZCBhY3RpdmF0ZSgpOworICAgIHZvaWQgZGVhY3RpdmF0ZSgpOworCiBwcml2
YXRlOgogICAgIElEQlRyYW5zYWN0aW9uKElEQkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNhY3Rp
b25JbmZvJik7CiAKQEAgLTEwOCw2ICsxMTUsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mKTsKICAgICB2b2lkIGRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29u
c3QgSURCUmVzdWx0RGF0YSYpOwogCisgICAgdm9pZCBwdXRPckFkZE9uU2VydmVyKFRyYW5zYWN0
aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktleT4sIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSYpOworICAgIHZv
aWQgZGlkUHV0T3JBZGRPblNlcnZlcihSZWZQdHI8SURCUmVxdWVzdD4sIGNvbnN0IElEQlJlc3Vs
dERhdGEmKTsKKworICAgIHZvaWQgZ2V0UmVjb3JkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRp
b24mLCBSZWZQdHI8SURCS2V5Pik7CisgICAgdm9pZCBkaWRHZXRSZWNvcmRPblNlcnZlcihSZWZQ
dHI8SURCUmVxdWVzdD4sIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKwogICAgIFJlZjxJREJEYXRh
YmFzZT4gbV9kYXRhYmFzZTsKICAgICBJREJUcmFuc2FjdGlvbkluZm8gbV9pbmZvOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IG1fb3JpZ2luYWxEYXRhYmFzZUluZm87CkBA
IC0xMjIsNiArMTM1LDI2IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50
aWZpZXIsIFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4+IG1fdHJhbnNhY3Rpb25PcGVyYXRp
b25NYXA7CiB9OwogCitjbGFzcyBUcmFuc2FjdGlvbkFjdGl2YXRvciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVHJhbnNhY3Rpb25BY3RpdmF0b3IpOworcHVibGljOgorICAgIFRyYW5zYWN0
aW9uQWN0aXZhdG9yKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICAgICAgOiBtX3Ry
YW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHJhbnNhY3Rpb24p
CisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hY3RpdmF0ZSgpOworICAgIH0KKworICAgIH5U
cmFuc2FjdGlvbkFjdGl2YXRvcigpCisgICAgeworICAgICAgICBpZiAobV90cmFuc2FjdGlvbikK
KyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRlYWN0aXZhdGUoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgSURCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247Cit9OworCiB9IC8vIG5hbWVz
cGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlv
bk9wZXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhOTk1
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2FjdGlvbk9wZXJhdGlvbi5o
IgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBJREJDbGllbnQgeworCitUcmFuc2FjdGlvbk9wZXJhdGlvbjo6VHJhbnNhY3Rp
b25PcGVyYXRpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJSZXF1ZXN0KiByZXF1
ZXN0KQorICAgIDogVHJhbnNhY3Rpb25PcGVyYXRpb24odHJhbnNhY3Rpb24pCit7CisgICAgaWYg
KCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX29iamVjdFN0b3JlSWRlbnRpZmll
ciA9IHJlcXVlc3QtPnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllcigpOworfQorCit9IC8vIG5h
bWVzcGFjZSBJREJDbGllbnQKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCAz
NjQ0MGY2Li5jOTlkODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaApAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJS
ZXF1ZXN0SW1wbC5oIgogI2luY2x1ZGUgIklEQlJlc291cmNlSWRlbnRpZmllci5oIgogI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgogCkBAIC01MSw2ICs1Miw4IEBAIHB1YmxpYzoKIAog
ICAgIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllcjsgfQogICAgIElEQlJlc291cmNlSWRlbnRpZmllciB0cmFuc2FjdGlv
bklkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLT5pbmZvKCkuaWRlbnRp
ZmllcigpOyB9CisgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3RTdG9yZUlkZW50aWZpZXI7IH0KKyAgICBJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24oKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
ICAgICBUcmFuc2FjdGlvbk9wZXJhdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCkBA
IC01OSw4ICs2MiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAorICAgIFRyYW5zYWN0
aW9uT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uJiwgSURCUmVxdWVzdCopOworCiAgICAgUmVmPElE
QlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogICAgIElEQlJlc291cmNlSWRlbnRpZmllciBt
X2lkZW50aWZpZXI7CisgICAgdWludDY0X3QgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIgeyAwIH07
CiAgICAgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBtX3BlcmZvcm1GdW5jdGlvbjsKICAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IElEQlJlc3VsdERhdGEmKT4gbV9jb21wbGV0ZUZ1bmN0aW9u
OwogfTsKQEAgLTgxLDYgKzg3LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgICgmbV90cmFuc2Fj
dGlvbi5nZXQoKS0+KmNvbXBsZXRlTWV0aG9kKShyZXN1bHREYXRhKTsKICAgICAgICAgfTsKICAg
ICB9CisKKyAgICBUcmFuc2FjdGlvbk9wZXJhdGlvbkltcGwoSURCVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCwgdm9pZCAoSURCVHJhbnNhY3Rpb246
Oipjb21wbGV0ZU1ldGhvZCkoUmVmUHRyPElEQlJlcXVlc3Q+LCBjb25zdCBJREJSZXN1bHREYXRh
JiksIHZvaWQgKElEQlRyYW5zYWN0aW9uOjoqcGVyZm9ybU1ldGhvZCkoVHJhbnNhY3Rpb25PcGVy
YXRpb24mLCBBcmd1bWVudHMuLi4pLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgICAg
IDogVHJhbnNhY3Rpb25PcGVyYXRpb24odHJhbnNhY3Rpb24sIHJlcXVlc3QuZ2V0KCkpCisgICAg
eworICAgICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKKworICAgICAgICBSZWZQdHI8
VHJhbnNhY3Rpb25PcGVyYXRpb24+IHNlbGYodGhpcyk7CisgICAgICAgIG1fcGVyZm9ybUZ1bmN0
aW9uID0gW3NlbGYsIHRoaXMsIHBlcmZvcm1NZXRob2QsIGFyZ3VtZW50cy4uLl0geworICAgICAg
ICAgICAgKCZtX3RyYW5zYWN0aW9uLmdldCgpLT4qcGVyZm9ybU1ldGhvZCkoKnRoaXMsIGFyZ3Vt
ZW50cy4uLik7CisgICAgICAgIH07CisKKyAgICAgICAgbV9jb21wbGV0ZUZ1bmN0aW9uID0gW3Nl
bGYsIHRoaXMsIHJlcXVlc3QsIGNvbXBsZXRlTWV0aG9kXShjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKSB7CisgICAgICAgICAgICAoJm1fdHJhbnNhY3Rpb24uZ2V0KCktPipjb21wbGV0
ZU1ldGhvZCkocmVxdWVzdCwgcmVzdWx0RGF0YSk7CisgICAgICAgIH07CisgICAgfQogfTsKIAog
dGVtcGxhdGU8dHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMT4KQEAgLTk0LDYgKzExNSwzMiBAQCBS
ZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKAog
ICAgIHJldHVybiBhZG9wdFJlZihvcGVyYXRpb24pOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBN
UDEsIHR5cGVuYW1lIFAxPgorUmVmUHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPiBjcmVhdGVUcmFu
c2FjdGlvbk9wZXJhdGlvbigKKyAgICBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sCisgICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QsCisgICAgdm9pZCAoSURCVHJhbnNhY3Rpb246Oipj
b21wbGV0ZSkoUmVmUHRyPElEQlJlcXVlc3Q+LCBjb25zdCBJREJSZXN1bHREYXRhJiksCisgICAg
dm9pZCAoSURCVHJhbnNhY3Rpb246OipwZXJmb3JtKShUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIE1Q
MSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgYXV0byBvcGVyYXRpb24gPSBu
ZXcgVHJhbnNhY3Rpb25PcGVyYXRpb25JbXBsPE1QMT4odHJhbnNhY3Rpb24sIHJlcXVlc3QsIGNv
bXBsZXRlLCBwZXJmb3JtLCBwYXJhbWV0ZXIxKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob3BlcmF0
aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IE1QMywgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMz4KK1JlZlB0cjxUcmFu
c2FjdGlvbk9wZXJhdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oCisgICAgSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLAorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0LAor
ICAgIHZvaWQgKElEQlRyYW5zYWN0aW9uOjoqY29tcGxldGUpKFJlZlB0cjxJREJSZXF1ZXN0Piwg
Y29uc3QgSURCUmVzdWx0RGF0YSYpLAorICAgIHZvaWQgKElEQlRyYW5zYWN0aW9uOjoqcGVyZm9y
bSkoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBNUDEsIE1QMiwgTVAzKSwKKyAgICBjb25zdCBQMSYg
cGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFy
YW1ldGVyMykKK3sKKyAgICBhdXRvIG9wZXJhdGlvbiA9IG5ldyBUcmFuc2FjdGlvbk9wZXJhdGlv
bkltcGw8TVAxLCBNUDIsIE1QMz4odHJhbnNhY3Rpb24sIHJlcXVlc3QsIGNvbXBsZXRlLCBwZXJm
b3JtLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYob3BlcmF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCA3ZTNlNWMwLi44N2M4NGI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC0zMyw5ICszMywxMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJPYmplY3RTdG9yZUluZm87CiBj
bGFzcyBJREJSZXNvdXJjZUlkZW50aWZpZXI7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkluZm87Citj
bGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKQEAg
LTUwLDYgKzUyLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkVycm9yIGNvbW1pdFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
KSA9IDA7CiAKICAgICB2aXJ0dWFsIElEQkVycm9yIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBrZXlFeGlzdHNJbk9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBib29s
JiBrZXlFeGlzdHMpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZVJlY29yZChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJikgPSAwOworICAgIHZpcnR1
YWwgSURCRXJyb3IgcHV0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUpID0gMDsKKyAgICB2
aXJ0dWFsIElEQkVycm9yIGdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBJREJLZXlEYXRhJiwgVGhyZWFkU2FmZURhdGFCdWZmZXImIG91dFZhbHVlKSA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5j
cHAKaW5kZXggZjk4NTM3ZS4uNDMxYTRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVu
dC5jcHAKQEAgLTY4LDYgKzY4LDE2IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvQ2xpZW50OjpkaWRD
cmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHQpCiAgICAgbV9kZWxl
Z2F0ZS0+ZGlkQ3JlYXRlT2JqZWN0U3RvcmUocmVzdWx0KTsKIH0KIAordm9pZCBJREJDb25uZWN0
aW9uVG9DbGllbnQ6OmRpZFB1dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdCkKK3sK
KyAgICBtX2RlbGVnYXRlLT5kaWRQdXRPckFkZChyZXN1bHQpOworfQorCit2b2lkIElEQkNvbm5l
Y3Rpb25Ub0NsaWVudDo6ZGlkR2V0UmVjb3JkKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdCkK
K3sKKyAgICBtX2RlbGVnYXRlLT5kaWRHZXRSZWNvcmQocmVzdWx0KTsKK30KKwogdm9pZCBJREJD
b25uZWN0aW9uVG9DbGllbnQ6OmRpZENvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3Ip
CiB7CiAgICAgbV9kZWxlZ2F0ZS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBlcnJvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKaW5kZXggMjVjZTUx
Mi4uYmZmODU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaApAQCAtNTMsNiArNTMs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRBYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOwog
ICAgIHZvaWQgZGlkQ29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBkaWRD
cmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJik7CisgICAgdm9pZCBkaWRQdXRP
ckFkZChjb25zdCBJREJSZXN1bHREYXRhJik7CisgICAgdm9pZCBkaWRHZXRSZWNvcmQoY29uc3Qg
SURCUmVzdWx0RGF0YSYpOwogCiAgICAgdm9pZCBmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KFVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29u
bmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oCmluZGV4IGNhNzg4N2Mu
LjEwMjdmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5o
CkBAIC00OSw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWJvcnRUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHV0
T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkR2V0
UmVjb3JkKGNvbnN0IElEQlJlc3VsdERhdGEmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmly
ZVZlcnNpb25DaGFuZ2VFdmVudChVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCB1aW50NjRf
dCByZXF1ZXN0ZWRWZXJzaW9uKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggNDkzMDJmOS4uMWM0MDE4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAKQEAgLTE2OCw2ICsxNjgsMjggQEAgdm9pZCBJREJTZXJ2ZXI6OmNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURC
T2IKICAgICB0cmFuc2FjdGlvbi0+Y3JlYXRlT2JqZWN0U3RvcmUocmVxdWVzdERhdGEsIGluZm8p
OwogfQogCit2b2lkIElEQlNlcnZlcjo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBv
dmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXI6OnB1dE9yQWRk
Iik7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+cHV0T3JBZGQocmVxdWVzdERhdGEsIGtl
eURhdGEsIHZhbHVlRGF0YSwgb3ZlcndyaXRlTW9kZSk7Cit9CisKK3ZvaWQgSURCU2VydmVyOjpn
ZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJTZXJ2ZXI6OmdldFJlY29y
ZCIpOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldChyZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdHJhbnNhY3Rpb24tPmdldFJlY29yZChyZXF1ZXN0RGF0YSwg
a2V5RGF0YSk7Cit9CisKIHZvaWQgSURCU2VydmVyOjpjb21taXRUcmFuc2FjdGlvbihjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCU2VydmVyOjpjb21taXRUcmFuc2FjdGlvbiIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDRk
MmE4M2MuLmZmMjY5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTYwLDYgKzYwLDggQEAgcHVibGljOgogICAgIHZv
aWQgYWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKTsKICAgICB2
b2lkIGNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogICAg
IHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mKTsKKyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURh
dGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKKyAgICB2b2lkIGdldFJl
Y29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmKTsKICAgICB2b2lk
IGRhdGFiYXNlQ29ubmVjdGlvbkNsb3NlZCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyKTsKIAogICAgIHZvaWQgcG9zdERhdGFiYXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8Q3Jv
c3NUaHJlYWRUYXNrPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24uY3BwCmluZGV4IDVjNDQ3N2YuLmMwZGNmYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZW1vcnlJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJNZW1vcnlPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQlNlcnZlciB7CkBAIC02NywxMCAr
NjgsMzQgQEAgdm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWRkTmV3T2JqZWN0
U3RvcmUoTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFMKICAgICBvYmplY3RTdG9yZS53cml0ZVRy
YW5zYWN0aW9uU3RhcnRlZCgqdGhpcyk7CiB9CiAKK3ZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb246OnJlY29yZFZhbHVlQ2hhbmdlZChNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0U3Rv
cmUsIGNvbnN0IElEQktleURhdGEmIGtleSkKK3sKKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMu
Y29udGFpbnMoJm9iamVjdFN0b3JlKSk7CisKKyAgICBpZiAobV9pc0Fib3J0aW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fb3JpZ2luYWxWYWx1ZXMuYWRkKCZv
YmplY3RTdG9yZSwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gc3RkOjptYWtlX3VuaXF1ZTxLZXlWYWx1
ZU1hcD4oKTsKKworICAgIGF1dG8qIG1hcCA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0
KCk7CisKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLT5hZGQoa2V5LCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlcigpKTsKKyAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gb2JqZWN0U3RvcmUudmFsdWVGb3JLZXkoa2V5KTsKKyAgICB9Cit9CisKIHZvaWQgTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkiKTsKIAorICAgIFRlbXBvcmFy
eUNoYW5nZTxib29sPiBjaGFuZ2UobV9pc0Fib3J0aW5nLCB0cnVlKTsKKwogICAgIGlmIChtX29y
aWdpbmFsRGF0YWJhc2VJbmZvKSB7CiAgICAgICAgIEFTU0VSVChtX2luZm8ubW9kZSgpID09IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKICAgICAgICAgbV9iYWNr
aW5nU3RvcmUuc2V0RGF0YWJhc2VJbmZvKCptX29yaWdpbmFsRGF0YWJhc2VJbmZvKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmgKaW5kZXggYWE4YWE2MC4uMjk1
YmJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmgKQEAg
LTI5LDcgKzI5LDEwIEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUluZm8uaCIKKyNpbmNsdWRlICJJREJLZXlEYXRhLmgiCiAjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25JbmZvLmgiCisjaW5jbHVkZSAiVGhyZWFkU2FmZURhdGFCdWZmZXIuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDYgKzQxLDggQEAgbmFtZXNwYWNlIElEQlNlcnZlciB7
CiBjbGFzcyBNZW1vcnlJREJCYWNraW5nU3RvcmU7CiBjbGFzcyBNZW1vcnlPYmplY3RTdG9yZTsK
IAordHlwZWRlZiBIYXNoTWFwPElEQktleURhdGEsIFRocmVhZFNhZmVEYXRhQnVmZmVyLCBJREJL
ZXlEYXRhSGFzaCwgSURCS2V5RGF0YUhhc2hUcmFpdHM+IEtleVZhbHVlTWFwOworCiBjbGFzcyBN
ZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiB7CiAgICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0
cjxNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbj4gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnlC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbj4oV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNr
aW5nU3RvcmUmLCBjb25zdCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkluZm8mKTsKIHB1YmxpYzoK
QEAgLTUxLDYgKzU2LDcgQEAgcHVibGljOgogICAgIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgb3Jp
Z2luYWxEYXRhYmFzZUluZm8oKSBjb25zdDsKIAogICAgIHZvaWQgYWRkTmV3T2JqZWN0U3RvcmUo
TWVtb3J5T2JqZWN0U3RvcmUmKTsKKyAgICB2b2lkIHJlY29yZFZhbHVlQ2hhbmdlZChNZW1vcnlP
YmplY3RTdG9yZSYsIGNvbnN0IElEQktleURhdGEmKTsKIAogICAgIHZvaWQgYWJvcnQoKTsKICAg
ICB2b2lkIGNvbW1pdCgpOwpAQCAtNjYsMTAgKzcyLDEzIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9vcmlnaW5hbERhdGFiYXNlSW5mbzsKIAogICAg
IGJvb2wgbV9pblByb2dyZXNzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9pc0Fib3J0aW5nIHsgZmFs
c2UgfTsKIAogICAgIEhhc2hTZXQ8TWVtb3J5T2JqZWN0U3RvcmUqPiBtX29iamVjdFN0b3JlczsK
ICAgICBIYXNoU2V0PE1lbW9yeU9iamVjdFN0b3JlKj4gbV92ZXJzaW9uQ2hhbmdlQWRkZWRPYmpl
Y3RTdG9yZXM7CiAKKyAgICBIYXNoTWFwPE1lbW9yeU9iamVjdFN0b3JlKiwgc3RkOjp1bmlxdWVf
cHRyPEtleVZhbHVlTWFwPj4gbV9vcmlnaW5hbFZhbHVlczsKKwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDg1NzJi
ZDMuLmZlMmZhMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0xMzYs
NiArMTM2LDY5IEBAIHZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW1vdmVPYmplY3RTdG9y
ZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTCiAgICAgbV9vYmplY3RTdG9yZXMu
cmVtb3ZlKG9iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCkpOwogfQogCisKK0lEQkVycm9y
IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIGJvb2wmIGtleUV4aXN0cykKK3sKKyAgICBMT0coSW5kZXhl
ZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7CisK
KyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKworICAgIE1lbW9yeU9iamVjdFN0
b3JlKiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKG9iamVjdFN0b3JlKTsKKworICAgIGtleUV4aXN0cyA9
IG9iamVjdFN0b3JlLT5jb250YWluc1JlY29yZChrZXlEYXRhKTsKKyAgICByZXR1cm4gSURCRXJy
b3IoKTsKK30KKworSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQi
KTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworCisgICAgTWVtb3J5T2Jq
ZWN0U3RvcmUqIG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWRl
bnRpZmllcik7CisgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0U3RvcmUpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwor
CisgICAgb2JqZWN0U3RvcmUtPmRlbGV0ZVJlY29yZChrZXlEYXRhKTsKKyAgICByZXR1cm4gSURC
RXJyb3IoKTsKK30KKworSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlKQoreworICAgIExPRyhJbmRleGVkREIsICJN
ZW1vcnlJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCIpOworCisgICAgQVNTRVJUKG9iamVjdFN0
b3JlSWRlbnRpZmllcik7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAg
ICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OlVua25vd24sIFdURjo6QVNDSUlM
aXRlcmFsKCJObyBiYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGZvdW5kIHRvIGdldCByZWNvcmQi
KSk7CisKKyAgICBNZW1vcnlPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jl
cy5nZXQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlKQorICAg
ICAgICByZXR1cm4gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5rbm93biwgV1RGOjpBU0NJ
SUxpdGVyYWwoIk5vIGJhY2tpbmcgc3RvcmUgb2JqZWN0IHN0b3JlIGZvdW5kIHRvIHB1dCByZWNv
cmQiKSk7CisKKyAgICBvYmplY3RTdG9yZS0+cHV0UmVjb3JkKCp0cmFuc2FjdGlvbiwga2V5RGF0
YSwgdmFsdWUpOworICAgIHJldHVybiBJREJFcnJvcigpOworfQorCitJREJFcnJvciBNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBJREJLZXlEYXRhJiBrZXlEYXRhLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkIik7
CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKworICAgIGlmICghbV90cmFu
c2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJu
IElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OlVua25vd24sIFdURjo6QVNDSUlMaXRlcmFsKCJO
byBiYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGZvdW5kIHRvIGdldCByZWNvcmQiKSk7CisKKyAg
ICBNZW1vcnlPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlKQorICAgICAgICByZXR1
cm4gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5rbm93biwgV1RGOjpBU0NJSUxpdGVyYWwo
Ik5vIGJhY2tpbmcgc3RvcmUgb2JqZWN0IHN0b3JlIGZvdW5kIikpOworCisgICAgb3V0VmFsdWUg
PSBvYmplY3RTdG9yZS0+dmFsdWVGb3JLZXkoa2V5RGF0YSk7CisgICAgcmV0dXJuIElEQkVycm9y
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKaW5kZXggMjY5NThmZC4uNDMxODcxNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaApAQCAtNTMsNiArNTMsMTAgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgSURCRXJyb3IgYWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCBJREJFcnJvciBjb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVh
bCBJREJFcnJvciBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJikgb3ZlcnJp
ZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJFcnJvciBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBib29sJiBrZXlFeGlz
dHMpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmKSBvdmVycmlkZSBmaW5h
bDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIHB1dFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVl
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdldFJlY29yZChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgVGhyZWFkU2FmZURhdGFCdWZm
ZXImIG91dFZhbHVlKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3Rv
cmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0U3RvcmUmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0
b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlP
YmplY3RTdG9yZS5jcHAKaW5kZXggZGZhYzc4MC4uMWRkNzE3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0
U3RvcmUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIElEQlNlcnZlciB7
CkBAIC02NCw2ICs2NSw1NiBAQCB2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjp3cml0ZVRyYW5zYWN0
aW9uRmluaXNoZWQoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mCiAgICAgbV93cml0ZVRy
YW5zYWN0aW9uID0gbnVsbHB0cjsKIH0KIAorYm9vbCBNZW1vcnlPYmplY3RTdG9yZTo6Y29udGFp
bnNSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYga2V5KQoreworICAgIGlmICghbV9rZXlWYWx1ZVN0
b3JlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9rZXlWYWx1ZVN0b3Jl
LT5jb250YWlucyhrZXkpOworfQorCit2b2lkIE1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVSZWNv
cmQoY29uc3QgSURCS2V5RGF0YSYga2V5KQoreworICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlP
YmplY3RTdG9yZTo6ZGVsZXRlUmVjb3JkIik7CisKKyAgICBBU1NFUlQobV93cml0ZVRyYW5zYWN0
aW9uKTsKKyAgICBtX3dyaXRlVHJhbnNhY3Rpb24tPnJlY29yZFZhbHVlQ2hhbmdlZCgqdGhpcywg
a2V5KTsKKworICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2tleVZhbHVlU3RvcmUtPnJlbW92ZShrZXkpOworICAgIGlmIChtX29yZGVyZWRLZXlzKQor
ICAgICAgICBtX29yZGVyZWRLZXlzLT5lcmFzZShrZXkpOworfQorCit2b2lkIE1lbW9yeU9iamVj
dFN0b3JlOjpwdXRSZWNvcmQoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZl
ciYgdmFsdWUpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjpwdXRS
ZWNvcmQiKTsKKworICAgIEFTU0VSVChtX3dyaXRlVHJhbnNhY3Rpb24pOworICAgIEFTU0VSVF9V
TlVTRUQodHJhbnNhY3Rpb24sIG1fd3JpdGVUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pOwor
CisgICAgbV93cml0ZVRyYW5zYWN0aW9uLT5yZWNvcmRWYWx1ZUNoYW5nZWQoKnRoaXMsIGtleURh
dGEpOworCisgICAgaWYgKCFtX2tleVZhbHVlU3RvcmUpCisgICAgICAgIG1fa2V5VmFsdWVTdG9y
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8S2V5VmFsdWVNYXA+KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IG1fa2V5VmFsdWVTdG9yZS0+c2V0KGtleURhdGEsIHZhbHVlKTsKKyAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkgJiYgbV9vcmRlcmVkS2V5cykKKyAgICAgICAgbV9vcmRlcmVkS2V5cy0+aW5zZXJ0
KGtleURhdGEpOworfQorCitUaHJlYWRTYWZlRGF0YUJ1ZmZlciBNZW1vcnlPYmplY3RTdG9yZTo6
dmFsdWVGb3JLZXkoY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkgY29uc3QKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiTWVtb3J5T2JqZWN0U3RvcmU6OnZhbHVlRm9yS2V5Iik7CisKKyAgICBpZiAo
IW1fa2V5VmFsdWVTdG9yZSkKKyAgICAgICAgcmV0dXJuIFRocmVhZFNhZmVEYXRhQnVmZmVyKCk7
CisKKyAgICByZXR1cm4gbV9rZXlWYWx1ZVN0b3JlLT5nZXQoa2V5RGF0YSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmpl
Y3RTdG9yZS5oCmluZGV4IDMxZTJlNGQuLjhkYjZiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5o
CkBAIC0yOCwxMyArMjgsMjIgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisj
aW5jbHVkZSAiSURCS2V5RGF0YS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW5mby5oIgor
I2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCisjaW5jbHVkZSA8c2V0PgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5
RGF0YTsKKwogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKIGNsYXNzIE1lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uOwogCit0eXBlZGVmIEhhc2hNYXA8SURCS2V5RGF0YSwgVGhyZWFkU2FmZURh
dGFCdWZmZXIsIElEQktleURhdGFIYXNoLCBJREJLZXlEYXRhSGFzaFRyYWl0cz4gS2V5VmFsdWVN
YXA7CisKIGNsYXNzIE1lbW9yeU9iamVjdFN0b3JlIHsKICAgICBmcmllbmQgc3RkOjp1bmlxdWVf
cHRyPE1lbW9yeU9iamVjdFN0b3JlPiBzdGQ6Om1ha2VfdW5pcXVlPE1lbW9yeU9iamVjdFN0b3Jl
Pihjb25zdCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZUluZm8mKTsKIHB1YmxpYzoKQEAgLTQ1LDYg
KzU0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHdyaXRlVHJhbnNhY3Rpb25TdGFydGVkKE1lbW9y
eUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCB3cml0ZVRyYW5zYWN0aW9uRmlu
aXNoZWQoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mKTsKIAorICAgIGJvb2wgY29udGFp
bnNSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYpOworICAgIHZvaWQgZGVsZXRlUmVjb3JkKGNvbnN0
IElEQktleURhdGEmKTsKKyAgICB2b2lkIHB1dFJlY29yZChNZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbiYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYg
dmFsdWUpOworCisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVGb3JLZXkoY29uc3QgSURC
S2V5RGF0YSYpIGNvbnN0OworCiAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKIHByaXZhdGU6CkBAIC01Myw2ICs2OCw5IEBAIHBy
aXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvIG1faW5mbzsKIAogICAgIE1lbW9yeUJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKiBtX3dyaXRlVHJhbnNhY3Rpb24geyBudWxscHRyIH07CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+IG1fa2V5VmFsdWVTdG9yZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8c3RkOjpzZXQ8SURCS2V5RGF0YT4+IG1fb3JkZXJlZEtleXM7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDU2
MjM2ZDAuLjY4ZmY1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTM5LDYgKzEz
OSwyMCBAQCB1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFjayhFcnJvckNh
bGxiYWNrIGNhbGxiYWNrKQogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCit1aW50NjRfdCBV
bmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFjayhLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2sp
Cit7CisgICAgdWludDY0X3QgaWRlbnRpZmllciA9IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVu
dGlmaWVyKCk7CisgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLnNldChpZGVudGlmaWVyLCBjYWxsYmFj
ayk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFi
YXNlOjpzdG9yZUNhbGxiYWNrKFZhbHVlRGF0YUNhbGxiYWNrIGNhbGxiYWNrKQoreworICAgIHVp
bnQ2NF90IGlkZW50aWZpZXIgPSBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOwor
ICAgIG1fdmFsdWVEYXRhQ2FsbGJhY2tzLnNldChpZGVudGlmaWVyLCBjYWxsYmFjayk7CisgICAg
cmV0dXJuIGlkZW50aWZpZXI7Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0VmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVu
aXF1ZUlEQkRhdGFiYXNlOjpzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiIpOwpAQCAtMjUx
LDYgKzI2NSwxMDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBwZXJmb3JtRXJyb3JD
YWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25z
dCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVE
YXRhLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBL
ZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZCIp
OworCisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJhY2spOwor
ICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVxdWVz
dERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZURhdGEsIG92ZXJ3cml0ZU1vZGUpKTsKK30KKwordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVB1dE9yQWRkIik7CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAg
IEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworCisgICAgSURCS2V5RGF0YSB1c2VkS2V5
OworICAgIElEQkVycm9yIGVycm9yOworCisgICAgYXV0byBvYmplY3RTdG9yZUluZm8gPSBtX2Rh
dGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgeworICAgICAgICBlcnJvciA9IElEQkVy
cm9yKElEQkV4Y2VwdGlvbkNvZGU6OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIk9i
amVjdCBzdG9yZSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGJhY2tpbmcgc3RvcmUiKSk7CisgICAg
ICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYgIWtleURhdGEuaXNWYWxp
ZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIGdlbmVyYXRlZCBrZXkgc3Vw
cG9ydCBnb2VzCisgICAgICAgIGVycm9yID0gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5r
bm93biwgQVNDSUlMaXRlcmFsKCJLZXkgZ2VuZXJhdG9ycyBub3Qgc3VwcG9ydGVkIHlldCIpKTsK
KyAgICAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHVzZWRLZXkgPSBrZXlEYXRhOworCisgICAgaWYgKG92ZXJ3cml0ZU1vZGUgPT0gSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlKSB7CisgICAgICAg
IGJvb2wga2V5RXhpc3RzOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlz
dHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1c2VkS2V5LCBrZXlFeGlzdHMpOworICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYg
a2V5RXhpc3RzKQorICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJREJFeGNlcHRpb25Db2Rl
OjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRo
ZSBvYmplY3Qgc3RvcmUiKSk7CisKKyAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgeworICAg
ICAgICAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBTdG9yYWdlIE9wZXJh
dGlvbgorICAgIC8vIC4uLklmIGEgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGluIHN0b3JlIC4uLgor
ICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBzdG9yZSB1c2luZyB0aGUgc3RlcHMg
Zm9yIGRlbGV0aW5nIHJlY29yZHMgZnJvbSBhbiBvYmplY3Qgc3RvcmUuLi4KKyAgICAvLyBUaGlz
IGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0aW5nIGl0IGZyb20gZnJvbSB0aGUg
b2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRoZSBhcHByb3ByaWF0ZSBpbmRleGVz
LgorICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgdXNlZEtleSk7CisgICAgaWYgKCFlcnJv
ci5pc051bGwoKSkgeworICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Q
dXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cHV0UmVjb3JkKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2VkS2V5LCB2YWx1
ZURhdGEpOworCisgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKK30KKwordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiByZXN1bHRLZXkpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKG1haW4p
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQiKTsKKworICAgIHBlcmZvcm1L
ZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKK30K
Kwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgVmFsdWVEYXRhQ2FsbGJh
Y2sgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5k
ZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKKworICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICBtX3NlcnZl
ci5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFu
c2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCks
IGtleURhdGEpKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29y
ZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRSZWNvcmQiKTsKKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CisKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZURh
dGE7CisgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlEYXRhLCB2YWx1ZURh
dGEpOworCisgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB2YWx1ZURhdGEpKTsKK30KKwordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHJl
c3VsdERhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhl
ZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkIik7CisK
KyAgICBwZXJmb3JtVmFsdWVEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
cmVzdWx0RGF0YSk7Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0
aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0zODAsNiAr
NDk2LDIwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBjYWxsYmFjayhlcnJvcik7CiB9
CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktl
eURhdGEmIHJlc3VsdEtleSkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9rZXlEYXRhQ2FsbGJh
Y2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoY2FsbGJhY2spOworICAg
IGNhbGxiYWNrKGVycm9yLCByZXN1bHRLZXkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtVmFsdWVEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiByZXN1bHRE
YXRhKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3ZhbHVlRGF0YUNhbGxiYWNrcy50YWtlKGNh
bGxiYWNrSWRlbnRpZmllcik7CisgICAgQVNTRVJUKGNhbGxiYWNrKTsKKyAgICBjYWxsYmFjayhl
cnJvciwgcmVzdWx0RGF0YSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDc5MGRiMWUuLjJi
MzkwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJbmZvLmgi
CiAjaW5jbHVkZSAiSURCU2VydmVyT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVGhyZWFkU2FmZURh
dGFCdWZmZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24u
aCIKQEAgLTUyLDYgKzUzLDggQEAgY2xhc3MgSURCQ29ubmVjdGlvblRvQ2xpZW50OwogY2xhc3Mg
SURCU2VydmVyOwogCiB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBJREJFcnJvciYp
PiBFcnJvckNhbGxiYWNrOwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgSURCRXJy
b3ImLCBjb25zdCBJREJLZXlEYXRhJik+IEtleURhdGFDYWxsYmFjazsKK3R5cGVkZWYgc3RkOjpm
dW5jdGlvbjx2b2lkKGNvbnN0IElEQkVycm9yJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXIm
KT4gVmFsdWVEYXRhQ2FsbGJhY2s7CiAKIGNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFVuaXF1ZUlEQkRhdGFiYXNlPiB7CiBwdWJsaWM6CkBAIC02
Niw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICBJREJTZXJ2ZXImIHNlcnZlcigpIHsgcmV0dXJuIG1f
c2VydmVyOyB9CiAKICAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBFcnJvckNhbGxiYWNrKTsK
KyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0
YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOworICAgIHZvaWQgZ2V0UmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIFZhbHVlRGF0YUNh
bGxiYWNrKTsKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKICAgICB2b2lkIGFib3J0VHJhbnNhY3Rpb24oVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgdHJh
bnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYpOwpAQCAtODEs
MjIgKzg2LDMwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbigpOwogICAgIHZvaWQgbm90aWZ5Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFuZ2UoKTsKIAot
ICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2soRXJyb3JDYWxsYmFjayk7Ci0gICAgCiAgICAgLy8g
RGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNh
Y3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFu
c2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rp
b25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKICAgICB2b2lkIHBl
cmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURh
dGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRleGVkREI6Ok9i
amVjdFN0b3JlT3ZlcndyaXRlTW9kZSk7CisgICAgdm9pZCBwZXJmb3JtR2V0UmVjb3JkKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
SURCS2V5RGF0YSYpOwogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBk
aWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYpOwogICAgIHZvaWQgZGlk
UGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICB2b2lkIGRpZFBl
cmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9y
JiwgY29uc3QgSURCS2V5RGF0YSYpOworICAgIHZvaWQgZGlkUGVyZm9ybUdldFJlY29yZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgVGhyZWFkU2Fm
ZURhdGFCdWZmZXImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAgICAgdm9pZCBkaWRQ
ZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIpOwogCisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFjayhFcnJvckNhbGxiYWNrKTsKKyAg
ICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrKEtleURhdGFDYWxsYmFjayk7CisgICAgdWludDY0X3Qg
c3RvcmVDYWxsYmFjayhWYWx1ZURhdGFDYWxsYmFjayk7CisKICAgICB2b2lkIHBlcmZvcm1FcnJv
ckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsK
KyAgICB2b2lkIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQktleURhdGEmKTsKKyAgICB2b2lkIHBlcmZv
cm1WYWx1ZURhdGFDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QkVycm9yJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImKTsKIAogICAgIHZvaWQgaW52b2tl
VHJhbnNhY3Rpb25TY2hlZHVsZXIoKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uU2NoZWR1bGluZ1Rp
bWVyRmlyZWQoKTsKQEAgLTExNyw2ICsxMzAsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IG1fZGF0YWJhc2VJbmZvOwogCiAgICAgSGFzaE1hcDx1aW50
NjRfdCwgRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrczsKKyAgICBIYXNoTWFwPHVpbnQ2
NF90LCBLZXlEYXRhQ2FsbGJhY2s+IG1fa2V5RGF0YUNhbGxiYWNrczsKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBWYWx1ZURhdGFDYWxsYmFjaz4gbV92YWx1ZURhdGFDYWxsYmFja3M7CiAKICAgICBU
aW1lciBtX3RyYW5zYWN0aW9uU2NoZWR1bGluZ1RpbWVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCA4OWMyYTZjLi5jYmY2YTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCkBAIC04MCw2ICs4
MCwxMSBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmlzVmVyc2lvbkNoYW5n
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25JbmZvLm1vZGUoKSA9PSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZTsKIH0KIAorYm9vbCBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
cmFuc2FjdGlvbkluZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFk
T25seTsKK30gICAKKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQo
KQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpj
b21taXQiKTsKQEAgLTEwOCw2ICsxMTMsNDEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAg
ICB9KTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURh
dGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCit7CisgICAgTE9HKEluZGV4ZWRE
QiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIik7CisKKyAgICBBU1NF
UlQoIWlzUmVhZE9ubHkoKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZp
ZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CisKKyAgICBSZWZQ
dHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gc2VsZih0aGlzKTsKKyAgICBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwg
dmFsdWVEYXRhLCBvdmVyd3JpdGVNb2RlLCBbdGhpcywgc2VsZiwgcmVxdWVzdERhdGFdKGNvbnN0
IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7CisgICAgICAgIExPRyhJ
bmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCAoY2FsbGJh
Y2spIik7CisKKyAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmNvbm5lY3Rpb25Ub0NsaWVudCgpLmRpZFB1dE9yQWRkKElEQlJlc3Vs
dERhdGE6OnB1dE9yQWRkU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpLCBr
ZXkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmNv
bm5lY3Rpb25Ub0NsaWVudCgpLmRpZFB1dE9yQWRkKElEQlJlc3VsdERhdGE6OmVycm9yKHJlcXVl
c3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIGVycm9yKSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIik7CisK
KyAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRh
LnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKworICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uPiBzZWxmKHRoaXMpOworICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRh
YmFzZSgpLmdldFJlY29yZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgW3RoaXMsIHNlbGYsIHJlcXVl
c3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVy
JiB2YWx1ZURhdGEpIHsKKyAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmdldFJlY29yZCAoY2FsbGJhY2spIik7CisKKyAgICAgICAgaWYgKGVycm9y
LmlzTnVsbCgpKQorICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmNvbm5lY3Rpb25U
b0NsaWVudCgpLmRpZEdldFJlY29yZChJREJSZXN1bHREYXRhOjpnZXRSZWNvcmRTdWNjZXNzKHJl
cXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIHZhbHVlRGF0YSkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCku
ZGlkR2V0UmVjb3JkKElEQlJlc3VsdERhdGE6OmVycm9yKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVu
dGlmaWVyKCksIGVycm9yKSk7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZl
cgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24uaAppbmRleCAxZjMzODNkLi5hOGU2NDNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmgKQEAgLTM2LDggKzM2LDEwIEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIElEQkRhdGFiYXNlSW5mbzsKK2NsYXNzIElEQktleURhdGE7CiBj
bGFzcyBJREJPYmplY3RTdG9yZUluZm87CiBjbGFzcyBJREJSZXF1ZXN0RGF0YTsKK2NsYXNzIFRo
cmVhZFNhZmVEYXRhQnVmZmVyOwogCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIApAQCAtNTIsNiAr
NTQsNyBAQCBwdWJsaWM6CiAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiBkYXRhYmFz
ZUNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2RhdGFiYXNlQ29ubmVjdGlvbi5nZXQoKTsgfQogICAg
IGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNh
Y3Rpb25JbmZvOyB9CiAgICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdDsKKyAgICBib29s
IGlzUmVhZE9ubHkoKSBjb25zdDsKIAogICAgIElEQkRhdGFiYXNlSW5mbyogb3JpZ2luYWxEYXRh
YmFzZUluZm8oKSBjb25zdDsKIApAQCAtNTksNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21taXQoKTsKIAogICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERh
dGEmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0
IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRh
QnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsK
KyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURh
dGEmKTsKIAogcHJpdmF0ZToKICAgICBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKFVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIElEQlRyYW5zYWN0aW9uSW5mbyYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5m
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJh
c2VJbmZvLmNwcAppbmRleCA2Mzg4MTdlLi41ZGRiMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNw
cApAQCAtNzcsNiArNzcsMTUgQEAgdm9pZCBJREJEYXRhYmFzZUluZm86OmFkZEV4aXN0aW5nT2Jq
ZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQogICAgIG1fb2JqZWN0U3Rv
cmVNYXAuc2V0KGluZm8uaWRlbnRpZmllcigpLCBpbmZvKTsKIH0KIAorY29uc3QgSURCT2JqZWN0
U3RvcmVJbmZvKiBJREJEYXRhYmFzZUluZm86OmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgY29uc3QKK3sKKyAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgaWYg
KGl0ZXJhdG9yID09IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKIFZlY3RvcjxTdHJpbmc+
IElEQkRhdGFiYXNlSW5mbzo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgVmVjdG9y
PFN0cmluZz4gbmFtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKaW5kZXggNDBmNTM5NC4uMGRmOWUxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRh
dGFiYXNlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJEYXRhYmFzZUluZm8uaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIElEQk9iamVjdFN0
b3JlSW5mbyBjcmVhdGVOZXdPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwogICAgIHZvaWQgYWRkRXhpc3RpbmdPYmpl
Y3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICBjb25zdCBJREJPYmplY3RT
dG9yZUluZm8qIGluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllcikgY29uc3Q7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZU5hbWVz
KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJFcnJvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRXJyb3IuY3BwCmluZGV4IDIyODhjZTguLjQ1MmE0NzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcApAQCAt
NTEsNiArNTEsMjIgQEAgc3RhdGljIGNvbnN0IFN0cmluZyYgaWRiRXJyb3JOYW1lKElEQkV4Y2Vw
dGlvbkNvZGUgY29kZSkKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50
cnkgPSBBU0NJSUxpdGVyYWwoIkludmFsaWRTdGF0ZUVycm9yIik7CiAgICAgICAgIHJldHVybiBl
bnRyeTsKICAgICB9CisgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3I6IHsKKyAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwo
IkRhdGFFcnJvciIpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICAgIGNhc2UgSURC
RXhjZXB0aW9uQ29kZTo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOiB7CisgICAgICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3IiKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICBjYXNl
IElEQkV4Y2VwdGlvbkNvZGU6OlJlYWRPbmx5RXJyb3I6IHsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIlJlYWRPbmx5RXJyb3IiKTsK
KyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICBjYXNlIElEQkV4Y2VwdGlvbkNvZGU6
OkRhdGFDbG9uZUVycm9yOiB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJEYXRhQ2xvbmVFcnJvciIpOworICAgICAgICByZXR1cm4g
ZW50cnk7CisgICAgfQogICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6Tm9uZToKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC03Nyw2ICs5MywyMiBAQCBz
dGF0aWMgY29uc3QgU3RyaW5nJiBpZGJFcnJvckRlc2NyaXB0aW9uKElEQkV4Y2VwdGlvbkNvZGUg
Y29kZSkKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJ
SUxpdGVyYWwoIk9wZXJhdGlvbiB3YXMgY2FsbGVkIG9uIGFuIG9iamVjdCBvbiB3aGljaCBpdCBp
cyBub3QgYWxsb3dlZCBvciBhdCBhIHRpbWUgd2hlbiBpdCBpcyBub3QgYWxsb3dlZC4iKTsKICAg
ICAgICAgcmV0dXJuIGVudHJ5OwogICAgIH0KKyAgICBjYXNlIElEQkV4Y2VwdGlvbkNvZGU6OkRh
dGFFcnJvcjogeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9
IEFTQ0lJTGl0ZXJhbCgiRGF0YSBwcm92aWRlZCB0byBhbiBvcGVyYXRpb24gZG9lcyBub3QgbWVl
dCByZXF1aXJlbWVudHMuIik7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisgICAgY2Fz
ZSBJREJFeGNlcHRpb25Db2RlOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIlJlcXVl
c3Qgd2FzIHBsYWNlZCBhZ2FpbnN0IGEgdHJhbnNhY3Rpb24gd2hpY2ggaXMgY3VycmVudGx5IG5v
dCBhY3RpdmUsIG9yIHdoaWNoIGlzIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gZW50cnk7
CisgICAgfQorICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6UmVhZE9ubHlFcnJvcjogeworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgi
QSBtdXRhdGluZyBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBpbiBhIFwicmVhZG9ubHlcIiB0cmFu
c2FjdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICBjYXNlIElEQkV4
Y2VwdGlvbkNvZGU6OkRhdGFDbG9uZUVycm9yOiB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJEYXRhIGJlaW5nIHN0b3JlZCBjb3Vs
ZCBub3QgYmUgY2xvbmVkIGJ5IHRoZSBzdHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3JpdGhtLiIpOwor
ICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQogICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6
Tm9uZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCmlu
ZGV4IGI5MTk2MzYuLjJlNzRmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCkBAIC0zNiwxMCArMzYsMTQgQEAgZW51bSBjbGFz
cyBJREJFeGNlcHRpb25Db2RlIHsKICAgICBOb25lID0gMCwKICAgICBVbmtub3duLAogICAgIENv
bnN0cmFpbnRFcnJvciwKKyAgICBEYXRhRXJyb3IsCisgICAgVHJhbnNhY3Rpb25JbmFjdGl2ZUVy
cm9yLAorICAgIFJlYWRPbmx5RXJyb3IsCiAgICAgVmVyc2lvbkVycm9yLAogCiAgICAgLy8gSW5k
ZXhlZCBEQiBleGlzdGluZyBleGNlcHRpb24gY29kZXMgd2l0aCBJREItc3BlY2lmaWMgZXJyb3Ig
bWVzc2FnZXM6CiAgICAgSW52YWxpZFN0YXRlRXJyb3IsCisgICAgRGF0YUNsb25lRXJyb3IsCiB9
OwogCiBjbGFzcyBJREJFcnJvciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcAppbmRleCA5MzI1MmNiLi41
YTNkOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCUmVxdWVzdERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAKQEAgLTM0LDIwICszNCwyNSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoY29uc3QgSURC
Q2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0IElEQkNsaWVu
dDo6SURCT3BlbkRCUmVxdWVzdCYgcmVxdWVzdCkKLSAgICA6IG1fcmVxdWVzdElkZW50aWZpZXIo
c3RkOjptYWtlX3VuaXF1ZTxJREJSZXNvdXJjZUlkZW50aWZpZXI+KGNvbm5lY3Rpb24sIHJlcXVl
c3QpKQorICAgIDogbV9zZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcihjb25uZWN0aW9uLmlkZW50
aWZpZXIoKSkKKyAgICAsIG1fcmVxdWVzdElkZW50aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxJREJS
ZXNvdXJjZUlkZW50aWZpZXI+KGNvbm5lY3Rpb24sIHJlcXVlc3QpKQogICAgICwgbV9kYXRhYmFz
ZUlkZW50aWZpZXIocmVxdWVzdC5kYXRhYmFzZUlkZW50aWZpZXIoKSkKICAgICAsIG1fcmVxdWVz
dGVkVmVyc2lvbihyZXF1ZXN0LnZlcnNpb24oKSkKIHsKIH0KIAogSURCUmVxdWVzdERhdGE6OklE
QlJlcXVlc3REYXRhKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbikK
LSAgICA6IG1fcmVxdWVzdElkZW50aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxJREJSZXNvdXJjZUlk
ZW50aWZpZXI+KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKQorICAgIDogbV9zZXJ2ZXJDb25uZWN0
aW9uSWRlbnRpZmllcihvcGVyYXRpb24udHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLnNlcnZlckNv
bm5lY3Rpb24oKS5pZGVudGlmaWVyKCkpCisgICAgLCBtX3JlcXVlc3RJZGVudGlmaWVyKHN0ZDo6
bWFrZV91bmlxdWU8SURCUmVzb3VyY2VJZGVudGlmaWVyPihvcGVyYXRpb24uaWRlbnRpZmllcigp
KSkKICAgICAsIG1fdHJhbnNhY3Rpb25JZGVudGlmaWVyKHN0ZDo6bWFrZV91bmlxdWU8SURCUmVz
b3VyY2VJZGVudGlmaWVyPihvcGVyYXRpb24udHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpKQorICAg
ICwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIob3BlcmF0aW9uLm9iamVjdFN0b3JlSWRlbnRpZmll
cigpKQogewogfQogCiBJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoY29uc3QgSURCUmVx
dWVzdERhdGEmIG90aGVyKQotICAgIDogbV9kYXRhYmFzZUlkZW50aWZpZXIob3RoZXIubV9kYXRh
YmFzZUlkZW50aWZpZXIpCisgICAgOiBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKG90aGVy
Lm1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpCisgICAgLCBtX29iamVjdFN0b3JlSWRlbnRp
ZmllcihvdGhlci5tX29iamVjdFN0b3JlSWRlbnRpZmllcikKKyAgICAsIG1fZGF0YWJhc2VJZGVu
dGlmaWVyKG90aGVyLm1fZGF0YWJhc2VJZGVudGlmaWVyKQogICAgICwgbV9yZXF1ZXN0ZWRWZXJz
aW9uKG90aGVyLm1fcmVxdWVzdGVkVmVyc2lvbikKIHsKICAgICBpZiAob3RoZXIubV9yZXF1ZXN0
SWRlbnRpZmllcikKQEAgLTU2LDYgKzYxLDEyIEBAIElEQlJlcXVlc3REYXRhOjpJREJSZXF1ZXN0
RGF0YShjb25zdCBJREJSZXF1ZXN0RGF0YSYgb3RoZXIpCiAgICAgICAgIG1fdHJhbnNhY3Rpb25J
ZGVudGlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxJREJSZXNvdXJjZUlkZW50aWZpZXI+KCpvdGhl
ci5tX3RyYW5zYWN0aW9uSWRlbnRpZmllcik7CiB9CiAKK3VpbnQ2NF90IElEQlJlcXVlc3REYXRh
OjpzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2Vy
dmVyQ29ubmVjdGlvbklkZW50aWZpZXIpOworICAgIHJldHVybiBtX3NlcnZlckNvbm5lY3Rpb25J
ZGVudGlmaWVyOworfQorCiBJREJSZXNvdXJjZUlkZW50aWZpZXIgSURCUmVxdWVzdERhdGE6OnJl
cXVlc3RJZGVudGlmaWVyKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX3JlcXVlc3RJ
ZGVudGlmaWVyKTsKQEAgLTY4LDYgKzc5LDEyIEBAIElEQlJlc291cmNlSWRlbnRpZmllciBJREJS
ZXF1ZXN0RGF0YTo6dHJhbnNhY3Rpb25JZGVudGlmaWVyKCkgY29uc3QKICAgICByZXR1cm4gKm1f
dHJhbnNhY3Rpb25JZGVudGlmaWVyOwogfQogCit1aW50NjRfdCBJREJSZXF1ZXN0RGF0YTo6b2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX29iamVj
dFN0b3JlSWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyOwor
fQorCiB1aW50NjRfdCBJREJSZXF1ZXN0RGF0YTo6cmVxdWVzdGVkVmVyc2lvbigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fcmVxdWVzdGVkVmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKaW5kZXggNDE2
ZmQ1ZC4uYjhiNGEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKQEAgLTQ2LDggKzQ2LDEwIEBAIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBJREJSZXF1ZXN0RGF0YShJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3Bl
cmF0aW9uJik7CiAgICAgSURCUmVxdWVzdERhdGEoY29uc3QgSURCUmVxdWVzdERhdGEmKTsKIAor
ICAgIHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgSURC
UmVzb3VyY2VJZGVudGlmaWVyIHJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgSURCUmVz
b3VyY2VJZGVudGlmaWVyIHRyYW5zYWN0aW9uSWRlbnRpZmllcigpIGNvbnN0OworICAgIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcigpIGNvbnN0OwogCiAgICAgY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGFi
YXNlSWRlbnRpZmllcjsgfQogICAgIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24oKSBjb25zdDsK
QEAgLTU1LDggKzU3LDEwIEBAIHB1YmxpYzoKICAgICBJREJSZXF1ZXN0RGF0YSBpc29sYXRlZENv
cHkoKTsKIAogcHJpdmF0ZToKKyAgICB1aW50NjRfdCBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlm
aWVyIHsgMCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1f
cmVxdWVzdElkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlJlc291cmNlSWRlbnRp
Zmllcj4gbV90cmFuc2FjdGlvbklkZW50aWZpZXI7CisgICAgdWludDY0X3QgbV9vYmplY3RTdG9y
ZUlkZW50aWZpZXIgeyAwIH07CiAKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9kYXRhYmFz
ZUlkZW50aWZpZXI7CiAgICAgdWludDY0X3QgbV9yZXF1ZXN0ZWRWZXJzaW9uIHsgMCB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3Vs
dERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJl
c3VsdERhdGEuY3BwCmluZGV4IDY1MDcxZDguLjhkY2I3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAK
QEAgLTUwLDExICs1MCwxNCBAQCBJREJSZXN1bHREYXRhOjpJREJSZXN1bHREYXRhKGNvbnN0IElE
QlJlc3VsdERhdGEmIG90aGVyKQogICAgICwgbV9yZXF1ZXN0SWRlbnRpZmllcihvdGhlci5tX3Jl
cXVlc3RJZGVudGlmaWVyKQogICAgICwgbV9lcnJvcihvdGhlci5tX2Vycm9yKQogICAgICwgbV9k
YXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKG90aGVyLm1fZGF0YWJhc2VDb25uZWN0aW9uSWRl
bnRpZmllcikKKyAgICAsIG1fcmVzdWx0RGF0YShvdGhlci5tX3Jlc3VsdERhdGEpCiB7CiAgICAg
aWYgKG90aGVyLm1fZGF0YWJhc2VJbmZvKQogICAgICAgICBtX2RhdGFiYXNlSW5mbyA9IHN0ZDo6
bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPigqb3RoZXIubV9kYXRhYmFzZUluZm8pOwogICAg
IGlmIChvdGhlci5tX3RyYW5zYWN0aW9uSW5mbykKICAgICAgICAgbV90cmFuc2FjdGlvbkluZm8g
PSBzdGQ6Om1ha2VfdW5pcXVlPElEQlRyYW5zYWN0aW9uSW5mbz4oKm90aGVyLm1fdHJhbnNhY3Rp
b25JbmZvKTsKKyAgICBpZiAob3RoZXIubV9yZXN1bHRLZXkpCisgICAgICAgIG1fcmVzdWx0S2V5
ID0gc3RkOjptYWtlX3VuaXF1ZTxJREJLZXlEYXRhPigqb3RoZXIubV9yZXN1bHRLZXkpOwogfQog
CiBJREJSZXN1bHREYXRhIElEQlJlc3VsdERhdGE6OmVycm9yKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKQEAgLTkw
LDYgKzkzLDIwIEBAIElEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6Y3JlYXRlT2JqZWN0U3Rv
cmVTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllCiAgICAgcmV0dXJuIHsgSURCUmVz
dWx0VHlwZTo6Q3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzLCByZXF1ZXN0SWRlbnRpZmllciB9Owog
fQogCitJREJSZXN1bHREYXRhIElEQlJlc3VsdERhdGE6OnB1dE9yQWRkU3VjY2Vzcyhjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRh
JiByZXN1bHRLZXkpCit7CisgICAgSURCUmVzdWx0RGF0YSByZXN1bHQoSURCUmVzdWx0VHlwZTo6
UHV0T3JBZGRTdWNjZXNzLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgcmVzdWx0Lm1fcmVzdWx0
S2V5ID0gc3RkOjptYWtlX3VuaXF1ZTxJREJLZXlEYXRhPihyZXN1bHRLZXkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK0lEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6Z2V0UmVjb3JkU3Vj
Y2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCBjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQoreworICAgIElEQlJlc3VsdERhdGEg
cmVzdWx0KElEQlJlc3VsdFR5cGU6OkdldFJlY29yZFN1Y2Nlc3MsIHJlcXVlc3RJZGVudGlmaWVy
KTsKKyAgICByZXN1bHQubV9yZXN1bHREYXRhID0gdmFsdWVEYXRhOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgSURCUmVzdWx0RGF0YTo6ZGF0YWJhc2VJ
bmZvKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RhdGFiYXNlSW5mbyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3Vs
dERhdGEuaAppbmRleCAyYWU3MWQzLi44ZjI5M2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmgKQEAgLTMwLDMx
ICszMCwzOCBAQAogCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJbmZvLmgiCiAjaW5jbHVkZSAiSURC
RXJyb3IuaCIKKyNpbmNsdWRlICJJREJLZXlEYXRhLmgiCiAjaW5jbHVkZSAiSURCUmVzb3VyY2VJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbmZvLmgiCisjaW5jbHVkZSAi
VGhyZWFkU2FmZURhdGFCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJ
REJSZXNvdXJjZUlkZW50aWZpZXI7Ci0KLW5hbWVzcGFjZSBJREJTZXJ2ZXIgewotY2xhc3MgVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOwotY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjsKLX0KK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBlbnVtIGNsYXNzIElEQlJl
c3VsdFR5cGUgewogICAgIEVycm9yLAogICAgIE9wZW5EYXRhYmFzZVN1Y2Nlc3MsCiAgICAgT3Bl
bkRhdGFiYXNlVXBncmFkZU5lZWRlZCwKICAgICBDcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MsCisg
ICAgUHV0T3JBZGRTdWNjZXNzLAorICAgIEdldFJlY29yZFN1Y2Nlc3MsCiB9OwogCituYW1lc3Bh
Y2UgSURCU2VydmVyIHsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjsKK2NsYXNz
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb247Cit9CisKIGNsYXNzIElEQlJlc3VsdERhdGEg
ewogcHVibGljOgogICAgIHN0YXRpYyBJREJSZXN1bHREYXRhIGVycm9yKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQkVycm9yJik7CiAgICAgc3RhdGljIElEQlJlc3VsdERh
dGEgb3BlbkRhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCBJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOwogICAgIHN0YXRpYyBJREJSZXN1
bHREYXRhIG9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiwgSURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CiAgICAgc3Rh
dGljIElEQlJlc3VsdERhdGEgY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYpOworICAgIHN0YXRpYyBJREJSZXN1bHREYXRhIHB1dE9yQWRkU3VjY2Vz
cyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCBjb25zdCBJREJLZXlEYXRhJik7CisgICAg
c3RhdGljIElEQlJlc3VsdERhdGEgZ2V0UmVjb3JkU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKTsKIAogICAg
IElEQlJlc3VsdERhdGEoY29uc3QgSURCUmVzdWx0RGF0YSYpOwogCkBAIC02Nyw2ICs3NCw5IEBA
IHB1YmxpYzoKICAgICBjb25zdCBJREJEYXRhYmFzZUluZm8mIGRhdGFiYXNlSW5mbygpIGNvbnN0
OwogICAgIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgdHJhbnNhY3Rpb25JbmZvKCkgY29uc3Q7
CiAKKyAgICBjb25zdCBJREJLZXlEYXRhKiByZXN1bHRLZXkoKSBjb25zdCB7IHJldHVybiBtX3Jl
c3VsdEtleS5nZXQoKTsgfQorICAgIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiByZXN1bHRE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHREYXRhOyB9CisKIHByaXZhdGU6CiAgICAgSURC
UmVzdWx0RGF0YShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKTsKICAgICBJREJSZXN1bHRE
YXRhKElEQlJlc3VsdFR5cGUsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwpAQCAtNzgs
NiArODgsOCBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fZGF0YWJhc2VDb25uZWN0aW9uSWRl
bnRpZmllciB7IDAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBtX2Rh
dGFiYXNlSW5mbzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCVHJhbnNhY3Rpb25JbmZvPiBtX3Ry
YW5zYWN0aW9uSW5mbzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YT4gbV9yZXN1bHRL
ZXk7CisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgbV9yZXN1bHREYXRhOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCBiYTNiNjBj
Li44YjYwNmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCQ29u
bmVjdGlvblRvU2VydmVyLmgiCisjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgogI2luY2x1ZGUgIklE
Qk9wZW5EQlJlcXVlc3RJbXBsLmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdERhdGEuaCIKICNpbmNs
dWRlICJJREJSZXN1bHREYXRhLmgiCkBAIC0xMjYsNiArMTI3LDIyIEBAIHZvaWQgSW5Qcm9jZXNz
SURCU2VydmVyOjpkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJiByZXN1
bHREYXRhKQogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6ZGlkUHV0T3JB
ZGQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBSZWZQdHI8SW5Qcm9j
ZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRj
aChbdGhpcywgc2VsZiwgcmVzdWx0RGF0YV0geworICAgICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZl
ci0+ZGlkUHV0T3JBZGQocmVzdWx0RGF0YSk7CisgICAgfSk7Cit9CisKK3ZvaWQgSW5Qcm9jZXNz
SURCU2VydmVyOjpkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkK
K3sKKyAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIFJ1bkxv
b3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVzdWx0RGF0YV0geworICAgICAg
ICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+ZGlkR2V0UmVjb3JkKHJlc3VsdERhdGEpOworICAgIH0p
OworfQorCiB2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6YWJvcnRUcmFuc2FjdGlvbihJREJSZXNv
dXJjZUlkZW50aWZpZXImIHJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBSZWZQdHI8SW5Qcm9j
ZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOwpAQCAtMTUwLDYgKzE2NywyNyBAQCB2b2lkIEluUHJv
Y2Vzc0lEQlNlcnZlcjo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
c3VsdERhdGEsIGNvbgogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6cHV0
T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBJREJLZXkqIGtleSwgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2Vy
dmVyPiBzZWxmKHRoaXMpOworICAgIElEQktleURhdGEga2V5RGF0YShrZXkpOworICAgIGF1dG8g
dmFsdWVEYXRhID0gVGhyZWFkU2FmZURhdGFCdWZmZXI6OmNvcHlWZWN0b3IodmFsdWUuZGF0YSgp
KTsKKworICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVxdWVz
dERhdGEsIGtleURhdGEsIHZhbHVlRGF0YSwgb3ZlcndyaXRlTW9kZV0geworICAgICAgICBtX3Nl
cnZlci0+cHV0T3JBZGQocmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlRGF0YSwgb3ZlcndyaXRl
TW9kZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpnZXRSZWNvcmQo
Y29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBJREJLZXkqIGtleSkKK3sKKyAgICBS
ZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIElEQktleURhdGEga2V5
RGF0YShrZXkpOworCisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxm
LCByZXF1ZXN0RGF0YSwga2V5RGF0YV0geworICAgICAgICBtX3NlcnZlci0+Z2V0UmVjb3JkKHJl
cXVlc3REYXRhLCBrZXlEYXRhKTsKKyAgICB9KTsKK30KKwogdm9pZCBJblByb2Nlc3NJREJTZXJ2
ZXI6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoSURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCiB7CiAgICAg
UmVmUHRyPEluUHJvY2Vzc0lEQlNlcnZlcj4gc2VsZih0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2
ZXIuaAppbmRleCA4NzM2NTU3Li5lZmMzMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBA
IC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnRUcmFuc2FjdGlv
bihJREJSZXNvdXJjZUlkZW50aWZpZXImKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0VHJhbnNhY3Rpb24oSURCUmVzb3VyY2VJZGVudGlmaWVyJikgb3ZlcnJpZGUgZmlu
YWw7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmly
dHVhbCB2b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURCS2V5KiwgU2VyaWFs
aXplZFNjcmlwdFZhbHVlJiwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGUpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBnZXRSZWNvcmQoY29uc3QgSURC
UmVxdWVzdERhdGEmLCBJREJLZXkqKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQg
ZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2VkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50
aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8gSURCQ29ubmVjdGlvblRvQ2xpZW50CkBA
IC02OCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWJvcnRUcmFuc2Fj
dGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
bWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKSBvdmVycmlkZSBm
aW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHV0T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYp
IG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRSZWNvcmQoY29uc3QgSURC
UmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBmaXJlVmVyc2lv
bkNoYW5nZUV2ZW50KElEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiwgdWlu
dDY0X3QgcmVxdWVzdGVkVmVyc2lvbikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2aXJ0dWFsIHZv
aWQgcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OnJlZigp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggOTAwYjE1NC4uYzExYzU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE4MSw2ICsyMTgxLDggQEAKIAkJNTFE
MEM1MTYwREFBOTBCNzAwM0IzODMxIC8qIEpTU3RvcmFnZUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQwQzUxNTBEQUE5MEI3MDAzQjM4
MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTFENzIzNkMxQkI2MTc0OTAwNDc4
Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFENzIzNkExQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEu
Y3BwICovOyB9OwogCQk1MUQ3MjM2RDFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzIzNkIx
QkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuaCAqLzsgfTsKKwkJNTFEN0VGRUExQkRF
OEY4QzAwRTkzRTEwIC8qIFRocmVhZFNhZmVEYXRhQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGQUVBOTFCREM5ODlBMDBCNEFGRTQgLyog
VGhyZWFkU2FmZURhdGFCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk1MUQ3RUZFQzFCREVGQTUxMDBFOTNFMTAgLyogVHJhbnNhY3Rpb25P
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFEN0VGRUIxQkRFRkE0NzAwRTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCAq
LzsgfTsKIAkJNTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlz
dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MURDRTgwMTBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9t
LmNwcCAqLzsgfTsKIAkJNTFERjZEN0UwQjkyQTE2RDAwQzJEQzg1IC8qIFRocmVhZENoZWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MURGNkQ3RDBC
OTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MURGNkQ4MDBCOTJBMThFMDBDMkRDODUgLyogVGhy
ZWFkQ2hlY2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MURGNkQ3RjBCOTJBMThFMDBDMkRDODUgLyogVGhyZWFkQ2hlY2subW0gKi87IH07CkBAIC05
MzQ1LDYgKzkzNDcsNyBAQAogCQk1MTFFRjJDQzE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJBbnlD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJBbnlD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFFRjJDRDE3RjBGREYx
MDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTExRUYyQ0UxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURCT2JqZWN0U3Rv
cmVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJP
YmplY3RTdG9yZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMUZB
RUE5MUJEQzk4OUEwMEI0QUZFNCAvKiBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTIzQUYxNjE4OTBBNENBMDAzMUNEQzkgLyogSURCS2V5UmFu
Z2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQktleVJh
bmdlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjNBRjE3MTg5MEE0
Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSURCS2V5UmFuZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxMjNBRjFDMTg5MThBRTQwMDMxQ0RDOSAvKiBJREJHZXRSZXN1bHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCR2V0UmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC05NTkyLDYgKzk1OTUsNyBAQAogCQk1MUQ3MTlCMzE4MTEwNkUwMDAxNkRDNTEg
LyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFiYXNlLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzIzNkExQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUmVzdWx0RGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcyMzZCMUJCNjBCRkUwMDQ3
OENBMyAvKiBJREJSZXN1bHREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQlJlc3VsdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFEN0VGRUIx
QkRFRkE0NzAwRTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFEQ0U4MDEwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FM
UmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MURGNkQ3RDBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkQ2hlY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFERjZEN0YwQjkyQTE4RTAwQzJEQzg1IC8qIFRocmVhZENo
ZWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGhyZWFkQ2hl
Y2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjgwNSw2ICsxNjgwOSw3IEBA
CiAJCQkJNTE5OEY3QjMxQkJFMDAxRDAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW1wbC5oICov
LAogCQkJCTUxOThGN0I2MUJDMzE0MTcwMEUyQ0M1RiAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJ
bXBsLmNwcCAqLywKIAkJCQk1MTk4RjdCNzFCQzMxNDE3MDBFMkNDNUYgLyogSURCVmVyc2lvbkNo
YW5nZUV2ZW50SW1wbC5oICovLAorCQkJCTUxRDdFRkVCMUJERUZBNDcwMEU5M0UxMCAvKiBUcmFu
c2FjdGlvbk9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNTE2MDcxMkIxQkQ4MzA1MzAwREJDNEYyIC8q
IFRyYW5zYWN0aW9uT3BlcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNsaWVudDsKQEAg
LTIyNTI1LDYgKzIyNTMwLDcgQEAKIAkJCQk1MURGNkQ3RDBCOTJBMTZEMDBDMkRDODUgLyogVGhy
ZWFkQ2hlY2suaCAqLywKIAkJCQlFMUZGNTdBNTBGMDEyNTZCMDA4OTFFQkIgLyogVGhyZWFkR2xv
YmFsRGF0YS5jcHAgKi8sCiAJCQkJRTFGRjU3QTIwRjAxMjU1QjAwODkxRUJCIC8qIFRocmVhZEds
b2JhbERhdGEuaCAqLywKKwkJCQk1MTFGQUVBOTFCREM5ODlBMDBCNEFGRTQgLyogVGhyZWFkU2Fm
ZURhdGFCdWZmZXIuaCAqLywKIAkJCQkxODVCQ0YyNjBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFk
VGltZXJzLmNwcCAqLywKIAkJCQkxODVCQ0YyNzBGMzI3OUNFMDAwRUEyNjIgLyogVGhyZWFkVGlt
ZXJzLmggKi8sCiAJCQkJOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVyLmNwcCAqLywK
QEAgLTI2MzExLDYgKzI2MzE3LDcgQEAKIAkJCQlCMkZBM0RBRjBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdNZXRhZGF0YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyN0IyODJBMENFRjBD
MDcwMEQzOUQ1NCAvKiBKU1NWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ0OTZFM0EwMTM5ODEzQTUwMDNFRTMyQSAvKiBKU1NWR01QYXRoRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTFEN0VGRUExQkRFOEY4QzAwRTkzRTEwIC8qIFRocmVhZFNhZmVEYXRh
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTQyQTc5NzBBRTVDOTQzMDBERjU4REYgLyog
SlNTVkdOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREIxMEFCNzVBNkYwMDBFNUFD
NCAvKiBKU1NWR051bWJlckxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREIzMEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR1BhaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTE5LDYgKzMx
MTI2LDcgQEAKIAkJCQkyRDRGOTZGNTFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDRGOTZGODFBMUVDQzI0MDA5OEJGODggLyogVGV4dElu
ZGljYXRvcldpbmRvdy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQ5MTI1MUYxMkQwMDNF
RjI2OSAvKiBUZXh0SW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxRDdFRkVDMUJE
RUZBNTEwMEU5M0UxMCAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDRUNBREZDRDE1Mzc3OTFEMDBFMzcwNjggLyogVGV4dEluc2VydGlvbkJhc2VDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFCMDk5RTY0OTIwMDU2RTU4MSAvKiBUZXh0
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTREOTg4QjYxN0JGRUIyMTAwODRGQjg4
IC8qIFRleHROb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCBhN2NiZDc4
Li4zYmY0YjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgogCiAjaW5jbHVkZSA8cnVudGltZS9EYXRl
SW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CkBAIC03
NywxMiArNzgsMTQgQEAgc3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYg
b2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LAogCiBzdGF0aWMgSlNWYWx1ZSBp
ZGJLZXlUb0pTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBJREJLZXkqIGtleSkKIHsKLSAgICBpZiAoIWtleSkgeworICAgIGlmICgha2V5IHx8
ICFleGVjKSB7CiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHVuZGVmaW5lZCwgbm90IG51bGwu
CiAgICAgICAgIC8vIFNwZWM6IGh0dHA6Ly9kdmNzLnczLm9yZy9oZy9JbmRleGVkREIvcmF3LWZp
bGUvdGlwL092ZXJ2aWV3Lmh0bWwjaWRsLWRlZi1JREJLZXlSYW5nZQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKKyAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIoZXhlYy0+
dm0oKS5hcGlMb2NrKCkpOworCiAgICAgc3dpdGNoIChrZXktPnR5cGUoKSkgewogICAgIGNhc2Ug
S2V5VHlwZTo6QXJyYXk6CiAgICAgICAgIHsKQEAgLTI3OSwxMCArMjgyLDQxIEBAIFJlZlB0cjxJ
REJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBEZXByCiAgICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7CiB9CiAKK1Jl
ZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChF
eGVjU3RhdGUmIGV4ZWMsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkp
OworCisgICAgaWYgKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OkFy
cmF5KSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gcmVzdWx0OworICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aCgmZXhlYywgdmFsdWUsIGFycmF5W2ldKTsKKyAgICAgICAgICAgIGlmICgha2V5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChrZXkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJl
c3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6
S2V5UGF0aFR5cGU6OlN0cmluZyk7CisgICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJv
bVNjcmlwdFZhbHVlQW5kS2V5UGF0aCgmZXhlYywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOwor
fQorCiBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUq
IHJlcXVlc3RTdGF0ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVl
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiY2Fu
SW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAgIGlmICghZXhlYykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSgqZXhl
Yywgc2NyaXB0VmFsdWUsIGtleVBhdGgpOworfQorCitib29sIGNhbkluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7Cisg
ICAgTE9HKFN0b3JhZ2VBUEksICJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKKwog
ICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpTdHJp
bmcpOwogICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRo
UGFyc2VFcnJvciBlcnJvcjsKQEAgLTI5Miw4ICszMjYsNyBAQCBib29sIGNhbkluamVjdElEQktl
eUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgRGVw
cmVjYQogICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsK
LSAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoZXhlYywgc2NyaXB0VmFsdWUu
anNWYWx1ZSgpLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsK
KyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoJmV4ZWNTdGF0ZSwgc2NyaXB0
VmFsdWUuanNWYWx1ZSgpLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkg
LSAxKTsKIH0KIAogRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShE
T01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlKQpAQCAtMzA4LDYgKzM0MSwyOCBAQCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQ
YXNzUgogICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52bSgpLCByZXN1
bHQpOwogfQogCitEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0
YShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1
ZmZlciYgdmFsdWVEYXRhKQoreworICAgIERPTVJlcXVlc3RTdGF0ZSBzdGF0ZSgmY29udGV4dCk7
CisgICAgYXV0byogZXhlY1N0YXRlID0gc3RhdGUuZXhlYygpOworCisgICAgaWYgKCF2YWx1ZURh
dGEuZGF0YSgpKQorICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoZXhlY1N0
YXRlLT52bSgpLCBqc1VuZGVmaW5lZCgpKTsKKworICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSA9ICp2YWx1ZURhdGEuZGF0YSgpOworICAgIEpTVmFsdWUgcmVzdWx0OworICAgIGlmIChk
YXRhLnNpemUoKSkgeworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMo
ZGF0YSk7CisKKyAgICAgICAgZXhlY1N0YXRlLT52bSgpLmFwaUxvY2soKS5sb2NrKCk7CisgICAg
ICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoZXhlY1N0YXRlLCBleGVj
U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgTm9uVGhyb3dpbmcpOworICAgICAgICBl
eGVjU3RhdGUtPnZtKCkuYXBpTG9jaygpLnVubG9jaygpOworICAgIH0gZWxzZQorICAgICAgICBy
ZXN1bHQgPSBqc051bGwoKTsKKworICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShl
eGVjU3RhdGUtPnZtKCksIHJlc3VsdCk7Cit9CisKIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRl
c2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBwcnBCdWZmZXIsIGJvb2wga2V5SXNEZWZpbmVkKQogewog
ICAgIGlmIChwcnBCdWZmZXIpIHsKQEAgLTM1MCw2ICs0MDUsMTEgQEAgUmVmUHRyPElEQktleT4g
c2NyaXB0VmFsdWVUb0lEQktleShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgY29uc3Qg
RGVwcmVjYXQKICAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIHNjcmlwdFZh
bHVlLmpzVmFsdWUoKSk7CiB9CiAKK1JlZlB0cjxJREJLZXk+IHNjcmlwdFZhbHVlVG9JREJLZXko
RXhlY1N0YXRlJiBleGVjLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2NyaXB0VmFs
dWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZSgmZXhlYywgc2NyaXB0VmFs
dWUuanNWYWx1ZSgpKTsKK30KKwogdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLCBWZWN0b3I8SURCS2V5RGF0YT4m
IGluZGV4S2V5cykKIHsKICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgb2JqZWN0VmFsdWUsIGluZGV4TWV0YWRh
dGEua2V5UGF0aCk7CkBAIC0zNzUsNiArNDM1LDEzIEBAIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNG
b3JWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0
CiAgICAgfQogfQogCitEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlEYXRhVG9TY3JpcHRW
YWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBJREJLZXlEYXRhJiBr
ZXlEYXRhKQoreworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJ
REJLZXkoKTsKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOworICAg
IHJldHVybiBpZGJLZXlUb1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIGtleS5nZXQoKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5oCmluZGV4IGJiZDEwNjYuLjQyYjdiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3Mg
RE9NUmVxdWVzdFN0YXRlOwogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UGF0aDsKIGNsYXNz
IFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBzdHJ1Y3QgSURC
SW5kZXhNZXRhZGF0YTsKIGNsYXNzIElEQktleURhdGE7CkBAIC00NSwxNSArNDYsMjMgQEAgY2xh
c3MgSURCS2V5RGF0YTsKIElEQktleVBhdGggaWRiS2V5UGF0aEZyb21WYWx1ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSk7CiAKIGJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVl
KERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8SURCS2V5PiwgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CisKIFJlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1JlZlB0cjxJREJLZXk+IG1h
eWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworCiBi
b29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK2Jvb2wgY2Fu
SW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CisKIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBUaHJlYWRT
YWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKTsKIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+LCBib29sIGtleUlzRGVmaW5lZCk7CiBXRUJDT1JFX0VYUE9SVCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiwgYm9vbCBrZXlJc0RlZmluZWQpOwogRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgaWRiS2V5VG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRy
PElEQktleT4pOwogUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShET01SZXF1ZXN0
U3RhdGUqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworUmVmUHRyPElEQktleT4g
c2NyaXB0VmFsdWVUb0lEQktleShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLCBWZWN0b3I8SURCS2V5RGF0YT4mIGluZGV4
S2V5cyk7CiAKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktleURhdGFUb1NjcmlwdFZhbHVl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBJREJLZXlEYXRhJik7CiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmNwcAppbmRleCBmOGUzZmNiLi4xZDhjZjMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlc3Npb25JRC5oIgorI2luY2x1ZGUgIlRocmVhZFNh
ZmVEYXRhQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtODYsNiArODcsMTEgQEAgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBmYWxzZSwgU2Vzc2lvbklEPjo6VHlwZSBDcm9zc1RocmVhZENvcGllckJh
c2U8ZmFsc2UKICAgICByZXR1cm4gc2Vzc2lvbklEOwogfQogCitDcm9zc1RocmVhZENvcGllckJh
c2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj46OlR5cGUgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+Ojpjb3B5KGNvbnN0
IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBidWZmZXIpCit7CisgICAgcmV0dXJuIFRocmVhZFNhZmVE
YXRhQnVmZmVyKGJ1ZmZlcik7Cit9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAog
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBm
YWxzZSwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU+Ojpjb3B5KGNvbnN0IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlJiBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhy
ZWFkQ29waWVyLmgKaW5kZXggYWJmOTA2Yi4uMTYwNTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKICAgICBjbGFzcyBTZXNzaW9uSUQ7CisgICAgY2xhc3MgVGhyZWFkU2FmZURhdGFC
dWZmZXI7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE7CiAgICAg
c3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YTsKICAgICBzdHJ1Y3QgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnM7CkBAIC0xMzksNiArMTQwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBTZXNzaW9uSUQmKTsKICAgICB9Owog
CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxz
ZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IHsKKyAgICAgICAgdHlwZWRlZiBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciBUeXBlOworICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFRocmVhZFNhZmVE
YXRhQnVmZmVyJik7CisgICAgfTsKKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAg
IG5hbWVzcGFjZSBJbmRleGVkREIgewogICAgICAgICBlbnVtIGNsYXNzIFRyYW5zYWN0aW9uTW9k
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNGM5NWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFRocmVhZFNhZmVEYXRhQnVmZmVyX2gKKyNkZWZpbmUgVGhyZWFkU2FmZURhdGFC
dWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRocmVhZFNh
ZmVEYXRhQnVmZmVyOworCitjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsPiB7CitmcmllbmQg
Y2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7Citwcml2YXRlOgorICAgIGVudW0gQWRvcHRWZWN0
b3JUYWcgeyBBZG9wdFZlY3RvciB9OworICAgIFRocmVhZFNhZmVEYXRhQnVmZmVySW1wbChWZWN0
b3I8dWludDhfdD4mIGRhdGEsIEFkb3B0VmVjdG9yVGFnKQorICAgIHsKKyAgICAgICAgbV9kYXRh
LnN3YXAoZGF0YSk7CisgICAgfQorCisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7Cisg
ICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKK307CisKK2NsYXNzIFRocmVhZFNh
ZmVEYXRhQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVGhyZWFkU2FmZURhdGFCdWZmZXIg
YWRvcHRWZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFRocmVhZFNhZmVEYXRhQnVmZmVyKGRhdGEsIFRocmVhZFNhZmVEYXRhQnVmZmVySW1wbDo6QWRv
cHRWZWN0b3IpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGhyZWFkU2FmZURhdGFCdWZmZXIg
Y29weVZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCisgICAgeworICAgICAgICBy
ZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIoZGF0YSk7CisgICAgfQorCisgICAgVGhyZWFkU2Fm
ZURhdGFCdWZmZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+KiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwgPyAmbV9pbXBs
LT5tX2RhdGEgOiBudWxscHRyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlcihWZWN0b3I8dWludDhfdD4mIGRhdGEsIFRocmVhZFNhZmVEYXRhQnVm
ZmVySW1wbDo6QWRvcHRWZWN0b3JUYWcgdGFnKQorICAgIHsKKyAgICAgICAgbV9pbXBsID0gYWRv
cHRSZWYobmV3IFRocmVhZFNhZmVEYXRhQnVmZmVySW1wbChkYXRhLCB0YWcpKTsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcihjb25zdCBWZWN0b3I8dWludDhfdD4m
IGRhdGEpCisgICAgeworICAgICAgICBtX2ltcGwgPSBhZG9wdFJlZihuZXcgVGhyZWFkU2FmZURh
dGFCdWZmZXJJbXBsKGRhdGEpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8VGhyZWFkU2FmZURhdGFC
dWZmZXJJbXBsPiBtX2ltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264143</attachid>
            <date>2015-10-27 11:07:21 -0700</date>
            <delta_ts>2015-10-27 13:38:11 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>130728</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2MDQ5Y2YzLi5lZWFmZTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAt
MjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rl
c3RFeHBlY3RhdGlvbnM6IFJlLWVuYWJsZSBhIHRlc3QgdGhhdCBjYW4gbm93IGJlIG1hZGUgcmVs
aWFibGUuCisgICAgICAgIAorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9iYXNp
Yy1wdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vYmFzaWMtcHV0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWw6Cisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1i
YXNpYy5odG1sOiBBZGRlZC4KKwogMjAxNS0xMC0yNyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIg
IDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gQWRkIGNsb3Nl
IG1ldGhvZCB0byB3cml0YWJsZSBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azEvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1YWI3NTlkLi4zOGVlYjg3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC03Myw5ICs3Myw2IEBA
IGluc3BlY3Rvci9pbmRleGVkZGIKICMgQnV0IE1vZGVybiBJbmRleGVkREIgaXMuCiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4gWyBQYXNzIF0KIAotIyBGbGFrZXksIHNraXBwZWQgdW50aWwgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ2OCBsZXRzIHVzIGltcGxl
bWVudCBhIHByb3BlciBmaXgKLXN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3Rz
dG9yZS1iYXNpYy5odG1sCi0KICMgRmFpbHMgd2l0aCBXZWJLaXQxIG9ubHkuCiBlZGl0aW5nL3Nl
Y3VyZS1pbnB1dC9yZXNldC1zdGF0ZS1vbi1uYXZpZ2F0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFz
aWMtcHV0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZTRhMzNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL2Jhc2ljLXB1dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitBTEVSVDogVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBbb2Jq
ZWN0IElEQlRyYW5zYWN0aW9uXSAtIHZlcnNpb25jaGFuZ2UKK0FMRVJUOiBbb2JqZWN0IElEQkRh
dGFiYXNlXQorQUxFUlQ6IHB1dCBzdWNjZWVkZWQgLSBrZXkgd2FzICdmb28nCitBTEVSVDogZ2V0
IHN1Y2NlZWRlZCAtIHZhbHVlIHdhcyAnYmFyJworQUxFUlQ6IHZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uIGNvbXBsZXRlZAorQUxFUlQ6IERvbmUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJjNTcwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFzaWMtcHV0Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAor
PHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9CisKK3ZhciByZXF1
ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJOZXdEYXRhYmFzZVB1dFRlc3REYXRhYmFzZSIp
OworCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBhbGVydCgiRG9uZSIpOworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3Jl
cXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBhbGVydCgiVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2
ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOworICAgIAorICAgIHZhciB0eCA9IHJlcXVl
c3QudHJhbnNhY3Rpb247CisgICAgdmFyIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKworICAg
IGFsZXJ0KHR4ICsgIiAtICIgKyB0eC5tb2RlKTsKKyAgICBhbGVydChkYik7CisKKyAgICB2YXIg
b3MgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgdmFyIHB1
dFJlcXVlc3QgPSBvcy5wdXQoImJhciIsICJmb28iKTsKKyAgICAKKyAgICBwdXRSZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgc3VjY2VlZGVk
IC0ga2V5IHdhcyAnIiArIHB1dFJlcXVlc3QucmVzdWx0ICsgIiciKTsKKyAgICAgICAgCisgICAg
ICAgIHZhciBnZXRSZXF1ZXN0ID0gb3MuZ2V0KCJmb28iKTsKKyAgICAgICAgZ2V0UmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgYWxlcnQoImdldCBzdWNj
ZWVkZWQgLSB2YWx1ZSB3YXMgJyIgKyBnZXRSZXF1ZXN0LnJlc3VsdCArICInIik7CisgICAgICAg
IH0KKworICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICAgICAgYWxlcnQoImdldCB1bmV4cGVjdGVkbHkgZmFpbGVkIC0gIiArIGV2ZW50KTsKKyAg
ICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1dFJlcXVlc3Qub25l
cnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgdW5leHBlY3RlZGx5
IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisgICAgCisgICAg
dHgub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJ2ZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0Iik7CisgICAgICAgIGRvbmUoKTsKKyAg
ICB9CisKKyAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxl
cnQoInZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlZCIpOworICAgICAgICBkb25l
KCk7CisgICAgfQorCisgICAgdHgub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IGFsZXJ0KCJ2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIC0gIiAr
IGV2ZW50KTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3Rv
cmUtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLWV4cGVjdGVkLnR4dAppbmRleCAxOGVkZDhhLi4z
OWNmZDA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Y3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50
eHQKQEAgLTEsNiArMSw3IEBACiBBTEVSVDogSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZl
cnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQogQUxFUlQ6IE9iamVjdCBzdG9yZSBuYW1lczoKIEFM
RVJUOiBGaXJzdEFib3J0ZWRPYmplY3RTdG9yZQorQUxFUlQ6IFB1dCBzdWNjZWVkZWQKIEFMRVJU
OiBJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBhYm9ydGVkCiBBTEVS
VDogT2JqZWN0IHN0b3JlIG5hbWVzOgogQUxFUlQ6IFNlY29uZCB1cGdyYWRlIG5lZWRlZDogT2xk
IHZlcnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMu
aHRtbAppbmRleCAzOGRmNjkzLi4yMTA0Zjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFz
aWMuaHRtbApAQCAtMzAsMTMgKzMwLDE4IEBAIGNyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRl
UmVxdWVzdC50cmFuc2FjdGlvbjsKICAgICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVz
dWx0OwogICAgIHZhciBvYmplY3RTdG9yZSA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKCJG
aXJzdEFib3J0ZWRPYmplY3RTdG9yZSIpOworICAgIHZhciByZXF1ZXN0ID0gb2JqZWN0U3RvcmUu
cHV0KCJmb28iLCAiYmFyIik7CiAKLSAgICB2YXIgZiA9IGZ1bmN0aW9uKCkgeworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlB1dCBzdWNj
ZWVkZWQiKTsKICAgICAgICAgdmVyc2lvblRyYW5zYWN0aW9uLmFib3J0KCk7Ci0gICAgfTsKLQor
ICAgIH0KKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBh
bGVydCgiUHV0IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cisg
ICAgCiAgICAgZHVtcE9iamVjdFN0b3JlcyhkYXRhYmFzZSk7ICAgIAotICAgIHNldFRpbWVvdXQo
ZiwgMCk7CiAgICAgCiAgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihl
dmVudCkgewogICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJh
bnNhY3Rpb24gYWJvcnRlZCIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmMxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1iYXNpYy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQUxFUlQ6IEluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9s
ZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBvYmplY3QgcHV0IFNVQ0NFU1Mg
LSBmb28xCitBTEVSVDogYXJyYXkgcHV0IFNVQ0NFU1MgLSBmb28yCitBTEVSVDogU2Vjb25kIG9i
amVjdCBwdXQgU1VDQ0VTUyAtIGJhejEKK0FMRVJUOiBTZWNvbmQgYXJyYXkgcHV0IFNVQ0NFU1Mg
LSBiYXoyCitBTEVSVDogSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
Y29tcGxldGUKK0FMRVJUOiBEb25lCitUaGlzIHRlc3QgY3JlYXRlcyBzb21lIG9iamVjdCBzdG9y
ZXMgd2l0aCBrZXlwYXRocy4KK0l0IHRoZW4gcHV0cyBzb21lIHZhbHVlcyBpbiB0aGVtLgorSXQg
bWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2ljLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYWViMAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2lj
Lmh0bWwKQEAgLTAsMCArMSw3NCBAQAorVGhpcyB0ZXN0IGNyZWF0ZXMgc29tZSBvYmplY3Qgc3Rv
cmVzIHdpdGgga2V5cGF0aHMuPGJyPgorSXQgdGhlbiBwdXRzIHNvbWUgdmFsdWVzIGluIHRoZW0u
PGJyPgorSXQgbWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC48YnI+Cis8
c2NyaXB0PgorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30KKworZnVuY3Rpb24g
ZG9uZSgpCit7CisgICAgYWxlcnQoIkRvbmUiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCit2YXIgY3JlYXRlUmVxdWVz
dCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiS2V5cGF0aEJhc2ljVGVzdERhdGFiYXNlIiwgMSk7
CisKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQu
b2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAg
ICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAg
ICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OyAgICAKKyAgICB2YXIgb2JqZWN0
U3RvcmUxID0gZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIk9TMSIsIHsga2V5UGF0aDogImZv
byIgfSk7CisgICAgdmFyIG9iamVjdFN0b3JlMiA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3Jl
KCJPUzIiLCB7IGtleVBhdGg6ICJmb28uYmFyIiB9KTsKKworICAgIHZhciBvYmplY3QgPSBuZXcg
T2JqZWN0OworICAgIG9iamVjdC5zdHVmZiA9ICJiYXIxIjsKKyAgICBvYmplY3QuZm9vID0gImZv
bzEiOworICAgICAgICAKKyAgICB2YXIgcmVxdWVzdDEgPSBvYmplY3RTdG9yZTEucHV0KG9iamVj
dCk7CisgICAgcmVxdWVzdDEub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
YWxlcnQoIm9iamVjdCBwdXQgU1VDQ0VTUyAtICIgKyByZXF1ZXN0MS5yZXN1bHQpOworICAgIH0K
KworICAgIHZhciBhcnJheSA9IHsgZm9vOiAiZm9vMiIsIHN0dWZmOiAiYmFyMiIgfTsKKworICAg
IHZhciByZXF1ZXN0MiA9IG9iamVjdFN0b3JlMS5wdXQoYXJyYXkpOworICAgIHJlcXVlc3QyLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJhcnJheSBwdXQgU1VD
Q0VTUyAtICIgKyByZXF1ZXN0Mi5yZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QuZm9v
ID0gbmV3IE9iamVjdDsKKyAgICBvYmplY3QuZm9vLmJhciA9ICJiYXoxIjsKKyAgICB2YXIgcmVx
dWVzdDMgPSBvYmplY3RTdG9yZTIucHV0KG9iamVjdCk7CisgICAgcmVxdWVzdDMub25zdWNjZXNz
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlNlY29uZCBvYmplY3QgcHV0IFNV
Q0NFU1MgLSAiICsgcmVxdWVzdDMucmVzdWx0KTsKKyAgICB9CisKKyAgICBhcnJheS5mb28gPSB7
IGJhcjogImJhejIiIH07CisKKyAgICB2YXIgcmVxdWVzdDQgPSBvYmplY3RTdG9yZTIucHV0KGFy
cmF5KTsKKyAgICByZXF1ZXN0NC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICBhbGVydCgiU2Vjb25kIGFycmF5IHB1dCBTVUNDRVNTIC0gIiArIHJlcXVlc3Q0LnJlc3VsdCk7
CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNh
Y3Rpb24gdW5leHBlY3RlZCBhYm9ydGVkIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAg
ICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgIGFsZXJ0KCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21w
bGV0ZSIpOworICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9u
Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdy
YWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7
CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGM4Mzg3ZC4uODFmZWE1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTg3Niw2ICs4NzYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAogICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwCisgICAgTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcAogCiAgICAgTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGNmMGUwNzMuLmVmMjE2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMDQgQEAKKzIwMTUt
MTAtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVy
biBJREI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9iYXNpYy1wdXQuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlEYXRhOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Om9wZXJhdG9yPT0p
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGE6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpoYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGFIYXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRyYWl0czo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGFIYXNo
VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRy
YWl0czo6aXNFbXB0eVZhbHVlKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0luZGV4
ZWREQi5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJBbnk6OklEQkFueSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6bW9kZXJuSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6Y3JlYXRlKToKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
OjpkaWRDcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpnZXRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6
c2F2ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Ub1NlcnZlcjo6Y29tcGxldGVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6YXV0b0luY3JlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6Z2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjppbmZvKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJlcXVl
c3QpOiBEZWxldGVkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJl
cXVlc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6SURCUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnNvdXJjZU9i
amVjdFN0b3JlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50
OjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJ
REJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJSZXF1ZXN0OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkNsaWVudDo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6Y29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmRpZEFi
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmNyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGll
bnQ6OklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpk
aWRQdXRPckFkZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmRlYWN0aXZhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJUcmFuc2FjdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
VHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpU
cmFuc2FjdGlvbkFjdGl2YXRvcjo6VHJhbnNhY3Rpb25BY3RpdmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbkFjdGl2YXRvcjo6flRyYW5zYWN0aW9uQWN0aXZh
dG9yKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9w
ZXJhdGlvbi5jcHA6IAorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbjo6VHJhbnNhY3Rpb25PcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVy
YXRpb24pOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
Q29ubmVjdGlvblRvQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
Q29ubmVjdGlvblRvQ2xpZW50OjpkaWRQdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkR2V0UmVjb3JkKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRl
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwdXRPckFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bjo6cmVjb3JkVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpjb250YWluc1Jl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpk
ZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RT
dG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2Jq
ZWN0U3RvcmU6OnZhbHVlRm9yS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1WYWx1ZURh
dGFDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OmdldFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VJbmZvOjppbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oOgorCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlkYkVycm9y
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppZGJFcnJvckRlc2NyaXB0aW9uKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaDoKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdERhdGE6OnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3REYXRhOjpvYmplY3RTdG9yZUlkZW50aWZpZXIpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVzdWx0RGF0YTo6SURCUmVzdWx0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXN1bHREYXRhOjpwdXRPckFkZFN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0
RGF0YTo6Z2V0UmVjb3JkU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlJlc3VsdERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6OnJl
c3VsdEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXN1bHREYXRhOjpyZXN1bHREYXRhKToK
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpkaWRQdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZEdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlk
YktleVRvSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXliZUNyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKworICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFk
Q29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyPjo6Y29w
eSk6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKworICAgICAgICAq
IHBsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpjb3B5VmVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGF0YSk6CisKIDIwMTUt
MTAtMjcgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbU3RyZWFtcyBBUEldIEFkZCBjbG9zZSBtZXRob2QgdG8gd3JpdGFibGUgc3RyZWFt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCmlu
ZGV4IDkyYzMwMWYuLjE0MmYyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleURhdGEuY3BwCkBAIC0zMTksNiArMzE5LDQ1IEBAIHZvaWQgSURCS2V5RGF0
YTo6c2V0TnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlKQogICAgIG1faXNOdWxsID0gZmFsc2U7CiB9
CiAKK0lEQktleURhdGEgSURCS2V5RGF0YTo6ZGVsZXRlZFZhbHVlKCkKK3sKKyAgICBJREJLZXlE
YXRhIHJlc3VsdDsKKyAgICByZXN1bHQubV9pc051bGwgPSBmYWxzZTsKKyAgICByZXN1bHQubV9p
c0RlbGV0ZWRWYWx1ZSA9IHRydWU7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOworfQor
Citib29sIElEQktleURhdGE6Om9wZXJhdG9yPChjb25zdCBJREJLZXlEYXRhJiByaHMpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbXBhcmUocmhzKSA8IDA7Cit9CisKK2Jvb2wgSURCS2V5RGF0YTo6
b3BlcmF0b3I9PShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV90
eXBlICE9IG90aGVyLm1fdHlwZSB8fCBtX2lzTnVsbCAhPSBvdGhlci5tX2lzTnVsbCB8fCBtX2lz
RGVsZXRlZFZhbHVlICE9IG90aGVyLm1faXNEZWxldGVkVmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoK
KyAgICBjYXNlIEtleVR5cGU6Ok1heDoKKyAgICBjYXNlIEtleVR5cGU6Ok1pbjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CisgICAgY2FzZSBLZXlUeXBl
OjpEYXRlOgorICAgICAgICByZXR1cm4gbV9udW1iZXJWYWx1ZSA9PSBvdGhlci5tX251bWJlclZh
bHVlOworICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmdW
YWx1ZSA9PSBvdGhlci5tX3N0cmluZ1ZhbHVlOworICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Cisg
ICAgICAgIGlmIChtX2FycmF5VmFsdWUuc2l6ZSgpICE9IG90aGVyLm1fYXJyYXlWYWx1ZS5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcnJheVZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9hcnJh
eVZhbHVlWzBdICE9IG90aGVyLm1fYXJyYXlWYWx1ZVswXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCmluZGV4IDkxNTYzYjIuLmI2YWEwYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklE
QktleS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC04NywxNCArODgsODcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOdWxsOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlICE9IEtleVR5cGU6OkludmFsaWQ7IH0KICAgICBLZXlUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IElEQktleURhdGEmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5
RGF0YSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJREJLZXlEYXRh
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4gaGFzaENvZGVzOworICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3R5cGUpKTsKKyAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzTnVs
bCA/IDEgOiAwKTsKKyAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzRGVsZXRlZFZhbHVlID8g
MSA6IDApOworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIEtleVR5cGU6
OkludmFsaWQ6CisgICAgICAgIGNhc2UgS2V5VHlwZTo6TWF4OgorICAgICAgICBjYXNlIEtleVR5
cGU6Ok1pbjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6Ok51bWJl
cjoKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgorICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZtX251bWJlclZh
bHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6
CisgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2gobV9zdHJpbmdW
YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6
CisgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IG1fYXJyYXlWYWx1ZSkKKyAgICAgICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gV1RGOjpyb3VuZFVwVG9Q
b3dlck9mVHdvKGhhc2hDb2Rlcy5zaXplKCkpOworICAgICAgICBoYXNoQ29kZXMucmVzaXplKHRh
cmdldFNpemUpOworCisgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFz
aENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworICAg
IH0KKworICAgIHN0YXRpYyBJREJLZXlEYXRhIGRlbGV0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZhbHVlOyB9CisKIHByaXZh
dGU6CiAgICAgS2V5VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPElEQktleURhdGE+IG1fYXJyYXlW
YWx1ZTsKICAgICBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKICAgICBkb3VibGUgbV9udW1iZXJWYWx1
ZSB7IDAgfTsKICAgICBib29sIG1faXNOdWxsIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNEZWxl
dGVkVmFsdWUgeyBmYWxzZSB9OworfTsKKworc3RydWN0IElEQktleURhdGFIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBhLmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElEQktleURhdGEmIGEsIGNvbnN0IElE
QktleURhdGEmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCitzdHJ1Y3QgSURCS2V5
RGF0YUhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0b21IYXNoVHJhaXRzPElEQktleURhdGE+
IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworCisgICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKElEQktleURhdGEmIGtleSkKKyAgICB7
CisgICAgICAgIGtleSA9IElEQktleURhdGE6OmRlbGV0ZWRWYWx1ZSgpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IElEQktleURhdGEmIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiBrZXkuaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSURCS2V5RGF0YSBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJREJLZXlE
YXRhKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IElEQktl
eURhdGEmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkuaXNOdWxsKCk7CisgICAgfQog
fTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSW5kZXhlZERCLmgKaW5kZXggNTU4YmJhNy4uOGZlZjUyMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCkBAIC00MSw3ICs0MSw4IEBA
IGNvbnN0IHVuc2lnbmVkIFRyYW5zYWN0aW9uTW9kZU1heGltdW0gPSAyOwogCiBlbnVtIGNsYXNz
IFRyYW5zYWN0aW9uU3RhdGUgewogICAgIFVuc3RhcnRlZCwKLSAgICBSdW5uaW5nLAorICAgIEFj
dGl2ZSwKKyAgICBJbmFjdGl2ZSwKICAgICBDb21taXR0aW5nLAogICAgIEFib3J0aW5nLAogICAg
IEZpbmlzaGVkLApAQCAtNzEsNyArNzIsMTIgQEAgZW51bSBjbGFzcyBLZXlQYXRoVHlwZSB7CiAg
ICAgU3RyaW5nLAogICAgIEFycmF5LAogfTsKLSAgICAKKworZW51bSBjbGFzcyBPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUgeworICAgIE92ZXJ3cml0ZSwKKyAgICBOb092ZXJ3cml0ZSwKK307CisK
IC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGlnaGVzdCBwcmVjZWRlbnQgaW4gdGVy
bXMgb2Ygc29ydCBvcmRlci4KIGVudW0gS2V5VHlwZSB7CiAgICAgTWF4ID0gLTEsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5j
cHAKaW5kZXggMmZkYWI3ZC4uN2U5YTEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcApAQCAtNDIsNiArNDIsMTgg
QEAgSURCQW55OjpJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKQogewogfQogCitJ
REJBbnk6OklEQkFueShSZWY8SURCT2JqZWN0U3RvcmU+JiYgb2JqZWN0U3RvcmUpCisgICAgOiBt
X3R5cGUoSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSkKKyAgICAsIG1fb2JqZWN0U3RvcmUo
YWRvcHRSZWYoJm9iamVjdFN0b3JlLmxlYWtSZWYoKSkpCit7Cit9CisKK0lEQkFueTo6SURCQW55
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJB
bnk6OlR5cGU6OlNjcmlwdFZhbHVlKQorICAgICwgbV9zY3JpcHRWYWx1ZSh2YWx1ZSkKK3sKK30K
KwogSURCQW55Ojp+SURCQW55KCkKIHsKIH0KQEAgLTgyLDYgKzk0LDEyIEBAIFJlZlB0cjxXZWJD
b3JlOjpJREJPYmplY3RTdG9yZT4gSURCQW55OjppZGJPYmplY3RTdG9yZSgpCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKK0lEQk9iamVjdFN0b3JlKiBJREJBbnk6Om1vZGVybklEQk9iamVjdFN0
b3JlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3Rv
cmUpOworICAgIHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOworfQorCiBSZWZQdHI8V2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQogewogICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQkFueUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJBbnlJbXBsLmgKaW5kZXggYzE0MjY1Ni4uMDljNDJiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUltcGwuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUltcGwuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CkBAIC00MSw2ICs0MiwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KFdURjo6bW92ZShkYXRhYmFzZSkp
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlKFJlZjxJREJPYmpl
Y3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSURCQW55KFdURjo6bW92ZShvYmplY3RTdG9yZSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UmVmUHRyPElEQkFueT4gY3JlYXRlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7Cisg
ICAgfQorCiAgICAgdmlydHVhbCB+SURCQW55KCk7CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtNTcsMTEgKzY4LDE3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgb3ZlcnJpZGUg
ZmluYWw7CiAgICAgdmlydHVhbCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgb3ZlcnJpZGUg
ZmluYWw7CiAKKyAgICBJREJPYmplY3RTdG9yZSogbW9kZXJuSURCT2JqZWN0U3RvcmUoKTsKKwog
cHJpdmF0ZToKLSAgICBJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYmKTsKKyAgICBleHBsaWNpdCBJ
REJBbnkoUmVmPElEQkRhdGFiYXNlPiYmKTsKKyAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQk9i
amVjdFN0b3JlPiYmKTsKKyAgICBleHBsaWNpdCBJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmKTsKKwogCiAgICAgSURCQW55OjpUeXBlIG1fdHlwZSB7IElEQkFueTo6VHlwZTo6
VW5kZWZpbmVkIH07CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKIAogICAgIGNvbnN0IElEQktleVBh
dGggbV9pZGJLZXlQYXRoOwogICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fc2Ny
aXB0VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDQ2MjA5ZDgu
LmU2MTAzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC05OCw4ICs5
OCw3IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGVPYmplY3RTdG9yZShUcmFu
c2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIEFTU0VSVCgh
bV9hY3RpdmVPcGVyYXRpb25zLmNvbnRhaW5zKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsKLSAg
ICBtX2FjdGl2ZU9wZXJhdGlvbnMuc2V0KG9wZXJhdGlvbi5pZGVudGlmaWVyKCksICZvcGVyYXRp
b24pOworICAgIHNhdmVPcGVyYXRpb24ob3BlcmF0aW9uKTsKIAogICAgIG1fZGVsZWdhdGUtPmNy
ZWF0ZU9iamVjdFN0b3JlKElEQlJlcXVlc3REYXRhKG9wZXJhdGlvbiksIGluZm8pOwogfQpAQCAt
MTA3LDExICsxMDYsMzcgQEAgdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVj
dFN0b3JlKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGMKIHZvaWQgSURCQ29ubmVj
dGlvblRvU2VydmVyOjpkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6
OmRpZENyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgY29tcGxldGVPcGVyYXRpb24ocmVzdWx0RGF0
YSk7Cit9CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IG1fYWN0aXZlT3BlcmF0aW9ucy50YWtlKHJl
c3VsdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSk7Ci0gICAgQVNTRVJUKG9wZXJhdGlvbik7Cit2
b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQoVHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdGlvbiwgUmVmUHRyPElEQktleT4mIGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4mIHZhbHVlLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBv
dmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2
ZXI6OnB1dE9yQWRkIik7CiAKLSAgICBvcGVyYXRpb24tPmNvbXBsZXRlZChyZXN1bHREYXRhKTsK
KyAgICBzYXZlT3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAgbV9kZWxlZ2F0ZS0+cHV0T3JBZGQo
SURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwga2V5LmdldCgpLCAqdmFsdWUsIG92ZXJ3cml0ZU1v
ZGUpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkUHV0T3JBZGQoY29uc3Qg
SURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRQdXRPckFkZCIpOworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJl
c3VsdERhdGEpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Z2V0UmVjb3JkKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+JiBrZXkpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Z2V0UmVjb3JkIik7CisK
KyAgICBBU1NFUlQoa2V5KTsKKworICAgIHNhdmVPcGVyYXRpb24ob3BlcmF0aW9uKTsKKyAgICBt
X2RlbGVnYXRlLT5nZXRSZWNvcmQoSURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwga2V5LmdldCgp
KTsKK30KKwordm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29yZChjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29yZCIpOworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJl
c3VsdERhdGEpOwogfQogCiB2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y29tbWl0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQpAQCAtMTg1LDYgKzIxMCwyMCBAQCB2
b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6dW5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbihJ
REJEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb25NYXAucmVtb3Zl
KGRhdGFiYXNlLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgSURC
Q29ubmVjdGlvblRvU2VydmVyOjpzYXZlT3BlcmF0aW9uKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBv
cGVyYXRpb24pCit7CisgICAgQVNTRVJUKCFtX2FjdGl2ZU9wZXJhdGlvbnMuY29udGFpbnMob3Bl
cmF0aW9uLmlkZW50aWZpZXIoKSkpOworICAgIG1fYWN0aXZlT3BlcmF0aW9ucy5zZXQob3BlcmF0
aW9uLmlkZW50aWZpZXIoKSwgJm9wZXJhdGlvbik7Cit9CisKK3ZvaWQgSURCQ29ubmVjdGlvblRv
U2VydmVyOjpjb21wbGV0ZU9wZXJhdGlvbihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQoreworICAgIGF1dG8gb3BlcmF0aW9uID0gbV9hY3RpdmVPcGVyYXRpb25zLnRha2UocmVzdWx0
RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQob3BlcmF0aW9uKTsKKworICAg
IG9wZXJhdGlvbi0+Y29tcGxldGVkKHJlc3VsdERhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJ
REJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1Nl
cnZlci5oCmluZGV4IDQzMDVlYTIuLjdlMjc4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2Vy
dmVyLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIElEQkNsaWVudCB7CiBjbGFzcyBJREJE
YXRhYmFzZTsKIGNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CiBjbGFzcyBJREJUcmFuc2FjdGlvbjsK
K2NsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uOwogCiBjbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IHsKIHB1YmxpYzoK
QEAgLTYzLDYgKzY0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9p
ZCBkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJik7CiAKKyAgICB2b2lk
IHB1dE9yQWRkKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktleT4mLCBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVy
d3JpdGVNb2RlKTsKKyAgICB2b2lkIGRpZFB1dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsK
KworICAgIHZvaWQgZ2V0UmVjb3JkKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktl
eT4mKTsKKyAgICB2b2lkIGRpZEdldFJlY29yZChjb25zdCBJREJSZXN1bHREYXRhJik7CisKICAg
ICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkaWRD
b21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKIApAQCAtNzcsNyArODQsMTAgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlcihJREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZSYpOwotICAgIAorCisgICAgdm9pZCBzYXZlT3BlcmF0aW9uKFRyYW5zYWN0
aW9uT3BlcmF0aW9uJik7CisgICAgdm9pZCBjb21wbGV0ZU9wZXJhdGlvbihjb25zdCBJREJSZXN1
bHREYXRhJik7CisKICAgICBSZWY8SURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGU+IG1fZGVs
ZWdhdGU7CiAKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPElEQkNs
aWVudDo6SURCT3BlbkRCUmVxdWVzdD4+IG1fb3BlbkRCUmVxdWVzdE1hcDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKaW5kZXggMDliMmYwMS4uZWYyNjhjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNv
bm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKQEAgLTMwLDkg
KzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCS2V5OwogY2xhc3Mg
SURCT2JqZWN0U3RvcmVJbmZvOwogY2xhc3MgSURCUmVxdWVzdERhdGE7CiBjbGFzcyBJREJSZXNv
dXJjZUlkZW50aWZpZXI7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK25hbWVzcGFj
ZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU7Cit9CiAK
IG5hbWVzcGFjZSBJREJDbGllbnQgewogCkBAIC00Niw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihJREJSZXNvdXJjZUlkZW50aWZpZXImKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKElEQlJlc291cmNlSWRlbnRpZmll
ciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURCS2V5KiwgU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURC
S2V5KikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlQ29ubmVjdGlvbkNsb3NlZCh1
aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKSA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgcmVmKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCBjZjhjZjE0
Li40ODg5YjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcApAQCAtMjgsNyArMjgsMTUg
QEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NUmVxdWVz
dFN0YXRlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklE
QkVycm9yLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdEltcGwu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkltcGwuaCIKKyNpbmNsdWRlICJJbmRleGVkREIu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJDbGllbnQgewpAQCAtODAs
NyArODgsNyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQk9iamVjdFN0b3Jl
Ojp0cmFuc2FjdGlvbigpIGNvbnN0CiAKIGJvb2wgSURCT2JqZWN0U3RvcmU6OmF1dG9JbmNyZW1l
bnQoKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG1faW5mby5hdXRvSW5jcmVtZW50KCk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikKQEAgLTg4LDkgKzk2LDkgQEAgUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUmLCBEZXBy
ZWNhdGVkOjpTY3IKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0
ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gcHV0T3JBZGQo
c3RhdGUsIHZhbHVlLCBudWxscHRyLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZTo6T3ZlcndyaXRlLCBlYyk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9u
Q29kZSYpCkBAIC0xMTgsOSArMTI2LDM0IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikKK1JlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKKworICAgIGlmICghY29udGV4dCkgewor
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
ZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpUcmFuc2Fj
dGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0
U3RhdGUoY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVU
b0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+
dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxF
eGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJh
bnNhY3Rpb24tPnJlcXVlc3RHZXRSZWNvcmQoKmNvbnRleHQsICp0aGlzLCAqaWRiS2V5KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYocmVxdWVzdC5sZWFrUmVmKCkpOwogfQogCiBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikKQEAgLTEzMywxMSArMTY2LDk0IEBAIFJl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0
YXRlJiwgRGVwcmVjYXRlZDo6U2NyCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlND
OjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgYXV0byBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGV4ZWNTdGF0ZSwga2V5
KTsKKyAgICByZXR1cm4gcHV0T3JBZGQoZXhlY1N0YXRlLCB2YWx1ZSwgaWRiS2V5LCBJbmRleGVk
REI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUsIGVjKTsKIH0KIAorUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgUmVmUHRyPElE
QktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVN
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0
U3RvcmU6OnB1dE9yQWRkIik7CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgp
KSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9u
Q29kZTo6UmVhZE9ubHlFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IHN0YXRp
Y19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2Rl
bGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1
ZS5qc1ZhbHVlKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkgeworICAgICAgICBlYyA9IERBVEFfQ0xPTkVfRVJSOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5oYXNCbG9iVVJMcygpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKKyAgICAg
ICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKGtleSAmJiBrZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAg
ICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0
YUVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCB1c2Vz
SW5saW5lS2V5cyA9ICFtX2luZm8ua2V5UGF0aCgpLmlzTnVsbCgpOworICAgIGJvb2wgdXNlc0tl
eUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKKyAgICBpZiAodXNlc0lubGluZUtleXMpIHsK
KyAgICAgICAgaWYgKGtleSkgeworICAgICAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRp
b25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5
ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHN0YXRlLCB2YWx1
ZSwgbV9pbmZvLmtleVBhdGgoKSk7CisgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRo
S2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9u
Q29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFrZXlQYXRoS2V5KSB7CisgICAgICAg
ICAgICBpZiAodXNlc0tleUdlbmVyYXRvcikgeworICAgICAgICAgICAgICAgIGlmICghY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJ
REJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29k
ZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlQYXRoS2V5KSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWtleSk7CisgICAgICAgICAgICBrZXkgPSBrZXlQYXRoS2V5OworICAgICAgICB9
CisgICAgfSBlbHNlIGlmICghdXNlc0tleUdlbmVyYXRvciAmJiAha2V5KSB7CisgICAgICAgIGVj
ID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9y
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBjb250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoJnN0YXRlKTsKKyAgICBpZiAoIWNv
bnRleHQpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNl
cHRpb25Db2RlOjpVbmtub3duKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0UHV0T3JB
ZGQoKmNvbnRleHQsICp0aGlzLCBrZXkuZ2V0KCksICpzZXJpYWxpemVkVmFsdWUsIG92ZXJ3cml0
ZU1vZGUpOworICAgIHJldHVybiBhZG9wdFJlZihyZXF1ZXN0LmxlYWtSZWYoKSk7Cit9CisKKwog
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1w
bC5oCmluZGV4IDVmZGM5ODYuLmJmODIxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmgKQEAg
LTMwLDggKzMwLDEyIEBACiAKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlSW5mby5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleTsKKwogbmFtZXNwYWNlIElEQkNsaWVudCB7CiAK
IGNsYXNzIElEQlRyYW5zYWN0aW9uOwpAQCAtNzIsMTEgKzc2LDE3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKIAorICAgIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYg
aW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCiBwcml2YXRlOgogICAgIElEQk9iamVj
dFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIElEQlRyYW5zYWN0aW9uJik7CiAKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gcHV0T3JBZGQoSlNDOjpFeGVjU3RhdGUmLCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIFJlZlB0cjxJREJLZXk+LCBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZSwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgSURCT2JqZWN0U3Rv
cmVJbmZvIG1faW5mbzsKICAgICBSZWY8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisK
KyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJD
bGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwCmluZGV4IGUwMTI2OTUuLmI2ZGJk
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJPcGVuREJSZXF1ZXN0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcApAQCAtNTUsNyArNTUsNiBAQCBJ
REJPcGVuREJSZXF1ZXN0OjpJREJPcGVuREJSZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYg
Y29ubmVjdGlvbiwgU2NyaXB0RXhlYwogICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJh
c2VJZGVudGlmaWVyKQogICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCiB7Ci0gICAgc3VzcGVuZElm
TmVlZGVkKCk7CiB9CiAKIElEQk9wZW5EQlJlcXVlc3Q6On5JREJPcGVuREJSZXF1ZXN0KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1
ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
UmVxdWVzdEltcGwuY3BwCmluZGV4IGIwZjc5NDcuLmU0YzJjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBs
LmNwcApAQCAtMjksMTcgKzI5LDM5IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
ICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQktleURhdGEu
aCIKKyNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0
YUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIAorUmVmPElEQlJlcXVlc3Q+IElEQlJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RT
dG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIG9iamVjdFN0b3JlLCB0cmFu
c2FjdGlvbikpOworfQorCiBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6
IElEQk9wZW5EQlJlcXVlc3QoY29udGV4dCkKICAgICAsIG1fY29ubmVjdGlvbihjb25uZWN0aW9u
KQogICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIoY29ubmVjdGlvbikKIHsKKyAgICBzdXNwZW5k
SWZOZWVkZWQoKTsKK30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6IElEQk9wZW5EQlJlcXVlc3QoJmNvbnRleHQpCisgICAg
LCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKKyAgICAsIG1fY29ubmVjdGlvbih0cmFuc2Fj
dGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFu
c2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3NvdXJjZShhZG9wdFJlZigqSURC
QW55OjpjcmVhdGUob2JqZWN0U3RvcmUpLmxlYWtSZWYoKSkpCit7CisgICAgc3VzcGVuZElmTmVl
ZGVkKCk7CiB9CiAKIElEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKQEAgLTc3LDYgKzk5LDE4IEBA
IGNvbnN0IFN0cmluZyYgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHJlYWR5U3RhdGU7CiB9CiAKK3VpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3Jl
SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgIT0gSURCQW55OjpUeXBlOjpJREJPYmplY3RT
dG9yZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX3NvdXJjZS0+bW9kZXJuSURCT2Jq
ZWN0U3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPm1v
ZGVybklEQk9iamVjdFN0b3JlKCktPmluZm8oKS5pZGVudGlmaWVyKCk7Cit9CisKIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKQEAgLTkyLDYg
KzEyNiwxMSBAQCBib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25z
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKK30KKwog
dm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQpAQCAtMTAxLDYgKzE0MCw4MiBAQCB2b2lk
IElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KCZldmVudC5nZXQo
KSk7CiB9CiAKK2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBwcnBFdmVudCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudCAtICVzIiwgcHJwRXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKworICAgIFJlZlB0
cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVl
c3RSZWFkeVN0YXRlOjpEb25lOworCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7CisgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2FjdGlv
bikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uKTsKKyAgICAgICAgdGFy
Z2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbi0+ZGIoKSk7CisgICAgfQorCisgICAgYm9vbCBkb250
UHJldmVudERlZmF1bHQ7CisgICAgeworICAgICAgICBUcmFuc2FjdGlvbkFjdGl2YXRvciBhY3Rp
dmF0b3IobV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAg
IH0KKworICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7CisKKyAgICByZXR1cm4gZG9u
dFByZXZlbnREZWZhdWx0OworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJ
REJLZXlEYXRhKiBrZXlEYXRhKQoreworICAgIGlmICgha2V5RGF0YSkgeworICAgICAgICBtX3Jl
c3VsdCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKmtleURhdGEpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUo
V1RGOjptb3ZlKHZhbHVlKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1
Y3R1cmVkQ2xvbmUoY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUi
KTsKKworICAgIGF1dG8gY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7
CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEY6Om1vdmUodmFsdWUpKTsKK30KKwor
dm9pZCBJREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpCit7CisgICAgbV9pZGJFcnJvciA9IHJlc3VsdERhdGEuZXJyb3IoKTsKKyAgICBp
ZiAoIW1faWRiRXJyb3IuaXNOdWxsKCkpCisgICAgICAgIG9uRXJyb3IoKTsKKyAgICBlbHNlCisg
ICAgICAgIG9uU3VjY2VzcygpOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpvbkVycm9yIik7CisKKyAgICBBU1NFUlQo
IW1faWRiRXJyb3IuaXNOdWxsKCkpOworICAgIG1fZG9tRXJyb3IgPSBET01FcnJvcjo6Y3JlYXRl
KG1faWRiRXJyb3IubmFtZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6
Om9uU3VjY2VzcygpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyIpOworCisgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgZmFsc2UsIGZhbHNlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IGQ0NjI0MTEuLjFk
ZmZiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJSZXF1ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCkBAIC0zNyw3ICszNywxMCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBFdmVudDsKK2NsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJSZXN1
bHREYXRhOworY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CisKIAogbmFtZXNwYWNlIElEQkNs
aWVudCB7CiAKQEAgLTQ1LDYgKzQ4LDggQEAgY2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyOwog
CiBjbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3QsIHB1
YmxpYyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElE
QlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUm
LCBJREJUcmFuc2FjdGlvbiYpOworCiAgICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBy
ZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlSWRlbnRpZmllcjsg
fQogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpIG92ZXJyaWRlOwpAQCAtNTYsNiArNjEsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHJl
YWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIHVpbnQ2NF90IHNvdXJjZU9iamVjdFN0
b3JlSWRlbnRpZmllcigpIGNvbnN0OworCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KQEAgLTY0LDE1ICs3MSwyMyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6ZGVyZWY7CiAKICAgICB2b2lkIGVucXVl
dWVFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZSBmaW5hbDsKIAogICAgIElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQogCisgICAgdm9pZCBy
ZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgc2V0UmVz
dWx0KGNvbnN0IElEQktleURhdGEqKTsKKyAgICB2b2lkIHNldFJlc3VsdFRvU3RydWN0dXJlZENs
b25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CisKIHByb3RlY3RlZDoKICAgICBJREJS
ZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
KyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYs
IElEQlRyYW5zYWN0aW9uJik7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QuCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWw7CiAgICAgCiAgICAgLy8gRXZlbnRUYXJnZXQuCiAgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+
OjpyZWYoKTsgfQpAQCAtODIsMTAgKzk3LDE2IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8SURC
QW55PiBtX3Jlc3VsdDsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247
CiAgICAgUmVmUHRyPERPTUVycm9yPiBtX2RvbUVycm9yOworICAgIElEQkVycm9yIG1faWRiRXJy
b3I7CiAKIHByaXZhdGU6CisgICAgdm9pZCBvbkVycm9yKCk7CisgICAgdm9pZCBvblN1Y2Nlc3Mo
KTsKKwogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgbV9jb25uZWN0aW9uOwogICAgIElEQlJl
c291cmNlSWRlbnRpZmllciBtX3Jlc291cmNlSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8SURCQW55
PiBtX3NvdXJjZTsKKyAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmlu
ZGV4IDgyZTU5NjIuLmQyZGZkYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSURCRXJyb3IuaCIKICNpbmNsdWRlICJJREJFdmVudERp
c3BhdGNoZXIuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQlJl
cXVlc3RJbXBsLmgiCiAjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC02MSw3ICs2Miw3
IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihJREJEYXRhYmFzZSYgZGF0YWJhc2Us
IGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYKICAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5m
byA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2RhdGFiYXNlLT5pbmZvKCkp
OwogCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25TdGF0ZTo6UnVubmluZzsKKyAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlOjpJbmFjdGl2ZTsKIH0KIAogSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlv
bigpCkBAIC0xMzAsMTIgKzEzMSwxNSBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5k
Rm9yUGFnZUNhY2hlKCkgY29uc3QKIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKIHsKKyAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkluYWN0aXZlKQorICAgICAgICByZXR1cm4gIW1fdHJhbnNhY3Rpb25PcGVyYXRp
b25RdWV1ZS5pc0VtcHR5KCkgfHwgIW1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuaXNFbXB0eSgp
OworCiAgICAgcmV0dXJuIG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZDsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNBY3RpdmUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6UnVubmlu
ZzsKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFj
dGl2ZTsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkg
Y29uc3QKQEAgLTE4MSw3ICsxODUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25U
aW1lckZpcmVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0FjdGl2ZSgp
KQorICAgIGlmICghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCiAgICAgICAgIGNvbW1pdCgpOwog
fQogCkBAIC0xODksMTAgKzE5Myw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXQiKTsKIAotICAgIGlm
IChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6UnVubmluZykgewotICAg
ICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKKyAg
ICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAK
ICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpDb21taXR0aW5nOwog
CkBAIC0yMTEsNyArMjEzLDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQWJvcnQoY29uc3Qg
SURCRXJyb3ImIGVycm9yKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
ZGlkQWJvcnQiKTsKIAotICAgIEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25TdGF0ZTo6QWJvcnRpbmcgfHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OlJ1bm5pbmcpOworICAgIGlmIChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6RmluaXNoZWQpCisgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YWJhc2UtPmRpZEFi
b3J0VHJhbnNhY3Rpb24oKnRoaXMpOwogCkBAIC0yOTQsNyArMjk3LDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYg
b3BlcmF0aW9uLAogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
T2JqZWN0U3RvcmVPblNlcnZlciIpOwogCi0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFT
U0VSVCghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpOwogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFu
Z2UoKSk7CiAKICAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0
U3RvcmUob3BlcmF0aW9uLCBpbmZvKTsKQEAgLTMwOSw2ICszMTIsODQgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXQKICAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7CiB9CiAKK1JlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElEQktleSYga2V5
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRk
Iik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsK
KworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRy
YW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAmcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9u
OjpkaWRHZXRSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZl
ciwgJmtleSk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGOjptb3ZlKG9wZXJhdGlvbikpOwor
CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXF1ZXN0KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlv
bjo6Z2V0UmVjb3JkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgUmVm
UHRyPElEQktleT4ga2V5KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
Z2V0UmVjb3JkT25TZXJ2ZXIiKTsKKworICAgIEFTU0VSVCghaXNGaW5pc2hlZE9yRmluaXNoaW5n
KCkpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmdldFJlY29yZChvcGVyYXRpb24sIGtleSk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyKFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIi
KTsKKworICAgIHJlcXVlc3QtPnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEu
cmVzdWx0RGF0YSgpKTsKKyAgICByZXF1ZXN0LT5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEp
OworfQorCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3Rv
cmUsIElEQktleSoga2V5LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRkIik7CisgICAgQVNTRVJUKGlz
QWN0aXZlKCkpOworICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKKyAgICBBU1NFUlQob2JqZWN0
U3RvcmUuaW5mbygpLmF1dG9JbmNyZW1lbnQoKSB8fCBrZXkpOworCisgICAgUmVmPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0
aGlzKTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24o
KnRoaXMsICZyZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2
ZXIsICZJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlciwga2V5LCAmdmFsdWUsIG92ZXJ3
cml0ZU1vZGUpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURjo6bW92ZShvcGVyYXRpb24pKTsK
KworICAgIHJldHVybiBXVEY6Om1vdmUocmVxdWVzdCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b246OnB1dE9yQWRkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgUmVm
UHRyPElEQktleT4ga2V5LCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29u
c3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUmIG92ZXJ3cml0ZU1vZGUpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyIik7
CisKKyAgICBBU1NFUlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKKyAgICBBU1NFUlQoIWlz
UmVhZE9ubHkoKSk7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkucHV0T3JBZGQob3BlcmF0aW9u
LCBrZXksIHZhbHVlLCBvdmVyd3JpdGVNb2RlKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6
ZGlkUHV0T3JBZGRPblNlcnZlcihSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIiKTsKKworICAgIHJlcXVlc3QtPnNldFJlc3VsdChy
ZXN1bHREYXRhLnJlc3VsdEtleSgpKTsKKyAgICByZXF1ZXN0LT5yZXF1ZXN0Q29tcGxldGVkKHJl
c3VsdERhdGEpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphY3RpdmF0ZSgpCit7CisgICAg
QVNTRVJUKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpVbnN0YXJ0ZWQg
fHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZlKTsKKyAg
ICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBY3RpdmU7Cit9CisKK3Zv
aWQgSURCVHJhbnNhY3Rpb246OmRlYWN0aXZhdGUoKQoreworICAgIGlmIChtX3N0YXRlID09IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6VW5zdGFydGVkIHx8IG1fc3RhdGUgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBY3RpdmUpCisgICAgICAgIG1fc3RhdGUgPSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZlOworCisgICAgc2NoZWR1bGVPcGVyYXRpb25U
aW1lcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IDVlYjc5YTUuLjRlOGM5NzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFu
c2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTgxLDEyICs4MSwxOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaWRDb21taXQoY29uc3QgSURCRXJyb3ImKTsKIAogICAgIGJvb2wgaXNWZXJzaW9uQ2hh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvLm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uTW9kZTo6VmVyc2lvbkNoYW5nZTsgfQorICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRP
bmx5OyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogCiAgICAgUmVmPElEQk9iamVjdFN0
b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKIAorICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IElEQk9iamVjdFN0b3JlJiwgSURCS2V5KiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1
ZXN0R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElE
QktleSYpOworCiAgICAgSURCQ29ubmVjdGlvblRvU2VydmVyJiBzZXJ2ZXJDb25uZWN0aW9uKCk7
CiAKKyAgICB2b2lkIGFjdGl2YXRlKCk7CisgICAgdm9pZCBkZWFjdGl2YXRlKCk7CisKIHByaXZh
dGU6CiAgICAgSURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmLCBjb25zdCBJREJUcmFuc2FjdGlv
bkluZm8mKTsKIApAQCAtMTA4LDYgKzExNSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRl
T2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25z
dCBJREJSZXN1bHREYXRhJik7CiAKKyAgICB2b2lkIHB1dE9yQWRkT25TZXJ2ZXIoVHJhbnNhY3Rp
b25PcGVyYXRpb24mLCBSZWZQdHI8SURCS2V5PiwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4sIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlJik7CisgICAgdm9p
ZCBkaWRQdXRPckFkZE9uU2VydmVyKFJlZlB0cjxJREJSZXF1ZXN0PiwgY29uc3QgSURCUmVzdWx0
RGF0YSYpOworCisgICAgdm9pZCBnZXRSZWNvcmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlv
biYsIFJlZlB0cjxJREJLZXk+KTsKKyAgICB2b2lkIGRpZEdldFJlY29yZE9uU2VydmVyKFJlZlB0
cjxJREJSZXF1ZXN0PiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCiAgICAgUmVmPElEQkRhdGFi
YXNlPiBtX2RhdGFiYXNlOwogICAgIElEQlRyYW5zYWN0aW9uSW5mbyBtX2luZm87CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9vcmlnaW5hbERhdGFiYXNlSW5mbzsKQEAg
LTEyMiw2ICsxMzUsMjYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRp
ZmllciwgUmVmUHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPj4gbV90cmFuc2FjdGlvbk9wZXJhdGlv
bk1hcDsKIH07CiAKK2NsYXNzIFRyYW5zYWN0aW9uQWN0aXZhdG9yIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShUcmFuc2FjdGlvbkFjdGl2YXRvcik7CitwdWJsaWM6CisgICAgVHJhbnNhY3Rp
b25BY3RpdmF0b3IoSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV90cmFuc2FjdGlvbikK
KyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFjdGl2YXRlKCk7CisgICAgfQorCisgICAgflRy
YW5zYWN0aW9uQWN0aXZhdG9yKCkKKyAgICB7CisgICAgICAgIGlmIChtX3RyYW5zYWN0aW9uKQor
ICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGVhY3RpdmF0ZSgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBJREJUcmFuc2FjdGlvbiogbV90cmFuc2FjdGlvbjsKK307CisKIH0gLy8gbmFtZXNw
YWNlIElEQkNsaWVudAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9u
T3BlcmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGE5OTUx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRyYW5zYWN0aW9uT3BlcmF0aW9uLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIElEQkNsaWVudCB7CisKK1RyYW5zYWN0aW9uT3BlcmF0aW9uOjpUcmFuc2FjdGlv
bk9wZXJhdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQlJlcXVlc3QqIHJlcXVl
c3QpCisgICAgOiBUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbikKK3sKKyAgICBpZiAo
IXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVy
ID0gcmVxdWVzdC0+c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIElEQkNsaWVudAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCmluZGV4IDM2
NDQwZjYuLmM5OWQ4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQlJl
cXVlc3RJbXBsLmgiCiAjaW5jbHVkZSAiSURCUmVzb3VyY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCiAKQEAgLTUxLDYgKzUyLDggQEAgcHVibGljOgogCiAg
ICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIHRyYW5zYWN0aW9u
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmluZm8oKS5pZGVudGlm
aWVyKCk7IH0KKyAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdFN0b3JlSWRlbnRpZmllcjsgfQorICAgIElEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgog
ICAgIFRyYW5zYWN0aW9uT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKQEAg
LTU5LDggKzYyLDExIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCisgICAgVHJhbnNhY3Rp
b25PcGVyYXRpb24oSURCVHJhbnNhY3Rpb24mLCBJREJSZXF1ZXN0Kik7CisKICAgICBSZWY8SURC
VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1f
aWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCBtX29iamVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsK
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fcGVyZm9ybUZ1bmN0aW9uOwogICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCUmVzdWx0RGF0YSYpPiBtX2NvbXBsZXRlRnVuY3Rpb247
CiB9OwpAQCAtODEsNiArODcsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgKCZtX3RyYW5zYWN0
aW9uLmdldCgpLT4qY29tcGxldGVNZXRob2QpKHJlc3VsdERhdGEpOwogICAgICAgICB9OwogICAg
IH0KKworICAgIFRyYW5zYWN0aW9uT3BlcmF0aW9uSW1wbChJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0LCB2b2lkIChJREJUcmFuc2FjdGlvbjo6
KmNvbXBsZXRlTWV0aG9kKShSZWZQdHI8SURCUmVxdWVzdD4sIGNvbnN0IElEQlJlc3VsdERhdGEm
KSwgdm9pZCAoSURCVHJhbnNhY3Rpb246OipwZXJmb3JtTWV0aG9kKShUcmFuc2FjdGlvbk9wZXJh
dGlvbiYsIEFyZ3VtZW50cy4uLiksIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbiwgcmVxdWVzdC5nZXQoKSkKKyAgICB7
CisgICAgICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCisgICAgICAgIFJlZlB0cjxU
cmFuc2FjdGlvbk9wZXJhdGlvbj4gc2VsZih0aGlzKTsKKyAgICAgICAgbV9wZXJmb3JtRnVuY3Rp
b24gPSBbc2VsZiwgdGhpcywgcGVyZm9ybU1ldGhvZCwgYXJndW1lbnRzLi4uXSB7CisgICAgICAg
ICAgICAoJm1fdHJhbnNhY3Rpb24uZ2V0KCktPipwZXJmb3JtTWV0aG9kKSgqdGhpcywgYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgfTsKKworICAgICAgICBtX2NvbXBsZXRlRnVuY3Rpb24gPSBbc2Vs
ZiwgdGhpcywgcmVxdWVzdCwgY29tcGxldGVNZXRob2RdKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpIHsKKyAgICAgICAgICAgICgmbV90cmFuc2FjdGlvbi5nZXQoKS0+KmNvbXBsZXRl
TWV0aG9kKShyZXF1ZXN0LCByZXN1bHREYXRhKTsKKyAgICAgICAgfTsKKyAgICB9CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAxPgpAQCAtOTQsNiArMTE1LDMyIEBAIFJl
ZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG9wZXJhdGlvbik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE1Q
MSwgdHlwZW5hbWUgUDE+CitSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+IGNyZWF0ZVRyYW5z
YWN0aW9uT3BlcmF0aW9uKAorICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCwKKyAgICB2b2lkIChJREJUcmFuc2FjdGlvbjo6KmNv
bXBsZXRlKShSZWZQdHI8SURCUmVxdWVzdD4sIGNvbnN0IElEQlJlc3VsdERhdGEmKSwKKyAgICB2
b2lkIChJREJUcmFuc2FjdGlvbjo6KnBlcmZvcm0pKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgTVAx
KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKK3sKKyAgICBhdXRvIG9wZXJhdGlvbiA9IG5l
dyBUcmFuc2FjdGlvbk9wZXJhdGlvbkltcGw8TVAxPih0cmFuc2FjdGlvbiwgcmVxdWVzdCwgY29t
cGxldGUsIHBlcmZvcm0sIHBhcmFtZXRlcjEpOworICAgIHJldHVybiBhZG9wdFJlZihvcGVyYXRp
b24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUg
TVAzLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzPgorUmVmUHRyPFRyYW5z
YWN0aW9uT3BlcmF0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigKKyAgICBJREJUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QsCisg
ICAgdm9pZCAoSURCVHJhbnNhY3Rpb246Oipjb21wbGV0ZSkoUmVmUHRyPElEQlJlcXVlc3Q+LCBj
b25zdCBJREJSZXN1bHREYXRhJiksCisgICAgdm9pZCAoSURCVHJhbnNhY3Rpb246OipwZXJmb3Jt
KShUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIE1QMSwgTVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJh
bWV0ZXIzKQoreworICAgIGF1dG8gb3BlcmF0aW9uID0gbmV3IFRyYW5zYWN0aW9uT3BlcmF0aW9u
SW1wbDxNUDEsIE1QMiwgTVAzPih0cmFuc2FjdGlvbiwgcmVxdWVzdCwgY29tcGxldGUsIHBlcmZv
cm0sIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMpOworICAgIHJldHVybiBhZG9w
dFJlZihvcGVyYXRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDdlM2U1YzAuLjg3Yzg0Yjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJC
YWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTMzLDkgKzMzLDExIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSURCS2V5RGF0YTsKIGNsYXNzIElEQk9iamVjdFN0b3JlSW5mbzsKIGNs
YXNzIElEQlJlc291cmNlSWRlbnRpZmllcjsKIGNsYXNzIElEQlRyYW5zYWN0aW9uSW5mbzsKK2Ns
YXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIApAQCAt
NTAsNiArNTIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSURCRXJyb3IgY29tbWl0VHJhbnNh
Y3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIp
ID0gMDsKIAogICAgIHZpcnR1YWwgSURCRXJyb3IgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0c0luT2JqZWN0
U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGJvb2wm
IGtleUV4aXN0cykgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmKSA9IDA7CisgICAgdmlydHVh
bCBJREJFcnJvciBwdXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURC
S2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkgPSAwOworICAgIHZp
cnR1YWwgSURCRXJyb3IgZ2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleURhdGEmLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNw
cAppbmRleCBmOTg1MzdlLi40MzFhNGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50
LmNwcApAQCAtNjgsNiArNjgsMTYgQEAgdm9pZCBJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZENy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdCkKICAgICBtX2RlbGVn
YXRlLT5kaWRDcmVhdGVPYmplY3RTdG9yZShyZXN1bHQpOwogfQogCit2b2lkIElEQkNvbm5lY3Rp
b25Ub0NsaWVudDo6ZGlkUHV0T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQorewor
ICAgIG1fZGVsZWdhdGUtPmRpZFB1dE9yQWRkKHJlc3VsdCk7Cit9CisKK3ZvaWQgSURCQ29ubmVj
dGlvblRvQ2xpZW50OjpkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQor
eworICAgIG1fZGVsZWdhdGUtPmRpZEdldFJlY29yZChyZXN1bHQpOworfQorCiB2b2lkIElEQkNv
bm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikK
IHsKICAgICBtX2RlbGVnYXRlLT5kaWRDb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGVycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaAppbmRleCAyNWNlNTEy
Li5iZmY4NTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCkBAIC01Myw2ICs1Myw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAg
ICAgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZENy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIGRpZFB1dE9y
QWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIGRpZEdldFJlY29yZChjb25zdCBJ
REJSZXN1bHREYXRhJik7CiAKICAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uJiwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25u
ZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmgKaW5kZXggY2E3ODg3Yy4u
MTAyN2Y0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmgK
QEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRBYm9ydFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0VHJhbnNh
Y3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXN1bHREYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRQdXRP
ckFkZChjb25zdCBJREJSZXN1bHREYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRS
ZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBmaXJl
VmVyc2lvbkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIHVpbnQ2NF90
IHJlcXVlc3RlZFZlcnNpb24pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA0OTMwMmY5Li4xYzQwMTg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcApAQCAtMTY4LDYgKzE2OCwyOCBAQCB2b2lkIElEQlNlcnZlcjo6Y3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJP
YgogICAgIHRyYW5zYWN0aW9uLT5jcmVhdGVPYmplY3RTdG9yZShyZXF1ZXN0RGF0YSwgaW5mbyk7
CiB9CiAKK3ZvaWQgSURCU2VydmVyOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRh
QnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92
ZXJ3cml0ZU1vZGUpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6cHV0T3JBZGQi
KTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQocmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5
RGF0YSwgdmFsdWVEYXRhLCBvdmVyd3JpdGVNb2RlKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6Omdl
dFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURh
dGEmIGtleURhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6Z2V0UmVjb3Jk
Iik7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+Z2V0UmVjb3JkKHJlcXVlc3REYXRhLCBr
ZXlEYXRhKTsKK30KKwogdm9pZCBJREJTZXJ2ZXI6OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJTZXJ2ZXI6OmNvbW1pdFRyYW5zYWN0aW9uIik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggNGQy
YTgzYy4uZmYyNjk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogICAgIHZv
aWQgY29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CiAgICAg
dm9pZCBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQk9i
amVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEm
LCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0
YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgZ2V0UmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYpOwogICAgIHZvaWQg
ZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2VkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50
aWZpZXIpOwogCiAgICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxDcm9z
c1RocmVhZFRhc2s+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbi5jcHAKaW5kZXggNWM0NDc3Zi4uYzBkY2ZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUg
Ik1lbW9yeU9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKQEAgLTY3LDEwICs2
OCwzNCBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphZGROZXdPYmplY3RT
dG9yZShNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0UwogICAgIG9iamVjdFN0b3JlLndyaXRlVHJh
bnNhY3Rpb25TdGFydGVkKCp0aGlzKTsKIH0KIAordm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbjo6cmVjb3JkVmFsdWVDaGFuZ2VkKE1lbW9yeU9iamVjdFN0b3JlJiBvYmplY3RTdG9y
ZSwgY29uc3QgSURCS2V5RGF0YSYga2V5KQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5j
b250YWlucygmb2JqZWN0U3RvcmUpKTsKKworICAgIGlmIChtX2lzQWJvcnRpbmcpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9vcmlnaW5hbFZhbHVlcy5hZGQoJm9i
amVjdFN0b3JlLCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPEtleVZhbHVl
TWFwPigpOworCisgICAgYXV0byogbWFwID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKKworICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAtPmFkZChrZXksIFRocmVh
ZFNhZmVEYXRhQnVmZmVyKCkpOworICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBvYmplY3RTdG9yZS52YWx1ZUZvcktleShrZXkpOworICAgIH0KK30KKwogdm9pZCBNZW1vcnlC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJN
ZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQoKSIpOwogCisgICAgVGVtcG9yYXJ5
Q2hhbmdlPGJvb2w+IGNoYW5nZShtX2lzQWJvcnRpbmcsIHRydWUpOworCiAgICAgaWYgKG1fb3Jp
Z2luYWxEYXRhYmFzZUluZm8pIHsKICAgICAgICAgQVNTRVJUKG1faW5mby5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwogICAgICAgICBtX2JhY2tp
bmdTdG9yZS5zZXREYXRhYmFzZUluZm8oKm1fb3JpZ2luYWxEYXRhYmFzZUluZm8pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAppbmRleCBhYThhYTYwLi4yOTVi
YmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaApAQCAt
MjksNyArMjksMTAgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUg
IklEQkRhdGFiYXNlSW5mby5oIgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkluZm8uaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArNDEsOCBAQCBuYW1lc3BhY2UgSURCU2VydmVyIHsK
IGNsYXNzIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTsKIGNsYXNzIE1lbW9yeU9iamVjdFN0b3JlOwog
Cit0eXBlZGVmIEhhc2hNYXA8SURCS2V5RGF0YSwgVGhyZWFkU2FmZURhdGFCdWZmZXIsIElEQktl
eURhdGFIYXNoLCBJREJLZXlEYXRhSGFzaFRyYWl0cz4gS2V5VmFsdWVNYXA7CisKIGNsYXNzIE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uIHsKICAgICBmcmllbmQgc3RkOjp1bmlxdWVfcHRy
PE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uPiBzdGQ6Om1ha2VfdW5pcXVlPE1lbW9yeUJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uPihXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tp
bmdTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uSW5mbyYpOwogcHVibGljOgpA
QCAtNTEsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURCRGF0YWJhc2VJbmZvJiBvcmln
aW5hbERhdGFiYXNlSW5mbygpIGNvbnN0OwogCiAgICAgdm9pZCBhZGROZXdPYmplY3RTdG9yZShN
ZW1vcnlPYmplY3RTdG9yZSYpOworICAgIHZvaWQgcmVjb3JkVmFsdWVDaGFuZ2VkKE1lbW9yeU9i
amVjdFN0b3JlJiwgY29uc3QgSURCS2V5RGF0YSYpOwogCiAgICAgdm9pZCBhYm9ydCgpOwogICAg
IHZvaWQgY29tbWl0KCk7CkBAIC02NiwxMCArNzIsMTMgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBtX29yaWdpbmFsRGF0YWJhc2VJbmZvOwogCiAgICAg
Ym9vbCBtX2luUHJvZ3Jlc3MgeyB0cnVlIH07CisgICAgYm9vbCBtX2lzQWJvcnRpbmcgeyBmYWxz
ZSB9OwogCiAgICAgSGFzaFNldDxNZW1vcnlPYmplY3RTdG9yZSo+IG1fb2JqZWN0U3RvcmVzOwog
ICAgIEhhc2hTZXQ8TWVtb3J5T2JqZWN0U3RvcmUqPiBtX3ZlcnNpb25DaGFuZ2VBZGRlZE9iamVj
dFN0b3JlczsKIAorICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3RvcmUqLCBzdGQ6OnVuaXF1ZV9w
dHI8S2V5VmFsdWVNYXA+PiBtX29yaWdpbmFsVmFsdWVzOworCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggODU3MmJk
My4uZmUyZmExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTEzNiw2
ICsxMzYsNjkgQEAgdm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbW92ZU9iamVjdFN0b3Jl
Rm9yVmVyc2lvbkNoYW5nZUFib3J0KE1lbW9yeU9iamVjdFMKICAgICBtX29iamVjdFN0b3Jlcy5y
ZW1vdmUob2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIoKSk7CiB9CiAKKworSURCRXJyb3Ig
TWVtb3J5SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQoreworICAgIExPRyhJbmRleGVk
REIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKKwor
ICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworCisgICAgTWVtb3J5T2JqZWN0U3Rv
cmUqIG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWRlbnRpZmll
cik7CisgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0U3RvcmUpOworCisgICAga2V5RXhpc3RzID0g
b2JqZWN0U3RvcmUtPmNvbnRhaW5zUmVjb3JkKGtleURhdGEpOworICAgIHJldHVybiBJREJFcnJv
cigpOworfQorCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQorewor
ICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCIp
OworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisKKyAgICBNZW1vcnlPYmpl
Y3RTdG9yZSogb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChvYmplY3RTdG9yZSk7CisgICAgUkVMRUFTRV9B
U1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CisK
KyAgICBvYmplY3RTdG9yZS0+ZGVsZXRlUmVjb3JkKGtleURhdGEpOworICAgIHJldHVybiBJREJF
cnJvcigpOworfQorCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIk1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkIik7CisKKyAgICBBU1NFUlQob2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAgICAg
ICByZXR1cm4gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5rbm93biwgV1RGOjpBU0NJSUxp
dGVyYWwoIk5vIGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gZm91bmQgdG8gZ2V0IHJlY29yZCIp
KTsKKworICAgIE1lbW9yeU9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVz
LmdldChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAg
ICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpVbmtub3duLCBXVEY6OkFTQ0lJ
TGl0ZXJhbCgiTm8gYmFja2luZyBzdG9yZSBvYmplY3Qgc3RvcmUgZm91bmQgdG8gcHV0IHJlY29y
ZCIpKTsKKworICAgIG9iamVjdFN0b3JlLT5wdXRSZWNvcmQoKnRyYW5zYWN0aW9uLCBrZXlEYXRh
LCB2YWx1ZSk7CisgICAgcmV0dXJuIElEQkVycm9yKCk7Cit9CisKK0lEQkVycm9yIE1lbW9yeUlE
QkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIFRocmVhZFNhZmVEYXRhQnVmZmVyJiBvdXRWYWx1ZSkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsK
KworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworCisgICAgaWYgKCFtX3RyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4g
SURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5rbm93biwgV1RGOjpBU0NJSUxpdGVyYWwoIk5v
IGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gZm91bmQgdG8gZ2V0IHJlY29yZCIpKTsKKworICAg
IE1lbW9yeU9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAgICAgIHJldHVy
biBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpVbmtub3duLCBXVEY6OkFTQ0lJTGl0ZXJhbCgi
Tm8gYmFja2luZyBzdG9yZSBvYmplY3Qgc3RvcmUgZm91bmQiKSk7CisKKyAgICBvdXRWYWx1ZSA9
IG9iamVjdFN0b3JlLT52YWx1ZUZvcktleShrZXlEYXRhKTsKKyAgICByZXR1cm4gSURCRXJyb3Io
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRleCAyNjk1OGZkLi40MzE4NzE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBAIC01Myw2ICs1MywxMCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBJREJFcnJvciBhYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBvdmVycmlkZSBmaW5hbDsKICAgICB2
aXJ0dWFsIElEQkVycm9yIGNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFs
IElEQkVycm9yIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0
cykgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJFcnJvciBkZWxldGVSZWNvcmQoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYpIG92ZXJyaWRlIGZpbmFs
OworICAgIHZpcnR1YWwgSURCRXJyb3IgcHV0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUp
IG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0UmVjb3JkKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBUaHJlYWRTYWZlRGF0YUJ1ZmZl
ciYgb3V0VmFsdWUpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9pZCByZW1vdmVPYmplY3RTdG9y
ZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9i
amVjdFN0b3JlLmNwcAppbmRleCBkZmFjNzgwLi4xZGQ3MTdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RT
dG9yZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
IAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsK
QEAgLTY0LDYgKzY1LDU2IEBAIHZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OndyaXRlVHJhbnNhY3Rp
b25GaW5pc2hlZChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYKICAgICBtX3dyaXRlVHJh
bnNhY3Rpb24gPSBudWxscHRyOwogfQogCitib29sIE1lbW9yeU9iamVjdFN0b3JlOjpjb250YWlu
c1JlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCit7CisgICAgaWYgKCFtX2tleVZhbHVlU3Rv
cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2tleVZhbHVlU3RvcmUt
PmNvbnRhaW5zKGtleSk7Cit9CisKK3ZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZVJlY29y
ZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeU9i
amVjdFN0b3JlOjpkZWxldGVSZWNvcmQiKTsKKworICAgIEFTU0VSVChtX3dyaXRlVHJhbnNhY3Rp
b24pOworICAgIG1fd3JpdGVUcmFuc2FjdGlvbi0+cmVjb3JkVmFsdWVDaGFuZ2VkKCp0aGlzLCBr
ZXkpOworCisgICAgaWYgKCFtX2tleVZhbHVlU3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fa2V5VmFsdWVTdG9yZS0+cmVtb3ZlKGtleSk7CisgICAgaWYgKG1fb3JkZXJlZEtleXMpCisg
ICAgICAgIG1fb3JkZXJlZEtleXMtPmVyYXNlKGtleSk7Cit9CisKK3ZvaWQgTWVtb3J5T2JqZWN0
U3RvcmU6OnB1dFJlY29yZChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVy
JiB2YWx1ZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5T2JqZWN0U3RvcmU6OnB1dFJl
Y29yZCIpOworCisgICAgQVNTRVJUKG1fd3JpdGVUcmFuc2FjdGlvbik7CisgICAgQVNTRVJUX1VO
VVNFRCh0cmFuc2FjdGlvbiwgbV93cml0ZVRyYW5zYWN0aW9uID09ICZ0cmFuc2FjdGlvbik7CisK
KyAgICBtX3dyaXRlVHJhbnNhY3Rpb24tPnJlY29yZFZhbHVlQ2hhbmdlZCgqdGhpcywga2V5RGF0
YSk7CisKKyAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkKKyAgICAgICAgbV9rZXlWYWx1ZVN0b3Jl
ID0gc3RkOjptYWtlX3VuaXF1ZTxLZXlWYWx1ZU1hcD4oKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
bV9rZXlWYWx1ZVN0b3JlLT5zZXQoa2V5RGF0YSwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSAmJiBtX29yZGVyZWRLZXlzKQorICAgICAgICBtX29yZGVyZWRLZXlzLT5pbnNlcnQo
a2V5RGF0YSk7Cit9CisKK1RocmVhZFNhZmVEYXRhQnVmZmVyIE1lbW9yeU9iamVjdFN0b3JlOjp2
YWx1ZUZvcktleShjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKSBjb25zdAoreworICAgIExPRyhJ
bmRleGVkREIsICJNZW1vcnlPYmplY3RTdG9yZTo6dmFsdWVGb3JLZXkiKTsKKworICAgIGlmICgh
bV9rZXlWYWx1ZVN0b3JlKQorICAgICAgICByZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIoKTsK
KworICAgIHJldHVybiBtX2tleVZhbHVlU3RvcmUtPmdldChrZXlEYXRhKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSURCU2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9y
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVj
dFN0b3JlLmgKaW5kZXggMzFlMmU0ZC4uOGRiNmI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgK
QEAgLTI4LDEzICsyOCwyMiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
bmNsdWRlICJJREJLZXlEYXRhLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbmZvLmgiCisj
aW5jbHVkZSAiVGhyZWFkU2FmZURhdGFCdWZmZXIuaCIKKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXlE
YXRhOworCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAogY2xhc3MgTWVtb3J5QmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb247CiAKK3R5cGVkZWYgSGFzaE1hcDxJREJLZXlEYXRhLCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciwgSURCS2V5RGF0YUhhc2gsIElEQktleURhdGFIYXNoVHJhaXRzPiBLZXlWYWx1ZU1h
cDsKKwogY2xhc3MgTWVtb3J5T2JqZWN0U3RvcmUgewogICAgIGZyaWVuZCBzdGQ6OnVuaXF1ZV9w
dHI8TWVtb3J5T2JqZWN0U3RvcmU+IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5T2JqZWN0U3RvcmU+
KGNvbnN0IFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbyYpOwogcHVibGljOgpAQCAtNDUsNiAr
NTQsMTIgQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVUcmFuc2FjdGlvblN0YXJ0ZWQoTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIHdyaXRlVHJhbnNhY3Rpb25GaW5p
c2hlZChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiYpOwogCisgICAgYm9vbCBjb250YWlu
c1JlY29yZChjb25zdCBJREJLZXlEYXRhJik7CisgICAgdm9pZCBkZWxldGVSZWNvcmQoY29uc3Qg
SURCS2V5RGF0YSYpOworICAgIHZvaWQgcHV0UmVjb3JkKE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2
YWx1ZSk7CisKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZUZvcktleShjb25zdCBJREJL
ZXlEYXRhJikgY29uc3Q7CisKICAgICBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8oKSBj
b25zdCB7IHJldHVybiBtX2luZm87IH0KIAogcHJpdmF0ZToKQEAgLTUzLDYgKzY4LDkgQEAgcHJp
dmF0ZToKICAgICBJREJPYmplY3RTdG9yZUluZm8gbV9pbmZvOwogCiAgICAgTWVtb3J5QmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24qIG1fd3JpdGVUcmFuc2FjdGlvbiB7IG51bGxwdHIgfTsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4gbV9rZXlWYWx1ZVN0b3JlOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxzdGQ6OnNldDxJREJLZXlEYXRhPj4gbV9vcmRlcmVkS2V5czsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggNTYy
MzZkMC4uNjhmZjVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xMzksNiArMTM5
LDIwIEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKEVycm9yQ2Fs
bGJhY2sgY2FsbGJhY2spCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKK3VpbnQ2NF90IFVu
aXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykK
K3sKKyAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50
aWZpZXIoKTsKKyAgICBtX2tleURhdGFDYWxsYmFja3Muc2V0KGlkZW50aWZpZXIsIGNhbGxiYWNr
KTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKwordWludDY0X3QgVW5pcXVlSURCRGF0YWJh
c2U6OnN0b3JlQ2FsbGJhY2soVmFsdWVEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgdWlu
dDY0X3QgaWRlbnRpZmllciA9IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7Cisg
ICAgbV92YWx1ZURhdGFDYWxsYmFja3Muc2V0KGlkZW50aWZpZXIsIGNhbGxiYWNrKTsKKyAgICBy
ZXR1cm4gaWRlbnRpZmllcjsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24oKQogewogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIik7CkBAIC0yNTEs
NiArMjY1LDEwOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAgIHBlcmZvcm1FcnJvckNh
bGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURh
dGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtl
eURhdGFDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkIik7
CisKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFjayhjYWxsYmFjayk7Cisg
ICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lELCByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCksIGtleURhdGEsIHZhbHVlRGF0YSwgb3ZlcndyaXRlTW9kZSkpOworfQorCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlE
YXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRleGVkREI6Ok9i
amVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQoreworICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUHV0T3JBZGQiKTsKKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAg
QVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisKKyAgICBJREJLZXlEYXRhIHVzZWRLZXk7
CisgICAgSURCRXJyb3IgZXJyb3I7CisKKyAgICBhdXRvIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0
YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOworICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKSB7CisgICAgICAgIGVycm9yID0gSURCRXJy
b3IoSURCRXhjZXB0aW9uQ29kZTo6SW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiT2Jq
ZWN0IHN0b3JlIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBzdG9yZSIpKTsKKyAgICAg
ICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiAha2V5RGF0YS5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgZ2VuZXJhdGVkIGtleSBzdXBw
b3J0IGdvZXMKKyAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpVbmtu
b3duLCBBU0NJSUxpdGVyYWwoIktleSBnZW5lcmF0b3JzIG5vdCBzdXBwb3J0ZWQgeWV0IikpOwor
ICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdXNlZEtleSA9IGtleURhdGE7CisKKyAgICBpZiAob3ZlcndyaXRlTW9kZSA9PSBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUpIHsKKyAgICAgICAg
Ym9vbCBrZXlFeGlzdHM7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0
c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHVzZWRLZXksIGtleUV4aXN0cyk7CisgICAgICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBr
ZXlFeGlzdHMpCisgICAgICAgICAgICBlcnJvciA9IElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6
OkNvbnN0cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhl
IG9iamVjdCBzdG9yZSIpKTsKKworICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAg
ICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gMy40LjEgT2JqZWN0IFN0b3JlIFN0b3JhZ2UgT3BlcmF0
aW9uCisgICAgLy8gLi4uSWYgYSByZWNvcmQgYWxyZWFkeSBleGlzdHMgaW4gc3RvcmUgLi4uCisg
ICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3JlIHVzaW5nIHRoZSBzdGVwcyBm
b3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9yZS4uLgorICAgIC8vIFRoaXMg
aXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcgaXQgZnJvbSBmcm9tIHRoZSBv
YmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFwcHJvcHJpYXRlIGluZGV4ZXMu
CisgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmVjb3JkKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2VkS2V5KTsKKyAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKSB7CisgICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1
dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXksIHZhbHVl
RGF0YSk7CisKKyAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworfQorCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCIpOworCisgICAgcGVyZm9ybUtl
eURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHRLZXkpOworfQor
Cit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBWYWx1ZURhdGFDYWxsYmFj
ayBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZCIpOworCisgICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJhY2spOworICAgIG1fc2VydmVy
LnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
a2V5RGF0YSkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3Jk
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dFJlY29yZCIpOworCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQob2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKTsKKworICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIHZhbHVlRGF0
YTsKKyAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleURhdGEsIHZhbHVlRGF0
YSk7CisKKyAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHZhbHVlRGF0YSkpOworfQorCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgcmVz
dWx0RGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQiKTsKKwor
ICAgIHBlcmZvcm1WYWx1ZURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBy
ZXN1bHREYXRhKTsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rp
b24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIEVycm9yQ2FsbGJh
Y2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTM4MCw2ICs0
OTYsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2sodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIGNhbGxiYWNrKGVycm9yKTsKIH0K
IAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCS2V5
RGF0YSYgcmVzdWx0S2V5KQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxsYmFj
a3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOworICAgIEFTU0VSVChjYWxsYmFjayk7CisgICAg
Y2FsbGJhY2soZXJyb3IsIHJlc3VsdEtleSk7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1WYWx1ZURhdGFDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHJlc3VsdERh
dGEpCit7CisgICAgYXV0byBjYWxsYmFjayA9IG1fdmFsdWVEYXRhQ2FsbGJhY2tzLnRha2UoY2Fs
bGJhY2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoY2FsbGJhY2spOworICAgIGNhbGxiYWNrKGVy
cm9yLCByZXN1bHREYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggNzkwZGIxZS4uMmIz
OTBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUluZm8uaCIK
ICNpbmNsdWRlICJJREJTZXJ2ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0
YUJ1ZmZlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5o
IgpAQCAtNTIsNiArNTMsOCBAQCBjbGFzcyBJREJDb25uZWN0aW9uVG9DbGllbnQ7CiBjbGFzcyBJ
REJTZXJ2ZXI7CiAKIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IElEQkVycm9yJik+
IEVycm9yQ2FsbGJhY2s7Cit0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBJREJFcnJv
ciYsIGNvbnN0IElEQktleURhdGEmKT4gS2V5RGF0YUNhbGxiYWNrOwordHlwZWRlZiBzdGQ6OmZ1
bmN0aW9uPHZvaWQoY29uc3QgSURCRXJyb3ImLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYp
PiBWYWx1ZURhdGFDYWxsYmFjazsKIAogY2xhc3MgVW5pcXVlSURCRGF0YWJhc2UgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8VW5pcXVlSURCRGF0YWJhc2U+IHsKIHB1YmxpYzoKQEAgLTY2
LDYgKzY5LDggQEAgcHVibGljOgogICAgIElEQlNlcnZlciYgc2VydmVyKCkgeyByZXR1cm4gbV9z
ZXJ2ZXI7IH0KIAogICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIEVycm9yQ2FsbGJhY2spOwor
ICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRh
JiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7CisgICAgdm9pZCBnZXRSZWNv
cmQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgVmFsdWVEYXRhQ2Fs
bGJhY2spOwogICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCB0cmFu
c2FjdGlvbkRlc3Ryb3llZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7CkBAIC04MSwy
MiArODYsMzAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uKCk7CiAgICAgdm9pZCBub3RpZnlDb25uZWN0aW9uc09mVmVyc2lvbkNoYW5nZSgpOwogCi0g
ICAgdWludDY0X3Qgc3RvcmVDYWxsYmFjayhFcnJvckNhbGxiYWNrKTsKLSAgICAKICAgICAvLyBE
YXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9ucwogICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICB2b2lkIHBlcmZvcm1Db21taXRUcmFuc2Fj
dGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1BYm9ydFRyYW5z
YWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgYmVnaW5UcmFuc2FjdGlv
bkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwogICAgIHZvaWQgcGVy
Zm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9i
amVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0
YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKKyAgICB2b2lkIHBlcmZvcm1HZXRSZWNvcmQodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlEYXRhJik7CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFja3MKICAgICB2b2lkIGRp
ZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJik7CiAgICAgdm9pZCBkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQgZGlkUGVy
Zm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
LCBjb25zdCBJREJLZXlEYXRhJik7CisgICAgdm9pZCBkaWRQZXJmb3JtR2V0UmVjb3JkKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciYpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZFBl
cmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCRXJyb3ImLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
Zmllcik7CiAKKyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrKEVycm9yQ2FsbGJhY2spOworICAg
IHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2soS2V5RGF0YUNhbGxiYWNrKTsKKyAgICB1aW50NjRfdCBz
dG9yZUNhbGxiYWNrKFZhbHVlRGF0YUNhbGxiYWNrKTsKKwogICAgIHZvaWQgcGVyZm9ybUVycm9y
Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOwor
ICAgIHZvaWQgcGVyZm9ybUtleURhdGFDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCS2V5RGF0YSYpOworICAgIHZvaWQgcGVyZm9y
bVZhbHVlRGF0YUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
RXJyb3ImLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogCiAgICAgdm9pZCBpbnZva2VU
cmFuc2FjdGlvblNjaGVkdWxlcigpOwogICAgIHZvaWQgdHJhbnNhY3Rpb25TY2hlZHVsaW5nVGlt
ZXJGaXJlZCgpOwpAQCAtMTE3LDYgKzEzMCw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVf
cHRyPElEQkRhdGFiYXNlSW5mbz4gbV9kYXRhYmFzZUluZm87CiAKICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBFcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tzOworICAgIEhhc2hNYXA8dWludDY0
X3QsIEtleURhdGFDYWxsYmFjaz4gbV9rZXlEYXRhQ2FsbGJhY2tzOworICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFZhbHVlRGF0YUNhbGxiYWNrPiBtX3ZhbHVlRGF0YUNhbGxiYWNrczsKIAogICAgIFRp
bWVyIG1fdHJhbnNhY3Rpb25TY2hlZHVsaW5nVGltZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4IDg5YzJhNmMuLmNiZjZhNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKQEAgLTgwLDYgKzgw
LDExIEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXNWZXJzaW9uQ2hhbmdl
KCkgY29uc3QKICAgICByZXR1cm4gbV90cmFuc2FjdGlvbkluZm8ubW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlOwogfQogCitib29sIFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb246OmlzUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3Ry
YW5zYWN0aW9uSW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRP
bmx5OworfSAgIAorCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNvbW1pdCgp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNv
bW1pdCIpOwpAQCAtMTA4LDYgKzExMyw0MSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZQogICAg
IH0pOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0
YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBMT0coSW5kZXhlZERC
LCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cHV0T3JBZGQiKTsKKworICAgIEFTU0VS
VCghaXNSZWFkT25seSgpKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmll
cigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKworICAgIFJlZlB0
cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBzZWxmKHRoaXMpOworICAgIG1fZGF0YWJh
c2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnB1dE9yQWRkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2
YWx1ZURhdGEsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCBzZWxmLCByZXF1ZXN0RGF0YV0oY29uc3Qg
SURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKKyAgICAgICAgTE9HKElu
ZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIChjYWxsYmFj
aykiKTsKKworICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkUHV0T3JBZGQoSURCUmVzdWx0
RGF0YTo6cHV0T3JBZGRTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIGtl
eSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29u
bmVjdGlvblRvQ2xpZW50KCkuZGlkUHV0T3JBZGQoSURCUmVzdWx0RGF0YTo6ZXJyb3IocmVxdWVz
dERhdGEucmVxdWVzdElkZW50aWZpZXIoKSwgZXJyb3IpKTsKKyAgICB9KTsKK30KKwordm9pZCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQoreworICAgIExPRyhJ
bmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQiKTsKKwor
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEu
dHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOworCisgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24+IHNlbGYodGhpcyk7CisgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFi
YXNlKCkuZ2V0UmVjb3JkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCBbdGhpcywgc2VsZiwgcmVxdWVz
dERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXIm
IHZhbHVlRGF0YSkgeworICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsKKworICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCisgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRv
Q2xpZW50KCkuZGlkR2V0UmVjb3JkKElEQlJlc3VsdERhdGE6OmdldFJlY29yZFN1Y2Nlc3MocmVx
dWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSwgdmFsdWVEYXRhKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5jb25uZWN0aW9uVG9DbGllbnQoKS5k
aWRHZXRSZWNvcmQoSURCUmVzdWx0RGF0YTo6ZXJyb3IocmVxdWVzdERhdGEucmVxdWVzdElkZW50
aWZpZXIoKSwgZXJyb3IpKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVy
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbi5oCmluZGV4IDFmMzM4M2QuLmE4ZTY0M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaApAQCAtMzYsOCArMzYsMTAgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgSURCRGF0YWJhc2VJbmZvOworY2xhc3MgSURCS2V5RGF0YTsKIGNs
YXNzIElEQk9iamVjdFN0b3JlSW5mbzsKIGNsYXNzIElEQlJlcXVlc3REYXRhOworY2xhc3MgVGhy
ZWFkU2FmZURhdGFCdWZmZXI7CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCkBAIC01Miw2ICs1
NCw3IEBAIHB1YmxpYzoKICAgICBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mIGRhdGFiYXNl
Q29ubmVjdGlvbigpIHsgcmV0dXJuIG1fZGF0YWJhc2VDb25uZWN0aW9uLmdldCgpOyB9CiAgICAg
Y29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Fj
dGlvbkluZm87IH0KICAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNvbnN0OworICAgIGJvb2wg
aXNSZWFkT25seSgpIGNvbnN0OwogCiAgICAgSURCRGF0YWJhc2VJbmZvKiBvcmlnaW5hbERhdGFi
YXNlSW5mbygpIGNvbnN0OwogCkBAIC01OSw2ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bW1pdCgpOwogCiAgICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0
YSYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQgcHV0T3JBZGQoY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFC
dWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwor
ICAgIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0
YSYpOwogCiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24oVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uJiwgSURCVHJhbnNhY3Rpb25JbmZvJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFz
ZUluZm8uY3BwCmluZGV4IDYzODgxN2UuLjVkZGIyYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3Bw
CkBAIC03Nyw2ICs3NywxNSBAQCB2b2lkIElEQkRhdGFiYXNlSW5mbzo6YWRkRXhpc3RpbmdPYmpl
Y3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiAgICAgbV9vYmplY3RTdG9y
ZU1hcC5zZXQoaW5mby5pZGVudGlmaWVyKCksIGluZm8pOwogfQogCitjb25zdCBJREJPYmplY3RT
dG9yZUluZm8qIElEQkRhdGFiYXNlSW5mbzo6aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUodWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBjb25zdAoreworICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX29iamVjdFN0b3JlTWFwLmZpbmQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBpZiAo
aXRlcmF0b3IgPT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKwogVmVjdG9yPFN0cmluZz4g
SURCRGF0YWJhc2VJbmZvOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8
U3RyaW5nPiBuYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaAppbmRleCA0MGY1Mzk0Li4wZGY5ZTE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0
YWJhc2VJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkRhdGFiYXNlSW5mby5oCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgSURCT2JqZWN0U3Rv
cmVJbmZvIGNyZWF0ZU5ld09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURC
S2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAgICAgdm9pZCBhZGRFeGlzdGluZ09iamVj
dFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyogaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKSBjb25zdDsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0b3JlTmFtZXMo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkVycm9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJFcnJvci5jcHAKaW5kZXggMjI4OGNlOC4uNDUyYTQ3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCkBAIC01
MSw2ICs1MSwyMiBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiBpZGJFcnJvck5hbWUoSURCRXhjZXB0
aW9uQ29kZSBjb2RlKQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRy
eSA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZFN0YXRlRXJyb3IiKTsKICAgICAgICAgcmV0dXJuIGVu
dHJ5OwogICAgIH0KKyAgICBjYXNlIElEQkV4Y2VwdGlvbkNvZGU6OkRhdGFFcnJvcjogeworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgi
RGF0YUVycm9yIik7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisgICAgY2FzZSBJREJF
eGNlcHRpb25Db2RlOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IHsKKyAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIlRyYW5zYWN0aW9u
SW5hY3RpdmVFcnJvciIpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICAgIGNhc2Ug
SURCRXhjZXB0aW9uQ29kZTo6UmVhZE9ubHlFcnJvcjogeworICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgiUmVhZE9ubHlFcnJvciIpOwor
ICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6
RGF0YUNsb25lRXJyb3I6IHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
ZW50cnkgPSBBU0NJSUxpdGVyYWwoIkRhdGFDbG9uZUVycm9yIik7CisgICAgICAgIHJldHVybiBl
bnRyeTsKKyAgICB9CiAgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpOb25lOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTc3LDYgKzkzLDIyIEBAIHN0
YXRpYyBjb25zdCBTdHJpbmcmIGlkYkVycm9yRGVzY3JpcHRpb24oSURCRXhjZXB0aW9uQ29kZSBj
b2RlKQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJ
TGl0ZXJhbCgiT3BlcmF0aW9uIHdhcyBjYWxsZWQgb24gYW4gb2JqZWN0IG9uIHdoaWNoIGl0IGlz
IG5vdCBhbGxvd2VkIG9yIGF0IGEgdGltZSB3aGVuIGl0IGlzIG5vdCBhbGxvd2VkLiIpOwogICAg
ICAgICByZXR1cm4gZW50cnk7CiAgICAgfQorICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6RGF0
YUVycm9yOiB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGVudHJ5ID0g
QVNDSUlMaXRlcmFsKCJEYXRhIHByb3ZpZGVkIHRvIGFuIG9wZXJhdGlvbiBkb2VzIG5vdCBtZWV0
IHJlcXVpcmVtZW50cy4iKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICBjYXNl
IElEQkV4Y2VwdGlvbkNvZGU6OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjogeworICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgiUmVxdWVz
dCB3YXMgcGxhY2VkIGFnYWluc3QgYSB0cmFuc2FjdGlvbiB3aGljaCBpcyBjdXJyZW50bHkgbm90
IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybiBlbnRyeTsK
KyAgICB9CisgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpSZWFkT25seUVycm9yOiB7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJB
IG11dGF0aW5nIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIGluIGEgXCJyZWFkb25seVwiIHRyYW5z
YWN0aW9uLiIpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICAgIGNhc2UgSURCRXhj
ZXB0aW9uQ29kZTo6RGF0YUNsb25lRXJyb3I6IHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIkRhdGEgYmVpbmcgc3RvcmVkIGNvdWxk
IG5vdCBiZSBjbG9uZWQgYnkgdGhlIHN0cnVjdHVyZWQgY2xvbmluZyBhbGdvcml0aG0uIik7Cisg
ICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CiAgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpO
b25lOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKaW5k
ZXggYjkxOTYzNi4uMmU3NGY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKQEAgLTM2LDEwICszNiwxNCBAQCBlbnVtIGNsYXNz
IElEQkV4Y2VwdGlvbkNvZGUgewogICAgIE5vbmUgPSAwLAogICAgIFVua25vd24sCiAgICAgQ29u
c3RyYWludEVycm9yLAorICAgIERhdGFFcnJvciwKKyAgICBUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3IsCisgICAgUmVhZE9ubHlFcnJvciwKICAgICBWZXJzaW9uRXJyb3IsCiAKICAgICAvLyBJbmRl
eGVkIERCIGV4aXN0aW5nIGV4Y2VwdGlvbiBjb2RlcyB3aXRoIElEQi1zcGVjaWZpYyBlcnJvciBt
ZXNzYWdlczoKICAgICBJbnZhbGlkU3RhdGVFcnJvciwKKyAgICBEYXRhQ2xvbmVFcnJvciwKIH07
CiAKIGNsYXNzIElEQkVycm9yIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwCmluZGV4IDkzMjUyY2IuLjVh
M2Q5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJSZXF1ZXN0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcApAQCAtMzQsMjAgKzM0LDI1IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIElEQlJlcXVlc3REYXRhOjpJREJSZXF1ZXN0RGF0YShjb25zdCBJREJD
bGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgY29uc3QgSURCQ2xpZW50
OjpJREJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQotICAgIDogbV9yZXF1ZXN0SWRlbnRpZmllcihz
dGQ6Om1ha2VfdW5pcXVlPElEQlJlc291cmNlSWRlbnRpZmllcj4oY29ubmVjdGlvbiwgcmVxdWVz
dCkpCisgICAgOiBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKGNvbm5lY3Rpb24uaWRlbnRp
ZmllcigpKQorICAgICwgbV9yZXF1ZXN0SWRlbnRpZmllcihzdGQ6Om1ha2VfdW5pcXVlPElEQlJl
c291cmNlSWRlbnRpZmllcj4oY29ubmVjdGlvbiwgcmVxdWVzdCkpCiAgICAgLCBtX2RhdGFiYXNl
SWRlbnRpZmllcihyZXF1ZXN0LmRhdGFiYXNlSWRlbnRpZmllcigpKQogICAgICwgbV9yZXF1ZXN0
ZWRWZXJzaW9uKHJlcXVlc3QudmVyc2lvbigpKQogewogfQogCiBJREJSZXF1ZXN0RGF0YTo6SURC
UmVxdWVzdERhdGEoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uKQot
ICAgIDogbV9yZXF1ZXN0SWRlbnRpZmllcihzdGQ6Om1ha2VfdW5pcXVlPElEQlJlc291cmNlSWRl
bnRpZmllcj4ob3BlcmF0aW9uLmlkZW50aWZpZXIoKSkpCisgICAgOiBtX3NlcnZlckNvbm5lY3Rp
b25JZGVudGlmaWVyKG9wZXJhdGlvbi50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLmlkZW50aWZpZXIoKSkKKyAgICAsIG1fcmVxdWVzdElkZW50aWZpZXIoc3RkOjpt
YWtlX3VuaXF1ZTxJREJSZXNvdXJjZUlkZW50aWZpZXI+KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkp
KQogICAgICwgbV90cmFuc2FjdGlvbklkZW50aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxJREJSZXNv
dXJjZUlkZW50aWZpZXI+KG9wZXJhdGlvbi50cmFuc2FjdGlvbklkZW50aWZpZXIoKSkpCisgICAg
LCBtX29iamVjdFN0b3JlSWRlbnRpZmllcihvcGVyYXRpb24ub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCkpCiB7CiB9CiAKIElEQlJlcXVlc3REYXRhOjpJREJSZXF1ZXN0RGF0YShjb25zdCBJREJSZXF1
ZXN0RGF0YSYgb3RoZXIpCi0gICAgOiBtX2RhdGFiYXNlSWRlbnRpZmllcihvdGhlci5tX2RhdGFi
YXNlSWRlbnRpZmllcikKKyAgICA6IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIob3RoZXIu
bV9zZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcikKKyAgICAsIG1fb2JqZWN0U3RvcmVJZGVudGlm
aWVyKG90aGVyLm1fb2JqZWN0U3RvcmVJZGVudGlmaWVyKQorICAgICwgbV9kYXRhYmFzZUlkZW50
aWZpZXIob3RoZXIubV9kYXRhYmFzZUlkZW50aWZpZXIpCiAgICAgLCBtX3JlcXVlc3RlZFZlcnNp
b24ob3RoZXIubV9yZXF1ZXN0ZWRWZXJzaW9uKQogewogICAgIGlmIChvdGhlci5tX3JlcXVlc3RJ
ZGVudGlmaWVyKQpAQCAtNTYsNiArNjEsMTIgQEAgSURCUmVxdWVzdERhdGE6OklEQlJlcXVlc3RE
YXRhKGNvbnN0IElEQlJlcXVlc3REYXRhJiBvdGhlcikKICAgICAgICAgbV90cmFuc2FjdGlvbklk
ZW50aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQlJlc291cmNlSWRlbnRpZmllcj4oKm90aGVy
Lm1fdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIH0KIAordWludDY0X3QgSURCUmVxdWVzdERhdGE6
OnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zZXJ2
ZXJDb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbklk
ZW50aWZpZXI7Cit9CisKIElEQlJlc291cmNlSWRlbnRpZmllciBJREJSZXF1ZXN0RGF0YTo6cmVx
dWVzdElkZW50aWZpZXIoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVxdWVzdElk
ZW50aWZpZXIpOwpAQCAtNjgsNiArNzksMTIgQEAgSURCUmVzb3VyY2VJZGVudGlmaWVyIElEQlJl
cXVlc3REYXRhOjp0cmFuc2FjdGlvbklkZW50aWZpZXIoKSBjb25zdAogICAgIHJldHVybiAqbV90
cmFuc2FjdGlvbklkZW50aWZpZXI7CiB9CiAKK3VpbnQ2NF90IElEQlJlcXVlc3REYXRhOjpvYmpl
Y3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fb2JqZWN0
U3RvcmVJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkZW50aWZpZXI7Cit9
CisKIHVpbnQ2NF90IElEQlJlcXVlc3REYXRhOjpyZXF1ZXN0ZWRWZXJzaW9uKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9yZXF1ZXN0ZWRWZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaAppbmRleCA0MTZm
ZDVkLi5iOGI0YTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaApAQCAtNDYsOCArNDYsMTAgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0IElEQlJlcXVlc3REYXRhKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24mKTsKICAgICBJREJSZXF1ZXN0RGF0YShjb25zdCBJREJSZXF1ZXN0RGF0YSYpOwogCisg
ICAgdWludDY0X3Qgc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIoKSBjb25zdDsKICAgICBJREJS
ZXNvdXJjZUlkZW50aWZpZXIgcmVxdWVzdElkZW50aWZpZXIoKSBjb25zdDsKICAgICBJREJSZXNv
dXJjZUlkZW50aWZpZXIgdHJhbnNhY3Rpb25JZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAgICBjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGRhdGFiYXNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJh
c2VJZGVudGlmaWVyOyB9CiAgICAgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbigpIGNvbnN0OwpA
QCAtNTUsOCArNTcsMTAgQEAgcHVibGljOgogICAgIElEQlJlcXVlc3REYXRhIGlzb2xhdGVkQ29w
eSgpOwogCiBwcml2YXRlOgorICAgIHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZp
ZXIgeyAwIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9y
ZXF1ZXN0SWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCUmVzb3VyY2VJZGVudGlm
aWVyPiBtX3RyYW5zYWN0aW9uSWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCBtX29iamVjdFN0b3Jl
SWRlbnRpZmllciB7IDAgfTsKIAogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2RhdGFiYXNl
SWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX3JlcXVlc3RlZFZlcnNpb24geyAwIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0
RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVz
dWx0RGF0YS5jcHAKaW5kZXggNjUwNzFkOC4uOGRjYjc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcApA
QCAtNTAsMTEgKzUwLDE0IEBAIElEQlJlc3VsdERhdGE6OklEQlJlc3VsdERhdGEoY29uc3QgSURC
UmVzdWx0RGF0YSYgb3RoZXIpCiAgICAgLCBtX3JlcXVlc3RJZGVudGlmaWVyKG90aGVyLm1fcmVx
dWVzdElkZW50aWZpZXIpCiAgICAgLCBtX2Vycm9yKG90aGVyLm1fZXJyb3IpCiAgICAgLCBtX2Rh
dGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIob3RoZXIubV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyKQorICAgICwgbV9yZXN1bHREYXRhKG90aGVyLm1fcmVzdWx0RGF0YSkKIHsKICAgICBp
ZiAob3RoZXIubV9kYXRhYmFzZUluZm8pCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvID0gc3RkOjpt
YWtlX3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KCpvdGhlci5tX2RhdGFiYXNlSW5mbyk7CiAgICAg
aWYgKG90aGVyLm1fdHJhbnNhY3Rpb25JbmZvKQogICAgICAgICBtX3RyYW5zYWN0aW9uSW5mbyA9
IHN0ZDo6bWFrZV91bmlxdWU8SURCVHJhbnNhY3Rpb25JbmZvPigqb3RoZXIubV90cmFuc2FjdGlv
bkluZm8pOworICAgIGlmIChvdGhlci5tX3Jlc3VsdEtleSkKKyAgICAgICAgbV9yZXN1bHRLZXkg
PSBzdGQ6Om1ha2VfdW5pcXVlPElEQktleURhdGE+KCpvdGhlci5tX3Jlc3VsdEtleSk7CiB9CiAK
IElEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6ZXJyb3IoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQpAQCAtOTAs
NiArOTMsMjAgQEAgSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpjcmVhdGVPYmplY3RTdG9y
ZVN1Y2Nlc3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWUKICAgICByZXR1cm4geyBJREJSZXN1
bHRUeXBlOjpDcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MsIHJlcXVlc3RJZGVudGlmaWVyIH07CiB9
CiAKK0lEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6cHV0T3JBZGRTdWNjZXNzKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEm
IHJlc3VsdEtleSkKK3sKKyAgICBJREJSZXN1bHREYXRhIHJlc3VsdChJREJSZXN1bHRUeXBlOjpQ
dXRPckFkZFN1Y2Nlc3MsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICByZXN1bHQubV9yZXN1bHRL
ZXkgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQktleURhdGE+KHJlc3VsdEtleSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpnZXRSZWNvcmRTdWNj
ZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0
IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCit7CisgICAgSURCUmVzdWx0RGF0YSBy
ZXN1bHQoSURCUmVzdWx0VHlwZTo6R2V0UmVjb3JkU3VjY2VzcywgcmVxdWVzdElkZW50aWZpZXIp
OworICAgIHJlc3VsdC5tX3Jlc3VsdERhdGEgPSB2YWx1ZURhdGE7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogY29uc3QgSURCRGF0YWJhc2VJbmZvJiBJREJSZXN1bHREYXRhOjpkYXRhYmFzZUlu
Zm8oKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHRE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0
RGF0YS5oCmluZGV4IDJhZTcxZDMuLjhmMjkzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuaApAQCAtMzAsMzEg
KzMwLDM4IEBACiAKICNpbmNsdWRlICJJREJEYXRhYmFzZUluZm8uaCIKICNpbmNsdWRlICJJREJF
cnJvci5oIgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKICNpbmNsdWRlICJJREJSZXNvdXJjZUlk
ZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkluZm8uaCIKKyNpbmNsdWRlICJU
aHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElE
QlJlc291cmNlSWRlbnRpZmllcjsKLQotbmFtZXNwYWNlIElEQlNlcnZlciB7Ci1jbGFzcyBVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb247Ci1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOwotfQorY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKIGVudW0gY2xhc3MgSURCUmVz
dWx0VHlwZSB7CiAgICAgRXJyb3IsCiAgICAgT3BlbkRhdGFiYXNlU3VjY2VzcywKICAgICBPcGVu
RGF0YWJhc2VVcGdyYWRlTmVlZGVkLAogICAgIENyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcywKKyAg
ICBQdXRPckFkZFN1Y2Nlc3MsCisgICAgR2V0UmVjb3JkU3VjY2VzcywKIH07CiAKK25hbWVzcGFj
ZSBJREJTZXJ2ZXIgeworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOworY2xhc3Mg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjsKK30KKwogY2xhc3MgSURCUmVzdWx0RGF0YSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIElEQlJlc3VsdERhdGEgZXJyb3IoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiwgY29uc3QgSURCRXJyb3ImKTsKICAgICBzdGF0aWMgSURCUmVzdWx0RGF0
YSBvcGVuRGF0YWJhc2VTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIElEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJik7CiAgICAgc3RhdGljIElEQlJlc3Vs
dERhdGEgb3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImLCBJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mKTsKICAgICBzdGF0
aWMgSURCUmVzdWx0RGF0YSBjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJik7CisgICAgc3RhdGljIElEQlJlc3VsdERhdGEgcHV0T3JBZGRTdWNjZXNz
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQktleURhdGEmKTsKKyAgICBz
dGF0aWMgSURCUmVzdWx0RGF0YSBnZXRSZWNvcmRTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpOwogCiAgICAg
SURCUmVzdWx0RGF0YShjb25zdCBJREJSZXN1bHREYXRhJik7CiAKQEAgLTY3LDYgKzc0LDkgQEAg
cHVibGljOgogICAgIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgZGF0YWJhc2VJbmZvKCkgY29uc3Q7
CiAgICAgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiB0cmFuc2FjdGlvbkluZm8oKSBjb25zdDsK
IAorICAgIGNvbnN0IElEQktleURhdGEqIHJlc3VsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dWx0S2V5LmdldCgpOyB9CisgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHJlc3VsdERh
dGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdERhdGE7IH0KKwogcHJpdmF0ZToKICAgICBJREJS
ZXN1bHREYXRhKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogICAgIElEQlJlc3VsdERh
dGEoSURCUmVzdWx0VHlwZSwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CkBAIC03OCw2
ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyIHsgMCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IG1fZGF0
YWJhc2VJbmZvOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJUcmFuc2FjdGlvbkluZm8+IG1fdHJh
bnNhY3Rpb25JbmZvOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlEYXRhPiBtX3Jlc3VsdEtl
eTsKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBtX3Jlc3VsdERhdGE7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IGJhM2I2MGMu
LjhiNjA2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9DbGllbnQuaCIKICNpbmNsdWRlICJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXIuaCIKKyNpbmNsdWRlICJJREJLZXlEYXRhLmgiCiAjaW5jbHVkZSAiSURC
T3BlbkRCUmVxdWVzdEltcGwuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0RGF0YS5oIgogI2luY2x1
ZGUgIklEQlJlc3VsdERhdGEuaCIKQEAgLTEyNiw2ICsxMjcsMjIgQEAgdm9pZCBJblByb2Nlc3NJ
REJTZXJ2ZXI6OmRpZENyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3Vs
dERhdGEpCiAgICAgfSk7CiB9CiAKK3ZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpkaWRQdXRPckFk
ZChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIFJlZlB0cjxJblByb2Nl
c3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNo
KFt0aGlzLCBzZWxmLCByZXN1bHREYXRhXSB7CisgICAgICAgIG1fY29ubmVjdGlvblRvU2VydmVy
LT5kaWRQdXRPckFkZChyZXN1bHREYXRhKTsKKyAgICB9KTsKK30KKwordm9pZCBJblByb2Nlc3NJ
REJTZXJ2ZXI6OmRpZEdldFJlY29yZChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQor
eworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CisgICAgUnVuTG9v
cDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxmLCByZXN1bHREYXRhXSB7CisgICAgICAg
IG1fY29ubmVjdGlvblRvU2VydmVyLT5kaWRHZXRSZWNvcmQocmVzdWx0RGF0YSk7CisgICAgfSk7
Cit9CisKIHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjphYm9ydFRyYW5zYWN0aW9uKElEQlJlc291
cmNlSWRlbnRpZmllciYgcmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIFJlZlB0cjxJblByb2Nl
c3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CkBAIC0xNTAsNiArMTY3LDI3IEBAIHZvaWQgSW5Qcm9j
ZXNzSURCU2VydmVyOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVz
dWx0RGF0YSwgY29uCiAgICAgfSk7CiB9CiAKK3ZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpwdXRP
ckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIElEQktleSoga2V5LCBTZXJp
YWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQoreworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2
ZXI+IHNlbGYodGhpcyk7CisgICAgSURCS2V5RGF0YSBrZXlEYXRhKGtleSk7CisgICAgYXV0byB2
YWx1ZURhdGEgPSBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6Y29weVZlY3Rvcih2YWx1ZS5kYXRhKCkp
OworCisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxmLCByZXF1ZXN0
RGF0YSwga2V5RGF0YSwgdmFsdWVEYXRhLCBvdmVyd3JpdGVNb2RlXSB7CisgICAgICAgIG1fc2Vy
dmVyLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWVEYXRhLCBvdmVyd3JpdGVN
b2RlKTsKKyAgICB9KTsKK30KKwordm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmdldFJlY29yZChj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIElEQktleSoga2V5KQoreworICAgIFJl
ZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CisgICAgSURCS2V5RGF0YSBrZXlE
YXRhKGtleSk7CisKKyAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlzcGF0Y2goW3RoaXMsIHNlbGYs
IHJlcXVlc3REYXRhLCBrZXlEYXRhXSB7CisgICAgICAgIG1fc2VydmVyLT5nZXRSZWNvcmQocmVx
dWVzdERhdGEsIGtleURhdGEpOworICAgIH0pOworfQorCiB2b2lkIEluUHJvY2Vzc0lEQlNlcnZl
cjo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKIHsKICAgICBS
ZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZl
ci5oCmluZGV4IDg3MzY1NTcuLmVmYzMxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAg
LTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYm9ydFRyYW5zYWN0aW9u
KElEQlJlc291cmNlSWRlbnRpZmllciYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9p
ZCBjb21taXRUcmFuc2FjdGlvbihJREJSZXNvdXJjZUlkZW50aWZpZXImKSBvdmVycmlkZSBmaW5h
bDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERh
dGEmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0
dWFsIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBJREJLZXkqLCBTZXJpYWxp
emVkU2NyaXB0VmFsdWUmLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGdldFJlY29yZChjb25zdCBJREJS
ZXF1ZXN0RGF0YSYsIElEQktleSopIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBk
YXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRp
Zmllcikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICAvLyBJREJDb25uZWN0aW9uVG9DbGllbnQKQEAg
LTY4LDYgKzcwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRBYm9ydFRyYW5zYWN0
aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJFcnJvciYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21t
aXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZp
bmFsOworICAgIHZpcnR1YWwgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJikg
b3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGRpZEdldFJlY29yZChjb25zdCBJREJS
ZXN1bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQoSURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mLCB1aW50
NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSBvdmVycmlkZSBmaW5hbDsKIAogICAgIHZpcnR1YWwgdm9p
ZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNzSURCU2VydmVyPjo6cmVmKCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA5MDBiMTU0Li5jMTFjNTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTgxLDYgKzIxODEsOCBAQAogCQk1MUQw
QzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDBDNTE1MERBQTkwQjcwMDNCMzgz
MSAvKiBKU1N0b3JhZ2VDdXN0b20uY3BwICovOyB9OwogCQk1MUQ3MjM2QzFCQjYxNzQ5MDA0NzhD
QTMgLyogSURCUmVzdWx0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUQ3MjM2QTFCQjYwQkZFMDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5j
cHAgKi87IH07CiAJCTUxRDcyMzZEMUJCNjE3NDkwMDQ3OENBMyAvKiBJREJSZXN1bHREYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MjM2QjFC
QjYwQkZFMDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oICovOyB9OworCQk1MUQ3RUZFQTFCREU4
RjhDMDBFOTNFMTAgLyogVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUZBRUE5MUJEQzk4OUEwMEI0QUZFNCAvKiBU
aHJlYWRTYWZlRGF0YUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUxRDdFRkVDMUJERUZBNTEwMEU5M0UxMCAvKiBUcmFuc2FjdGlvbk9w
ZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUQ3RUZFQjFCREVGQTQ3MDBFOTNFMTAgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwICov
OyB9OwogCQk1MURDRTgwMjBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRENFODAxMENBQzlGMUMwMDQ4ODM1OCAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20u
Y3BwICovOyB9OwogCQk1MURGNkQ3RTBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxREY2RDdEMEI5
MkExNkQwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxREY2RDgwMEI5MkExOEUwMEMyREM4NSAvKiBUaHJl
YWRDaGVjay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxREY2RDdGMEI5MkExOEUwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5tbSAqLzsgfTsKQEAgLTkz
NDUsNiArOTM0Nyw3IEBACiAJCTUxMUVGMkNDMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQkFueUN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkFueUN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUVGMkNEMTdGMEZERjEw
MEU0RkExNiAvKiBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSURCRGF0YWJhc2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTFFRjJDRTE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJPYmplY3RTdG9y
ZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQk9i
amVjdFN0b3JlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExRkFF
QTkxQkRDOTg5QTAwQjRBRkU0IC8qIFRocmVhZFNhZmVEYXRhQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZFNhZmVEYXRhQnVmZmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMjNBRjE2MTg5MEE0Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5n
ZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCS2V5UmFu
Z2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyM0FGMTcxODkwQTRD
QTAwMzFDREM5IC8qIElEQktleVJhbmdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJLZXlSYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTEyM0FGMUMxODkxOEFFNDAwMzFDREM5IC8qIElEQkdldFJlc3VsdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJHZXRSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk1OTIsNiArOTU5NSw3IEBACiAJCTUxRDcxOUIzMTgxMTA2RTAwMDE2REM1MSAv
KiBXb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUQ3MjM2QTFCQjYwQkZFMDA0NzhDQTMgLyogSURCUmVzdWx0RGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJSZXN1bHREYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzIzNkIxQkI2MEJGRTAwNDc4
Q0EzIC8qIElEQlJlc3VsdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SURCUmVzdWx0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUQ3RUZFQjFC
REVGQTQ3MDBFOTNFMTAgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MURDRTgwMTBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxS
ZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxREY2RDdEMEI5MkExNkQwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRDaGVjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MURGNkQ3RjBCOTJBMThFMDBDMkRDODUgLyogVGhyZWFkQ2hl
Y2subW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUaHJlYWRDaGVj
ay5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODA1LDYgKzE2ODA5LDcgQEAK
IAkJCQk1MTk4RjdCMzFCQkUwMDFEMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmggKi8s
CiAJCQkJNTE5OEY3QjYxQkMzMTQxNzAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudElt
cGwuY3BwICovLAogCQkJCTUxOThGN0I3MUJDMzE0MTcwMEUyQ0M1RiAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnRJbXBsLmggKi8sCisJCQkJNTFEN0VGRUIxQkRFRkE0NzAwRTkzRTEwIC8qIFRyYW5z
YWN0aW9uT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk1MTYwNzEyQjFCRDgzMDUzMDBEQkM0RjIgLyog
VHJhbnNhY3Rpb25PcGVyYXRpb24uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gY2xpZW50OwpAQCAt
MjI1MjUsNiArMjI1MzAsNyBAQAogCQkJCTUxREY2RDdEMEI5MkExNkQwMEMyREM4NSAvKiBUaHJl
YWRDaGVjay5oICovLAogCQkJCUUxRkY1N0E1MEYwMTI1NkIwMDg5MUVCQiAvKiBUaHJlYWRHbG9i
YWxEYXRhLmNwcCAqLywKIAkJCQlFMUZGNTdBMjBGMDEyNTVCMDA4OTFFQkIgLyogVGhyZWFkR2xv
YmFsRGF0YS5oICovLAorCQkJCTUxMUZBRUE5MUJEQzk4OUEwMEI0QUZFNCAvKiBUaHJlYWRTYWZl
RGF0YUJ1ZmZlci5oICovLAogCQkJCTE4NUJDRjI2MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRU
aW1lcnMuY3BwICovLAogCQkJCTE4NUJDRjI3MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1l
cnMuaCAqLywKIAkJCQk5MzMwOUVBMTA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwICovLApA
QCAtMjYzMTEsNiArMjYzMTcsNyBAQAogCQkJCUIyRkEzREFGMEFCNzVBNkYwMDBFNUFDNCAvKiBK
U1NWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3QjI4MkEwQ0VGMEMw
NzAwRDM5RDU0IC8qIEpTU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDQ5NkUzQTAxMzk4MTNBNTAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MUQ3RUZFQTFCREU4RjhDMDBFOTNFMTAgLyogVGhyZWFkU2FmZURhdGFC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDJBNzk3MEFFNUM5NDMwMERGNThERiAvKiBK
U1NWR051bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjEwQUI3NUE2RjAwMEU1QUM0
IC8qIEpTU1ZHTnVtYmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjMwQUI3NUE2
RjAwMEU1QUM0IC8qIEpTU1ZHUGFpbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzExMTksNiArMzEx
MjYsNyBAQAogCQkJCTJENEY5NkY1MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5kaWNhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJENEY5NkY4MUExRUNDMjQwMDk4QkY4OCAvKiBUZXh0SW5k
aWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNERDkxMjUxRjEyRDAwM0VG
MjY5IC8qIFRleHRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFEN0VGRUMxQkRF
RkE1MTAwRTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNFQ0FERkNEMTUzNzc5MUQwMEUzNzA2OCAvKiBUZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUIwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRJ
dGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEQ5ODhCNjE3QkZFQjIxMDA4NEZCODgg
LyogVGV4dE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IGE3Y2JkNzgu
LjNiZjRiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0RhdGVJ
bnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KQEAgLTc3
LDEyICs3OCwxNCBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBv
YmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsCiAKIHN0YXRpYyBKU1ZhbHVlIGlk
YktleVRvSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIElEQktleSoga2V5KQogewotICAgIGlmICgha2V5KSB7CisgICAgaWYgKCFrZXkgfHwg
IWV4ZWMpIHsKICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgdW5kZWZpbmVkLCBub3QgbnVsbC4K
ICAgICAgICAgLy8gU3BlYzogaHR0cDovL2R2Y3MudzMub3JnL2hnL0luZGV4ZWREQi9yYXctZmls
ZS90aXAvT3ZlcnZpZXcuaHRtbCNpZGwtZGVmLUlEQktleVJhbmdlCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAorICAgIExvY2tlcjxKU0xvY2s+IGxvY2tlcihleGVjLT52
bSgpLmFwaUxvY2soKSk7CisKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CiAgICAgY2FzZSBL
ZXlUeXBlOjpBcnJheToKICAgICAgICAgewpAQCAtMjc5LDEwICsyODIsNDEgQEAgUmVmUHRyPElE
QktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IERlcHIKICAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBrZXlQYXRoLnN0cmluZygpKTsKIH0KIAorUmVm
UHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4
ZWNTdGF0ZSYgZXhlYywgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7
CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6QXJy
YXkpIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiByZXN1bHQ7CisgICAgICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhcnJheSA9IGtleVBhdGguYXJyYXkoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKCZleGVjLCB2YWx1ZSwgYXJyYXlbaV0pOworICAgICAgICAgICAgaWYgKCFrZXkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkocmVz
dWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpL
ZXlQYXRoVHlwZTo6U3RyaW5nKTsKKyAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9t
U2NyaXB0VmFsdWVBbmRLZXlQYXRoKCZleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Cit9
CisKIGJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSog
cmVxdWVzdFN0YXRlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJjYW5J
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAorICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7CisgICAgaWYgKCFleGVjKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKCpleGVj
LCBzY3JpcHRWYWx1ZSwga2V5UGF0aCk7Cit9CisKK2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAg
ICBMT0coU3RvcmFnZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOworCiAg
ICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmlu
Zyk7CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQ
YXJzZUVycm9yIGVycm9yOwpAQCAtMjkyLDggKzMyNiw3IEBAIGJvb2wgY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBEZXBy
ZWNhCiAgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOwot
ICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBzY3JpcHRWYWx1ZS5q
c1ZhbHVlKCksIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOwor
ICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCgmZXhlY1N0YXRlLCBzY3JpcHRW
YWx1ZS5qc1ZhbHVlKCksIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAt
IDEpOwogfQogCiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERP
TVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gcHJwVmFsdWUpCkBAIC0zMDgsNiArMzQxLDI4IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBh
c3NSCiAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIHJlc3Vs
dCk7CiB9CiAKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRh
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVm
ZmVyJiB2YWx1ZURhdGEpCit7CisgICAgRE9NUmVxdWVzdFN0YXRlIHN0YXRlKCZjb250ZXh0KTsK
KyAgICBhdXRvKiBleGVjU3RhdGUgPSBzdGF0ZS5leGVjKCk7CisKKyAgICBpZiAoIXZhbHVlRGF0
YS5kYXRhKCkpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjU3Rh
dGUtPnZtKCksIGpzVW5kZWZpbmVkKCkpOworCisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhID0gKnZhbHVlRGF0YS5kYXRhKCk7CisgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgaWYgKGRh
dGEuc2l6ZSgpKSB7CisgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlh
bGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyhk
YXRhKTsKKworICAgICAgICBleGVjU3RhdGUtPnZtKCkuYXBpTG9jaygpLmxvY2soKTsKKyAgICAg
ICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShleGVjU3RhdGUsIGV4ZWNT
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBOb25UaHJvd2luZyk7CisgICAgICAgIGV4
ZWNTdGF0ZS0+dm0oKS5hcGlMb2NrKCkudW5sb2NrKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJl
c3VsdCA9IGpzTnVsbCgpOworCisgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4
ZWNTdGF0ZS0+dm0oKSwgcmVzdWx0KTsKK30KKwogRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVz
ZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHBycEJ1ZmZlciwgYm9vbCBrZXlJc0RlZmluZWQpCiB7CiAg
ICAgaWYgKHBycEJ1ZmZlcikgewpAQCAtMzUwLDYgKzQwNSwxMSBAQCBSZWZQdHI8SURCS2V5PiBz
Y3JpcHRWYWx1ZVRvSURCS2V5KERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBE
ZXByZWNhdAogICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgc2NyaXB0VmFs
dWUuanNWYWx1ZSgpKTsKIH0KIAorUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShF
eGVjU3RhdGUmIGV4ZWMsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKCZleGVjLCBzY3JpcHRWYWx1
ZS5qc1ZhbHVlKCkpOworfQorCiB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsIFZlY3RvcjxJREJLZXlEYXRhPiYg
aW5kZXhLZXlzKQogewogICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCBvYmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0
YS5rZXlQYXRoKTsKQEAgLTM3NSw2ICs0MzUsMTMgQEAgdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0Zv
clZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXQK
ICAgICB9CiB9CiAKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktleURhdGFUb1NjcmlwdFZh
bHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IElEQktleURhdGEmIGtl
eURhdGEpCit7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0YS5tYXliZUNyZWF0ZUlE
QktleSgpOworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7CisgICAg
cmV0dXJuIGlkYktleVRvU2NyaXB0VmFsdWUoJnJlcXVlc3RTdGF0ZSwga2V5LmdldCgpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmgKaW5kZXggYmJkMTA2Ni4uNDJiN2IzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMzgsNiArMzgsNyBAQCBjbGFzcyBE
T01SZXF1ZXN0U3RhdGU7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlQYXRoOwogY2xhc3Mg
U2hhcmVkQnVmZmVyOworY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKIHN0cnVjdCBJREJJ
bmRleE1ldGFkYXRhOwogY2xhc3MgSURCS2V5RGF0YTsKQEAgLTQ1LDE1ICs0NiwyMyBAQCBjbGFz
cyBJREJLZXlEYXRhOwogSURCS2V5UGF0aCBpZGJLZXlQYXRoRnJvbVZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlKTsKIAogYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUo
RE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+LCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKKwogUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworUmVmUHRyPElEQktleT4gbWF5
YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CisKIGJv
b2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9vbCBjYW5J
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKKwogRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJp
YWxpemVJREJWYWx1ZURhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFRocmVhZFNh
ZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpOwogRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJp
YWxpemVJREJWYWx1ZUJ1ZmZlcihET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4sIGJvb2wga2V5SXNEZWZpbmVkKTsKIFdFQkNPUkVfRVhQT1JUIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBib29sIGtleUlzRGVmaW5lZCk7CiBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8
SURCS2V5Pik7CiBSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KERPTVJlcXVlc3RT
dGF0ZSosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CitSZWZQdHI8SURCS2V5PiBz
Y3JpcHRWYWx1ZVRvSURCS2V5KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsIFZlY3RvcjxJREJLZXlEYXRhPiYgaW5kZXhL
ZXlzKTsKIAorRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IElEQktleURhdGEmKTsKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmluZGV4IGY4ZTNmY2IuLjFkOGNmMzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVkZSAiVGhyZWFkU2Fm
ZURhdGFCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC04Niw2ICs4NywxMSBAQCBDcm9zc1RocmVhZENvcGll
ckJhc2U8ZmFsc2UsIGZhbHNlLCBTZXNzaW9uSUQ+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFz
ZTxmYWxzZQogICAgIHJldHVybiBzZXNzaW9uSUQ7CiB9CiAKK0Nyb3NzVGhyZWFkQ29waWVyQmFz
ZTxmYWxzZSwgZmFsc2UsIFRocmVhZFNhZmVEYXRhQnVmZmVyPjo6VHlwZSBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj46OmNvcHkoY29uc3Qg
VGhyZWFkU2FmZURhdGFCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gVGhyZWFkU2FmZURh
dGFCdWZmZXIoYnVmZmVyKTsKK30KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZh
bHNlLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT46OmNvcHkoY29uc3QgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUmIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Dcm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJl
YWRDb3BpZXIuaAppbmRleCBhYmY5MDZiLi4xNjA1ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBSZXNvdXJjZVJl
c3BvbnNlOwogICAgIGNsYXNzIFNlc3Npb25JRDsKKyAgICBjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1
ZmZlcjsKICAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YTsKICAgICBz
dHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhOwogICAgIHN0cnVjdCBUaHJlYWRh
YmxlTG9hZGVyT3B0aW9uczsKQEAgLTEzOSw2ICsxNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFNlc3Npb25JRCYpOwogICAgIH07CiAK
KyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNl
LCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4geworICAgICAgICB0eXBlZGVmIFRocmVhZFNhZmVEYXRh
QnVmZmVyIFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImKTsKKyAgICB9OworCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAg
bmFtZXNwYWNlIEluZGV4ZWREQiB7CiAgICAgICAgIGVudW0gY2xhc3MgVHJhbnNhY3Rpb25Nb2Rl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0Yzk1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVGhyZWFkU2FmZURhdGFCdWZmZXJfaAorI2RlZmluZSBUaHJlYWRTYWZlRGF0YUJ1
ZmZlcl9oCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGhyZWFkU2Fm
ZURhdGFCdWZmZXI7CisKK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVySW1wbCA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGw+IHsKK2ZyaWVuZCBj
bGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKK3ByaXZhdGU6CisgICAgZW51bSBBZG9wdFZlY3Rv
clRhZyB7IEFkb3B0VmVjdG9yIH07CisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsKFZlY3Rv
cjx1aW50OF90PiYgZGF0YSwgQWRvcHRWZWN0b3JUYWcpCisgICAgeworICAgICAgICBtX2RhdGEu
c3dhcChkYXRhKTsKKyAgICB9CisKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAg
ICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRhOworfTsKKworY2xhc3MgVGhyZWFkU2Fm
ZURhdGFCdWZmZXIgeworcHVibGljOgorICAgIHN0YXRpYyBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBh
ZG9wdFZlY3RvcihWZWN0b3I8dWludDhfdD4mIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4g
VGhyZWFkU2FmZURhdGFCdWZmZXIoZGF0YSwgVGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsOjpBZG9w
dFZlY3Rvcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBj
b3B5VmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBUaHJlYWRTYWZlRGF0YUJ1ZmZlcihkYXRhKTsKKyAgICB9CisKKyAgICBUaHJlYWRTYWZl
RGF0YUJ1ZmZlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8dWludDhf
dD4qIGRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbCA/ICZtX2ltcGwt
Pm1fZGF0YSA6IG51bGxwdHI7CisgICAgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFRocmVh
ZFNhZmVEYXRhQnVmZmVyKFZlY3Rvcjx1aW50OF90PiYgZGF0YSwgVGhyZWFkU2FmZURhdGFCdWZm
ZXJJbXBsOjpBZG9wdFZlY3RvclRhZyB0YWcpCisgICAgeworICAgICAgICBtX2ltcGwgPSBhZG9w
dFJlZihuZXcgVGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsKGRhdGEsIHRhZykpOworICAgIH0KKwor
ICAgIGV4cGxpY2l0IFRocmVhZFNhZmVEYXRhQnVmZmVyKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
ZGF0YSkKKyAgICB7CisgICAgICAgIG1faW1wbCA9IGFkb3B0UmVmKG5ldyBUaHJlYWRTYWZlRGF0
YUJ1ZmZlckltcGwoZGF0YSkpOworICAgIH0KKworICAgIFJlZlB0cjxUaHJlYWRTYWZlRGF0YUJ1
ZmZlckltcGw+IG1faW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFRocmVhZFNhZmVEYXRhQnVmZmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264145</attachid>
            <date>2015-10-27 11:33:43 -0700</date>
            <delta_ts>2015-10-27 13:38:11 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>131427</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2MDQ5Y2YzLi5lZWFmZTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAt
MjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rl
c3RFeHBlY3RhdGlvbnM6IFJlLWVuYWJsZSBhIHRlc3QgdGhhdCBjYW4gbm93IGJlIG1hZGUgcmVs
aWFibGUuCisgICAgICAgIAorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9iYXNp
Yy1wdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vYmFzaWMtcHV0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWw6Cisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1i
YXNpYy5odG1sOiBBZGRlZC4KKwogMjAxNS0xMC0yNyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIg
IDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gQWRkIGNsb3Nl
IG1ldGhvZCB0byB3cml0YWJsZSBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azEvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1YWI3NTlkLi4zOGVlYjg3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC03Myw5ICs3Myw2IEBA
IGluc3BlY3Rvci9pbmRleGVkZGIKICMgQnV0IE1vZGVybiBJbmRleGVkREIgaXMuCiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4gWyBQYXNzIF0KIAotIyBGbGFrZXksIHNraXBwZWQgdW50aWwgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ2OCBsZXRzIHVzIGltcGxl
bWVudCBhIHByb3BlciBmaXgKLXN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3Rz
dG9yZS1iYXNpYy5odG1sCi0KICMgRmFpbHMgd2l0aCBXZWJLaXQxIG9ubHkuCiBlZGl0aW5nL3Nl
Y3VyZS1pbnB1dC9yZXNldC1zdGF0ZS1vbi1uYXZpZ2F0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFz
aWMtcHV0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZTRhMzNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL2Jhc2ljLXB1dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitBTEVSVDogVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBbb2Jq
ZWN0IElEQlRyYW5zYWN0aW9uXSAtIHZlcnNpb25jaGFuZ2UKK0FMRVJUOiBbb2JqZWN0IElEQkRh
dGFiYXNlXQorQUxFUlQ6IHB1dCBzdWNjZWVkZWQgLSBrZXkgd2FzICdmb28nCitBTEVSVDogZ2V0
IHN1Y2NlZWRlZCAtIHZhbHVlIHdhcyAnYmFyJworQUxFUlQ6IHZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uIGNvbXBsZXRlZAorQUxFUlQ6IERvbmUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJjNTcwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFzaWMtcHV0Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAor
PHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9CisKK3ZhciByZXF1
ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJOZXdEYXRhYmFzZVB1dFRlc3REYXRhYmFzZSIp
OworCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBhbGVydCgiRG9uZSIpOworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3Jl
cXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBhbGVydCgiVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2
ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOworICAgIAorICAgIHZhciB0eCA9IHJlcXVl
c3QudHJhbnNhY3Rpb247CisgICAgdmFyIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKworICAg
IGFsZXJ0KHR4ICsgIiAtICIgKyB0eC5tb2RlKTsKKyAgICBhbGVydChkYik7CisKKyAgICB2YXIg
b3MgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgdmFyIHB1
dFJlcXVlc3QgPSBvcy5wdXQoImJhciIsICJmb28iKTsKKyAgICAKKyAgICBwdXRSZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgc3VjY2VlZGVk
IC0ga2V5IHdhcyAnIiArIHB1dFJlcXVlc3QucmVzdWx0ICsgIiciKTsKKyAgICAgICAgCisgICAg
ICAgIHZhciBnZXRSZXF1ZXN0ID0gb3MuZ2V0KCJmb28iKTsKKyAgICAgICAgZ2V0UmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgYWxlcnQoImdldCBzdWNj
ZWVkZWQgLSB2YWx1ZSB3YXMgJyIgKyBnZXRSZXF1ZXN0LnJlc3VsdCArICInIik7CisgICAgICAg
IH0KKworICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICAgICAgYWxlcnQoImdldCB1bmV4cGVjdGVkbHkgZmFpbGVkIC0gIiArIGV2ZW50KTsKKyAg
ICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1dFJlcXVlc3Qub25l
cnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgdW5leHBlY3RlZGx5
IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisgICAgCisgICAg
dHgub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJ2ZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0Iik7CisgICAgICAgIGRvbmUoKTsKKyAg
ICB9CisKKyAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxl
cnQoInZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlZCIpOworICAgICAgICBkb25l
KCk7CisgICAgfQorCisgICAgdHgub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IGFsZXJ0KCJ2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIC0gIiAr
IGV2ZW50KTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3Rv
cmUtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLWV4cGVjdGVkLnR4dAppbmRleCAxOGVkZDhhLi4z
OWNmZDA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Y3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50
eHQKQEAgLTEsNiArMSw3IEBACiBBTEVSVDogSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZl
cnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQogQUxFUlQ6IE9iamVjdCBzdG9yZSBuYW1lczoKIEFM
RVJUOiBGaXJzdEFib3J0ZWRPYmplY3RTdG9yZQorQUxFUlQ6IFB1dCBzdWNjZWVkZWQKIEFMRVJU
OiBJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBhYm9ydGVkCiBBTEVS
VDogT2JqZWN0IHN0b3JlIG5hbWVzOgogQUxFUlQ6IFNlY29uZCB1cGdyYWRlIG5lZWRlZDogT2xk
IHZlcnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMu
aHRtbAppbmRleCAzOGRmNjkzLi4yMTA0Zjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFz
aWMuaHRtbApAQCAtMzAsMTMgKzMwLDE4IEBAIGNyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRl
UmVxdWVzdC50cmFuc2FjdGlvbjsKICAgICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVz
dWx0OwogICAgIHZhciBvYmplY3RTdG9yZSA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKCJG
aXJzdEFib3J0ZWRPYmplY3RTdG9yZSIpOworICAgIHZhciByZXF1ZXN0ID0gb2JqZWN0U3RvcmUu
cHV0KCJmb28iLCAiYmFyIik7CiAKLSAgICB2YXIgZiA9IGZ1bmN0aW9uKCkgeworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlB1dCBzdWNj
ZWVkZWQiKTsKICAgICAgICAgdmVyc2lvblRyYW5zYWN0aW9uLmFib3J0KCk7Ci0gICAgfTsKLQor
ICAgIH0KKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBh
bGVydCgiUHV0IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cisg
ICAgCiAgICAgZHVtcE9iamVjdFN0b3JlcyhkYXRhYmFzZSk7ICAgIAotICAgIHNldFRpbWVvdXQo
ZiwgMCk7CiAgICAgCiAgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihl
dmVudCkgewogICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJh
bnNhY3Rpb24gYWJvcnRlZCIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmMxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1iYXNpYy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQUxFUlQ6IEluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9s
ZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBvYmplY3QgcHV0IFNVQ0NFU1Mg
LSBmb28xCitBTEVSVDogYXJyYXkgcHV0IFNVQ0NFU1MgLSBmb28yCitBTEVSVDogU2Vjb25kIG9i
amVjdCBwdXQgU1VDQ0VTUyAtIGJhejEKK0FMRVJUOiBTZWNvbmQgYXJyYXkgcHV0IFNVQ0NFU1Mg
LSBiYXoyCitBTEVSVDogSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
Y29tcGxldGUKK0FMRVJUOiBEb25lCitUaGlzIHRlc3QgY3JlYXRlcyBzb21lIG9iamVjdCBzdG9y
ZXMgd2l0aCBrZXlwYXRocy4KK0l0IHRoZW4gcHV0cyBzb21lIHZhbHVlcyBpbiB0aGVtLgorSXQg
bWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2ljLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYWViMAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2lj
Lmh0bWwKQEAgLTAsMCArMSw3NCBAQAorVGhpcyB0ZXN0IGNyZWF0ZXMgc29tZSBvYmplY3Qgc3Rv
cmVzIHdpdGgga2V5cGF0aHMuPGJyPgorSXQgdGhlbiBwdXRzIHNvbWUgdmFsdWVzIGluIHRoZW0u
PGJyPgorSXQgbWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC48YnI+Cis8
c2NyaXB0PgorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30KKworZnVuY3Rpb24g
ZG9uZSgpCit7CisgICAgYWxlcnQoIkRvbmUiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCit2YXIgY3JlYXRlUmVxdWVz
dCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiS2V5cGF0aEJhc2ljVGVzdERhdGFiYXNlIiwgMSk7
CisKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQu
b2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAg
ICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAg
ICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OyAgICAKKyAgICB2YXIgb2JqZWN0
U3RvcmUxID0gZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIk9TMSIsIHsga2V5UGF0aDogImZv
byIgfSk7CisgICAgdmFyIG9iamVjdFN0b3JlMiA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3Jl
KCJPUzIiLCB7IGtleVBhdGg6ICJmb28uYmFyIiB9KTsKKworICAgIHZhciBvYmplY3QgPSBuZXcg
T2JqZWN0OworICAgIG9iamVjdC5zdHVmZiA9ICJiYXIxIjsKKyAgICBvYmplY3QuZm9vID0gImZv
bzEiOworICAgICAgICAKKyAgICB2YXIgcmVxdWVzdDEgPSBvYmplY3RTdG9yZTEucHV0KG9iamVj
dCk7CisgICAgcmVxdWVzdDEub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
YWxlcnQoIm9iamVjdCBwdXQgU1VDQ0VTUyAtICIgKyByZXF1ZXN0MS5yZXN1bHQpOworICAgIH0K
KworICAgIHZhciBhcnJheSA9IHsgZm9vOiAiZm9vMiIsIHN0dWZmOiAiYmFyMiIgfTsKKworICAg
IHZhciByZXF1ZXN0MiA9IG9iamVjdFN0b3JlMS5wdXQoYXJyYXkpOworICAgIHJlcXVlc3QyLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJhcnJheSBwdXQgU1VD
Q0VTUyAtICIgKyByZXF1ZXN0Mi5yZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QuZm9v
ID0gbmV3IE9iamVjdDsKKyAgICBvYmplY3QuZm9vLmJhciA9ICJiYXoxIjsKKyAgICB2YXIgcmVx
dWVzdDMgPSBvYmplY3RTdG9yZTIucHV0KG9iamVjdCk7CisgICAgcmVxdWVzdDMub25zdWNjZXNz
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlNlY29uZCBvYmplY3QgcHV0IFNV
Q0NFU1MgLSAiICsgcmVxdWVzdDMucmVzdWx0KTsKKyAgICB9CisKKyAgICBhcnJheS5mb28gPSB7
IGJhcjogImJhejIiIH07CisKKyAgICB2YXIgcmVxdWVzdDQgPSBvYmplY3RTdG9yZTIucHV0KGFy
cmF5KTsKKyAgICByZXF1ZXN0NC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICBhbGVydCgiU2Vjb25kIGFycmF5IHB1dCBTVUNDRVNTIC0gIiArIHJlcXVlc3Q0LnJlc3VsdCk7
CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNh
Y3Rpb24gdW5leHBlY3RlZCBhYm9ydGVkIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAg
ICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgIGFsZXJ0KCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21w
bGV0ZSIpOworICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9u
Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdy
YWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7
CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGM4Mzg3ZC4uODFmZWE1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTg3Niw2ICs4NzYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAogICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwCisgICAgTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcAogCiAgICAgTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGNmMGUwNzMuLmVmMjE2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMDQgQEAKKzIwMTUt
MTAtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVy
biBJREI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9iYXNpYy1wdXQuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlEYXRhOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Om9wZXJhdG9yPT0p
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGE6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpoYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGFIYXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRyYWl0czo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGFIYXNo
VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRy
YWl0czo6aXNFbXB0eVZhbHVlKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0luZGV4
ZWREQi5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJBbnk6OklEQkFueSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6bW9kZXJuSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6Y3JlYXRlKToKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
OjpkaWRDcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpnZXRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6
c2F2ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Ub1NlcnZlcjo6Y29tcGxldGVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6YXV0b0luY3JlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6Z2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjppbmZvKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJlcXVl
c3QpOiBEZWxldGVkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJl
cXVlc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6SURCUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnNvdXJjZU9i
amVjdFN0b3JlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50
OjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJ
REJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJSZXF1ZXN0OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkNsaWVudDo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6Y29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmRpZEFi
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmNyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGll
bnQ6OklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpk
aWRQdXRPckFkZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmRlYWN0aXZhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJUcmFuc2FjdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
VHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpU
cmFuc2FjdGlvbkFjdGl2YXRvcjo6VHJhbnNhY3Rpb25BY3RpdmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbkFjdGl2YXRvcjo6flRyYW5zYWN0aW9uQWN0aXZh
dG9yKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9w
ZXJhdGlvbi5jcHA6IAorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbjo6VHJhbnNhY3Rpb25PcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVy
YXRpb24pOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
Q29ubmVjdGlvblRvQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
Q29ubmVjdGlvblRvQ2xpZW50OjpkaWRQdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkR2V0UmVjb3JkKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRl
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwdXRPckFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bjo6cmVjb3JkVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpjb250YWluc1Jl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpk
ZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RT
dG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2Jq
ZWN0U3RvcmU6OnZhbHVlRm9yS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1WYWx1ZURh
dGFDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OmdldFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VJbmZvOjppbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oOgorCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlkYkVycm9y
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppZGJFcnJvckRlc2NyaXB0aW9uKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaDoKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdERhdGE6OnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3REYXRhOjpvYmplY3RTdG9yZUlkZW50aWZpZXIpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVzdWx0RGF0YTo6SURCUmVzdWx0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXN1bHREYXRhOjpwdXRPckFkZFN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0
RGF0YTo6Z2V0UmVjb3JkU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlJlc3VsdERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6OnJl
c3VsdEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXN1bHREYXRhOjpyZXN1bHREYXRhKToK
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpkaWRQdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZEdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlk
YktleVRvSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXliZUNyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKworICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFk
Q29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyPjo6Y29w
eSk6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKworICAgICAgICAq
IHBsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpjb3B5VmVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGF0YSk6CisKIDIwMTUt
MTAtMjcgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbU3RyZWFtcyBBUEldIEFkZCBjbG9zZSBtZXRob2QgdG8gd3JpdGFibGUgc3RyZWFt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCmlu
ZGV4IDkyYzMwMWYuLjE0MmYyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleURhdGEuY3BwCkBAIC0zMTksNiArMzE5LDQ1IEBAIHZvaWQgSURCS2V5RGF0
YTo6c2V0TnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlKQogICAgIG1faXNOdWxsID0gZmFsc2U7CiB9
CiAKK0lEQktleURhdGEgSURCS2V5RGF0YTo6ZGVsZXRlZFZhbHVlKCkKK3sKKyAgICBJREJLZXlE
YXRhIHJlc3VsdDsKKyAgICByZXN1bHQubV9pc051bGwgPSBmYWxzZTsKKyAgICByZXN1bHQubV9p
c0RlbGV0ZWRWYWx1ZSA9IHRydWU7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOworfQor
Citib29sIElEQktleURhdGE6Om9wZXJhdG9yPChjb25zdCBJREJLZXlEYXRhJiByaHMpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbXBhcmUocmhzKSA8IDA7Cit9CisKK2Jvb2wgSURCS2V5RGF0YTo6
b3BlcmF0b3I9PShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV90
eXBlICE9IG90aGVyLm1fdHlwZSB8fCBtX2lzTnVsbCAhPSBvdGhlci5tX2lzTnVsbCB8fCBtX2lz
RGVsZXRlZFZhbHVlICE9IG90aGVyLm1faXNEZWxldGVkVmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoK
KyAgICBjYXNlIEtleVR5cGU6Ok1heDoKKyAgICBjYXNlIEtleVR5cGU6Ok1pbjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CisgICAgY2FzZSBLZXlUeXBl
OjpEYXRlOgorICAgICAgICByZXR1cm4gbV9udW1iZXJWYWx1ZSA9PSBvdGhlci5tX251bWJlclZh
bHVlOworICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmdW
YWx1ZSA9PSBvdGhlci5tX3N0cmluZ1ZhbHVlOworICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Cisg
ICAgICAgIGlmIChtX2FycmF5VmFsdWUuc2l6ZSgpICE9IG90aGVyLm1fYXJyYXlWYWx1ZS5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcnJheVZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9hcnJh
eVZhbHVlWzBdICE9IG90aGVyLm1fYXJyYXlWYWx1ZVswXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCmluZGV4IDkxNTYzYjIuLmI2YWEwYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklE
QktleS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC04NywxNCArODgsODcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOdWxsOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlICE9IEtleVR5cGU6OkludmFsaWQ7IH0KICAgICBLZXlUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IElEQktleURhdGEmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5
RGF0YSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJREJLZXlEYXRh
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4gaGFzaENvZGVzOworICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3R5cGUpKTsKKyAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzTnVs
bCA/IDEgOiAwKTsKKyAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzRGVsZXRlZFZhbHVlID8g
MSA6IDApOworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIEtleVR5cGU6
OkludmFsaWQ6CisgICAgICAgIGNhc2UgS2V5VHlwZTo6TWF4OgorICAgICAgICBjYXNlIEtleVR5
cGU6Ok1pbjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6Ok51bWJl
cjoKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgorICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZtX251bWJlclZh
bHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6
CisgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2gobV9zdHJpbmdW
YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6
CisgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IG1fYXJyYXlWYWx1ZSkKKyAgICAgICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gV1RGOjpyb3VuZFVwVG9Q
b3dlck9mVHdvKGhhc2hDb2Rlcy5zaXplKCkpOworICAgICAgICBoYXNoQ29kZXMucmVzaXplKHRh
cmdldFNpemUpOworCisgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFz
aENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworICAg
IH0KKworICAgIHN0YXRpYyBJREJLZXlEYXRhIGRlbGV0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZhbHVlOyB9CisKIHByaXZh
dGU6CiAgICAgS2V5VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPElEQktleURhdGE+IG1fYXJyYXlW
YWx1ZTsKICAgICBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKICAgICBkb3VibGUgbV9udW1iZXJWYWx1
ZSB7IDAgfTsKICAgICBib29sIG1faXNOdWxsIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNEZWxl
dGVkVmFsdWUgeyBmYWxzZSB9OworfTsKKworc3RydWN0IElEQktleURhdGFIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBhLmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElEQktleURhdGEmIGEsIGNvbnN0IElE
QktleURhdGEmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCitzdHJ1Y3QgSURCS2V5
RGF0YUhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0b21IYXNoVHJhaXRzPElEQktleURhdGE+
IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworCisgICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKElEQktleURhdGEmIGtleSkKKyAgICB7
CisgICAgICAgIGtleSA9IElEQktleURhdGE6OmRlbGV0ZWRWYWx1ZSgpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IElEQktleURhdGEmIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiBrZXkuaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSURCS2V5RGF0YSBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJREJLZXlE
YXRhKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IElEQktl
eURhdGEmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkuaXNOdWxsKCk7CisgICAgfQog
fTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSW5kZXhlZERCLmgKaW5kZXggNTU4YmJhNy4uOGZlZjUyMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCkBAIC00MSw3ICs0MSw4IEBA
IGNvbnN0IHVuc2lnbmVkIFRyYW5zYWN0aW9uTW9kZU1heGltdW0gPSAyOwogCiBlbnVtIGNsYXNz
IFRyYW5zYWN0aW9uU3RhdGUgewogICAgIFVuc3RhcnRlZCwKLSAgICBSdW5uaW5nLAorICAgIEFj
dGl2ZSwKKyAgICBJbmFjdGl2ZSwKICAgICBDb21taXR0aW5nLAogICAgIEFib3J0aW5nLAogICAg
IEZpbmlzaGVkLApAQCAtNzEsNyArNzIsMTIgQEAgZW51bSBjbGFzcyBLZXlQYXRoVHlwZSB7CiAg
ICAgU3RyaW5nLAogICAgIEFycmF5LAogfTsKLSAgICAKKworZW51bSBjbGFzcyBPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUgeworICAgIE92ZXJ3cml0ZSwKKyAgICBOb092ZXJ3cml0ZSwKK307CisK
IC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGlnaGVzdCBwcmVjZWRlbnQgaW4gdGVy
bXMgb2Ygc29ydCBvcmRlci4KIGVudW0gS2V5VHlwZSB7CiAgICAgTWF4ID0gLTEsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5j
cHAKaW5kZXggMmZkYWI3ZC4uN2U5YTEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcApAQCAtNDIsNiArNDIsMTgg
QEAgSURCQW55OjpJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKQogewogfQogCitJ
REJBbnk6OklEQkFueShSZWY8SURCT2JqZWN0U3RvcmU+JiYgb2JqZWN0U3RvcmUpCisgICAgOiBt
X3R5cGUoSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSkKKyAgICAsIG1fb2JqZWN0U3RvcmUo
YWRvcHRSZWYoJm9iamVjdFN0b3JlLmxlYWtSZWYoKSkpCit7Cit9CisKK0lEQkFueTo6SURCQW55
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJB
bnk6OlR5cGU6OlNjcmlwdFZhbHVlKQorICAgICwgbV9zY3JpcHRWYWx1ZSh2YWx1ZSkKK3sKK30K
KwogSURCQW55Ojp+SURCQW55KCkKIHsKIH0KQEAgLTgyLDYgKzk0LDEyIEBAIFJlZlB0cjxXZWJD
b3JlOjpJREJPYmplY3RTdG9yZT4gSURCQW55OjppZGJPYmplY3RTdG9yZSgpCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKK0lEQk9iamVjdFN0b3JlKiBJREJBbnk6Om1vZGVybklEQk9iamVjdFN0
b3JlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3Rv
cmUpOworICAgIHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOworfQorCiBSZWZQdHI8V2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQogewogICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQkFueUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJBbnlJbXBsLmgKaW5kZXggYzE0MjY1Ni4uMDljNDJiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUltcGwuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUltcGwuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CkBAIC00MSw2ICs0MiwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KFdURjo6bW92ZShkYXRhYmFzZSkp
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlKFJlZjxJREJPYmpl
Y3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSURCQW55KFdURjo6bW92ZShvYmplY3RTdG9yZSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UmVmUHRyPElEQkFueT4gY3JlYXRlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7Cisg
ICAgfQorCiAgICAgdmlydHVhbCB+SURCQW55KCk7CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtNTcsMTEgKzY4LDE3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgb3ZlcnJpZGUg
ZmluYWw7CiAgICAgdmlydHVhbCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgb3ZlcnJpZGUg
ZmluYWw7CiAKKyAgICBJREJPYmplY3RTdG9yZSogbW9kZXJuSURCT2JqZWN0U3RvcmUoKTsKKwog
cHJpdmF0ZToKLSAgICBJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYmKTsKKyAgICBleHBsaWNpdCBJ
REJBbnkoUmVmPElEQkRhdGFiYXNlPiYmKTsKKyAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQk9i
amVjdFN0b3JlPiYmKTsKKyAgICBleHBsaWNpdCBJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmKTsKKwogCiAgICAgSURCQW55OjpUeXBlIG1fdHlwZSB7IElEQkFueTo6VHlwZTo6
VW5kZWZpbmVkIH07CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKIAogICAgIGNvbnN0IElEQktleVBh
dGggbV9pZGJLZXlQYXRoOwogICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fc2Ny
aXB0VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDQ2MjA5ZDgu
LmU2MTAzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC05OCw4ICs5
OCw3IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGVPYmplY3RTdG9yZShUcmFu
c2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIEFTU0VSVCgh
bV9hY3RpdmVPcGVyYXRpb25zLmNvbnRhaW5zKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsKLSAg
ICBtX2FjdGl2ZU9wZXJhdGlvbnMuc2V0KG9wZXJhdGlvbi5pZGVudGlmaWVyKCksICZvcGVyYXRp
b24pOworICAgIHNhdmVPcGVyYXRpb24ob3BlcmF0aW9uKTsKIAogICAgIG1fZGVsZWdhdGUtPmNy
ZWF0ZU9iamVjdFN0b3JlKElEQlJlcXVlc3REYXRhKG9wZXJhdGlvbiksIGluZm8pOwogfQpAQCAt
MTA3LDExICsxMDYsMzcgQEAgdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVj
dFN0b3JlKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGMKIHZvaWQgSURCQ29ubmVj
dGlvblRvU2VydmVyOjpkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6
OmRpZENyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgY29tcGxldGVPcGVyYXRpb24ocmVzdWx0RGF0
YSk7Cit9CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IG1fYWN0aXZlT3BlcmF0aW9ucy50YWtlKHJl
c3VsdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSk7Ci0gICAgQVNTRVJUKG9wZXJhdGlvbik7Cit2
b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQoVHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdGlvbiwgUmVmUHRyPElEQktleT4mIGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4mIHZhbHVlLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBv
dmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2
ZXI6OnB1dE9yQWRkIik7CiAKLSAgICBvcGVyYXRpb24tPmNvbXBsZXRlZChyZXN1bHREYXRhKTsK
KyAgICBzYXZlT3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAgbV9kZWxlZ2F0ZS0+cHV0T3JBZGQo
SURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwga2V5LmdldCgpLCAqdmFsdWUsIG92ZXJ3cml0ZU1v
ZGUpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkUHV0T3JBZGQoY29uc3Qg
SURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRQdXRPckFkZCIpOworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJl
c3VsdERhdGEpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Z2V0UmVjb3JkKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+JiBrZXkpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Z2V0UmVjb3JkIik7CisK
KyAgICBBU1NFUlQoa2V5KTsKKworICAgIHNhdmVPcGVyYXRpb24ob3BlcmF0aW9uKTsKKyAgICBt
X2RlbGVnYXRlLT5nZXRSZWNvcmQoSURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwga2V5LmdldCgp
KTsKK30KKwordm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29yZChjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29yZCIpOworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJl
c3VsdERhdGEpOwogfQogCiB2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y29tbWl0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQpAQCAtMTg1LDYgKzIxMCwyMCBAQCB2
b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6dW5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbihJ
REJEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb25NYXAucmVtb3Zl
KGRhdGFiYXNlLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgSURC
Q29ubmVjdGlvblRvU2VydmVyOjpzYXZlT3BlcmF0aW9uKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBv
cGVyYXRpb24pCit7CisgICAgQVNTRVJUKCFtX2FjdGl2ZU9wZXJhdGlvbnMuY29udGFpbnMob3Bl
cmF0aW9uLmlkZW50aWZpZXIoKSkpOworICAgIG1fYWN0aXZlT3BlcmF0aW9ucy5zZXQob3BlcmF0
aW9uLmlkZW50aWZpZXIoKSwgJm9wZXJhdGlvbik7Cit9CisKK3ZvaWQgSURCQ29ubmVjdGlvblRv
U2VydmVyOjpjb21wbGV0ZU9wZXJhdGlvbihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQoreworICAgIGF1dG8gb3BlcmF0aW9uID0gbV9hY3RpdmVPcGVyYXRpb25zLnRha2UocmVzdWx0
RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQob3BlcmF0aW9uKTsKKworICAg
IG9wZXJhdGlvbi0+Y29tcGxldGVkKHJlc3VsdERhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJ
REJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1Nl
cnZlci5oCmluZGV4IDQzMDVlYTIuLjdlMjc4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2Vy
dmVyLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIElEQkNsaWVudCB7CiBjbGFzcyBJREJE
YXRhYmFzZTsKIGNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CiBjbGFzcyBJREJUcmFuc2FjdGlvbjsK
K2NsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uOwogCiBjbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IHsKIHB1YmxpYzoK
QEAgLTYzLDYgKzY0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9p
ZCBkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJik7CiAKKyAgICB2b2lk
IHB1dE9yQWRkKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktleT4mLCBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVy
d3JpdGVNb2RlKTsKKyAgICB2b2lkIGRpZFB1dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsK
KworICAgIHZvaWQgZ2V0UmVjb3JkKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktl
eT4mKTsKKyAgICB2b2lkIGRpZEdldFJlY29yZChjb25zdCBJREJSZXN1bHREYXRhJik7CisKICAg
ICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkaWRD
b21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKIApAQCAtNzcsNyArODQsMTAgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlcihJREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZSYpOwotICAgIAorCisgICAgdm9pZCBzYXZlT3BlcmF0aW9uKFRyYW5zYWN0
aW9uT3BlcmF0aW9uJik7CisgICAgdm9pZCBjb21wbGV0ZU9wZXJhdGlvbihjb25zdCBJREJSZXN1
bHREYXRhJik7CisKICAgICBSZWY8SURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGU+IG1fZGVs
ZWdhdGU7CiAKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPElEQkNs
aWVudDo6SURCT3BlbkRCUmVxdWVzdD4+IG1fb3BlbkRCUmVxdWVzdE1hcDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKaW5kZXggMDliMmYwMS4uZWYyNjhjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNv
bm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKQEAgLTMwLDkg
KzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCS2V5OwogY2xhc3Mg
SURCT2JqZWN0U3RvcmVJbmZvOwogY2xhc3MgSURCUmVxdWVzdERhdGE7CiBjbGFzcyBJREJSZXNv
dXJjZUlkZW50aWZpZXI7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK25hbWVzcGFj
ZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU7Cit9CiAK
IG5hbWVzcGFjZSBJREJDbGllbnQgewogCkBAIC00Niw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihJREJSZXNvdXJjZUlkZW50aWZpZXImKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKElEQlJlc291cmNlSWRlbnRpZmll
ciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURCS2V5KiwgU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURC
S2V5KikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlQ29ubmVjdGlvbkNsb3NlZCh1
aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKSA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgcmVmKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCBjZjhjZjE0
Li40ODg5YjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcApAQCAtMjgsNyArMjgsMTUg
QEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NUmVxdWVz
dFN0YXRlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklE
QkVycm9yLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdEltcGwu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkltcGwuaCIKKyNpbmNsdWRlICJJbmRleGVkREIu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJDbGllbnQgewpAQCAtODAs
NyArODgsNyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQk9iamVjdFN0b3Jl
Ojp0cmFuc2FjdGlvbigpIGNvbnN0CiAKIGJvb2wgSURCT2JqZWN0U3RvcmU6OmF1dG9JbmNyZW1l
bnQoKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG1faW5mby5hdXRvSW5jcmVtZW50KCk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikKQEAgLTg4LDkgKzk2LDkgQEAgUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUmLCBEZXBy
ZWNhdGVkOjpTY3IKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0
ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gcHV0T3JBZGQo
c3RhdGUsIHZhbHVlLCBudWxscHRyLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZTo6T3ZlcndyaXRlLCBlYyk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9u
Q29kZSYpCkBAIC0xMTgsOSArMTI2LDM0IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikKK1JlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKKworICAgIGlmICghY29udGV4dCkgewor
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
ZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpUcmFuc2Fj
dGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0
U3RhdGUoY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVU
b0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+
dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxF
eGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJh
bnNhY3Rpb24tPnJlcXVlc3RHZXRSZWNvcmQoKmNvbnRleHQsICp0aGlzLCAqaWRiS2V5KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYocmVxdWVzdC5sZWFrUmVmKCkpOwogfQogCiBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikKQEAgLTEzMywxMSArMTY2LDk0IEBAIFJl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0
YXRlJiwgRGVwcmVjYXRlZDo6U2NyCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlND
OjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgYXV0byBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGV4ZWNTdGF0ZSwga2V5
KTsKKyAgICByZXR1cm4gcHV0T3JBZGQoZXhlY1N0YXRlLCB2YWx1ZSwgaWRiS2V5LCBJbmRleGVk
REI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUsIGVjKTsKIH0KIAorUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgUmVmUHRyPElE
QktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVN
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0
U3RvcmU6OnB1dE9yQWRkIik7CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgp
KSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9u
Q29kZTo6UmVhZE9ubHlFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IHN0YXRp
Y19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2Rl
bGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1
ZS5qc1ZhbHVlKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkgeworICAgICAgICBlYyA9IERBVEFfQ0xPTkVfRVJSOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5oYXNCbG9iVVJMcygpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKKyAgICAg
ICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKGtleSAmJiBrZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAg
ICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0
YUVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCB1c2Vz
SW5saW5lS2V5cyA9ICFtX2luZm8ua2V5UGF0aCgpLmlzTnVsbCgpOworICAgIGJvb2wgdXNlc0tl
eUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKKyAgICBpZiAodXNlc0lubGluZUtleXMpIHsK
KyAgICAgICAgaWYgKGtleSkgeworICAgICAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRp
b25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5
ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHN0YXRlLCB2YWx1
ZSwgbV9pbmZvLmtleVBhdGgoKSk7CisgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRo
S2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9u
Q29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFrZXlQYXRoS2V5KSB7CisgICAgICAg
ICAgICBpZiAodXNlc0tleUdlbmVyYXRvcikgeworICAgICAgICAgICAgICAgIGlmICghY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJ
REJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29k
ZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlQYXRoS2V5KSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWtleSk7CisgICAgICAgICAgICBrZXkgPSBrZXlQYXRoS2V5OworICAgICAgICB9
CisgICAgfSBlbHNlIGlmICghdXNlc0tleUdlbmVyYXRvciAmJiAha2V5KSB7CisgICAgICAgIGVj
ID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9y
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBjb250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoJnN0YXRlKTsKKyAgICBpZiAoIWNv
bnRleHQpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNl
cHRpb25Db2RlOjpVbmtub3duKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0UHV0T3JB
ZGQoKmNvbnRleHQsICp0aGlzLCBrZXkuZ2V0KCksICpzZXJpYWxpemVkVmFsdWUsIG92ZXJ3cml0
ZU1vZGUpOworICAgIHJldHVybiBhZG9wdFJlZihyZXF1ZXN0LmxlYWtSZWYoKSk7Cit9CisKKwog
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1w
bC5oCmluZGV4IDVmZGM5ODYuLmJmODIxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmgKQEAg
LTMwLDggKzMwLDEyIEBACiAKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlSW5mby5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleTsKKwogbmFtZXNwYWNlIElEQkNsaWVudCB7CiAK
IGNsYXNzIElEQlRyYW5zYWN0aW9uOwpAQCAtNzIsMTEgKzc2LDE3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKIAorICAgIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYg
aW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCiBwcml2YXRlOgogICAgIElEQk9iamVj
dFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIElEQlRyYW5zYWN0aW9uJik7CiAKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gcHV0T3JBZGQoSlNDOjpFeGVjU3RhdGUmLCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIFJlZlB0cjxJREJLZXk+LCBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZSwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgSURCT2JqZWN0U3Rv
cmVJbmZvIG1faW5mbzsKICAgICBSZWY8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisK
KyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJD
bGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwCmluZGV4IGUwMTI2OTUuLmI2ZGJk
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJPcGVuREJSZXF1ZXN0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcApAQCAtNTUsNyArNTUsNiBAQCBJ
REJPcGVuREJSZXF1ZXN0OjpJREJPcGVuREJSZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYg
Y29ubmVjdGlvbiwgU2NyaXB0RXhlYwogICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJh
c2VJZGVudGlmaWVyKQogICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCiB7Ci0gICAgc3VzcGVuZElm
TmVlZGVkKCk7CiB9CiAKIElEQk9wZW5EQlJlcXVlc3Q6On5JREJPcGVuREJSZXF1ZXN0KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1
ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
UmVxdWVzdEltcGwuY3BwCmluZGV4IGIwZjc5NDcuLmU0YzJjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBs
LmNwcApAQCAtMjksMTcgKzI5LDM5IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
ICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQktleURhdGEu
aCIKKyNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0
YUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIAorUmVmPElEQlJlcXVlc3Q+IElEQlJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RT
dG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIG9iamVjdFN0b3JlLCB0cmFu
c2FjdGlvbikpOworfQorCiBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6
IElEQk9wZW5EQlJlcXVlc3QoY29udGV4dCkKICAgICAsIG1fY29ubmVjdGlvbihjb25uZWN0aW9u
KQogICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIoY29ubmVjdGlvbikKIHsKKyAgICBzdXNwZW5k
SWZOZWVkZWQoKTsKK30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6IElEQk9wZW5EQlJlcXVlc3QoJmNvbnRleHQpCisgICAg
LCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKKyAgICAsIG1fY29ubmVjdGlvbih0cmFuc2Fj
dGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFu
c2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3NvdXJjZShhZG9wdFJlZigqSURC
QW55OjpjcmVhdGUob2JqZWN0U3RvcmUpLmxlYWtSZWYoKSkpCit7CisgICAgc3VzcGVuZElmTmVl
ZGVkKCk7CiB9CiAKIElEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKQEAgLTc3LDYgKzk5LDE4IEBA
IGNvbnN0IFN0cmluZyYgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHJlYWR5U3RhdGU7CiB9CiAKK3VpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3Jl
SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgIT0gSURCQW55OjpUeXBlOjpJREJPYmplY3RT
dG9yZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX3NvdXJjZS0+bW9kZXJuSURCT2Jq
ZWN0U3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPm1v
ZGVybklEQk9iamVjdFN0b3JlKCktPmluZm8oKS5pZGVudGlmaWVyKCk7Cit9CisKIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKQEAgLTkyLDYg
KzEyNiwxMSBAQCBib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25z
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKK30KKwog
dm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQpAQCAtMTAxLDYgKzE0MCw4MiBAQCB2b2lk
IElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KCZldmVudC5nZXQo
KSk7CiB9CiAKK2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBwcnBFdmVudCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudCAtICVzIiwgcHJwRXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKworICAgIFJlZlB0
cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVl
c3RSZWFkeVN0YXRlOjpEb25lOworCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7CisgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2FjdGlv
bikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uKTsKKyAgICAgICAgdGFy
Z2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbi0+ZGIoKSk7CisgICAgfQorCisgICAgYm9vbCBkb250
UHJldmVudERlZmF1bHQ7CisgICAgeworICAgICAgICBUcmFuc2FjdGlvbkFjdGl2YXRvciBhY3Rp
dmF0b3IobV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAg
IH0KKworICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7CisKKyAgICByZXR1cm4gZG9u
dFByZXZlbnREZWZhdWx0OworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJ
REJLZXlEYXRhKiBrZXlEYXRhKQoreworICAgIGlmICgha2V5RGF0YSkgeworICAgICAgICBtX3Jl
c3VsdCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKmtleURhdGEpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUo
V1RGOjptb3ZlKHZhbHVlKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1
Y3R1cmVkQ2xvbmUoY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUi
KTsKKworICAgIGF1dG8gY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7
CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEY6Om1vdmUodmFsdWUpKTsKK30KKwor
dm9pZCBJREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpCit7CisgICAgbV9pZGJFcnJvciA9IHJlc3VsdERhdGEuZXJyb3IoKTsKKyAgICBp
ZiAoIW1faWRiRXJyb3IuaXNOdWxsKCkpCisgICAgICAgIG9uRXJyb3IoKTsKKyAgICBlbHNlCisg
ICAgICAgIG9uU3VjY2VzcygpOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpvbkVycm9yIik7CisKKyAgICBBU1NFUlQo
IW1faWRiRXJyb3IuaXNOdWxsKCkpOworICAgIG1fZG9tRXJyb3IgPSBET01FcnJvcjo6Y3JlYXRl
KG1faWRiRXJyb3IubmFtZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6
Om9uU3VjY2VzcygpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyIpOworCisgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgZmFsc2UsIGZhbHNlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IGQ0NjI0MTEuLjFk
ZmZiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJSZXF1ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCkBAIC0zNyw3ICszNywxMCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBFdmVudDsKK2NsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJSZXN1
bHREYXRhOworY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CisKIAogbmFtZXNwYWNlIElEQkNs
aWVudCB7CiAKQEAgLTQ1LDYgKzQ4LDggQEAgY2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyOwog
CiBjbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3QsIHB1
YmxpYyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElE
QlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUm
LCBJREJUcmFuc2FjdGlvbiYpOworCiAgICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBy
ZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlSWRlbnRpZmllcjsg
fQogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpIG92ZXJyaWRlOwpAQCAtNTYsNiArNjEsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHJl
YWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIHVpbnQ2NF90IHNvdXJjZU9iamVjdFN0
b3JlSWRlbnRpZmllcigpIGNvbnN0OworCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KQEAgLTY0LDE1ICs3MSwyMyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6ZGVyZWY7CiAKICAgICB2b2lkIGVucXVl
dWVFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZSBmaW5hbDsKIAogICAgIElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQogCisgICAgdm9pZCBy
ZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgc2V0UmVz
dWx0KGNvbnN0IElEQktleURhdGEqKTsKKyAgICB2b2lkIHNldFJlc3VsdFRvU3RydWN0dXJlZENs
b25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CisKIHByb3RlY3RlZDoKICAgICBJREJS
ZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
KyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYs
IElEQlRyYW5zYWN0aW9uJik7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QuCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWw7CiAgICAgCiAgICAgLy8gRXZlbnRUYXJnZXQuCiAgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+
OjpyZWYoKTsgfQpAQCAtODIsMTAgKzk3LDE2IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8SURC
QW55PiBtX3Jlc3VsdDsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247
CiAgICAgUmVmUHRyPERPTUVycm9yPiBtX2RvbUVycm9yOworICAgIElEQkVycm9yIG1faWRiRXJy
b3I7CiAKIHByaXZhdGU6CisgICAgdm9pZCBvbkVycm9yKCk7CisgICAgdm9pZCBvblN1Y2Nlc3Mo
KTsKKwogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgbV9jb25uZWN0aW9uOwogICAgIElEQlJl
c291cmNlSWRlbnRpZmllciBtX3Jlc291cmNlSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8SURCQW55
PiBtX3NvdXJjZTsKKyAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmlu
ZGV4IDgyZTU5NjIuLmQyZGZkYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSURCRXJyb3IuaCIKICNpbmNsdWRlICJJREJFdmVudERp
c3BhdGNoZXIuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQlJl
cXVlc3RJbXBsLmgiCiAjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC02MSw3ICs2Miw3
IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihJREJEYXRhYmFzZSYgZGF0YWJhc2Us
IGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYKICAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5m
byA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2RhdGFiYXNlLT5pbmZvKCkp
OwogCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25TdGF0ZTo6UnVubmluZzsKKyAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlOjpJbmFjdGl2ZTsKIH0KIAogSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlv
bigpCkBAIC0xMzAsMTIgKzEzMSwxNSBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5k
Rm9yUGFnZUNhY2hlKCkgY29uc3QKIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKIHsKKyAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkluYWN0aXZlKQorICAgICAgICByZXR1cm4gIW1fdHJhbnNhY3Rpb25PcGVyYXRp
b25RdWV1ZS5pc0VtcHR5KCkgfHwgIW1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuaXNFbXB0eSgp
OworCiAgICAgcmV0dXJuIG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZDsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNBY3RpdmUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6UnVubmlu
ZzsKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFj
dGl2ZTsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkg
Y29uc3QKQEAgLTE4MSw3ICsxODUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25U
aW1lckZpcmVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0FjdGl2ZSgp
KQorICAgIGlmICghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCiAgICAgICAgIGNvbW1pdCgpOwog
fQogCkBAIC0xODksMTAgKzE5Myw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXQiKTsKIAotICAgIGlm
IChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6UnVubmluZykgewotICAg
ICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKKyAg
ICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAK
ICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpDb21taXR0aW5nOwog
CkBAIC0yMTEsNyArMjEzLDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQWJvcnQoY29uc3Qg
SURCRXJyb3ImIGVycm9yKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
ZGlkQWJvcnQiKTsKIAotICAgIEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25TdGF0ZTo6QWJvcnRpbmcgfHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OlJ1bm5pbmcpOworICAgIGlmIChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6RmluaXNoZWQpCisgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YWJhc2UtPmRpZEFi
b3J0VHJhbnNhY3Rpb24oKnRoaXMpOwogCkBAIC0yOTQsNyArMjk3LDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYg
b3BlcmF0aW9uLAogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
T2JqZWN0U3RvcmVPblNlcnZlciIpOwogCi0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFT
U0VSVCghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpOwogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFu
Z2UoKSk7CiAKICAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0
U3RvcmUob3BlcmF0aW9uLCBpbmZvKTsKQEAgLTMwOSw2ICszMTIsODQgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXQKICAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7CiB9CiAKK1JlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElEQktleSYga2V5
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRk
Iik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsK
KworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRy
YW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAmcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9u
OjpkaWRHZXRSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZl
ciwgJmtleSk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGOjptb3ZlKG9wZXJhdGlvbikpOwor
CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXF1ZXN0KTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlv
bjo6Z2V0UmVjb3JkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgUmVm
UHRyPElEQktleT4ga2V5KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
Z2V0UmVjb3JkT25TZXJ2ZXIiKTsKKworICAgIEFTU0VSVCghaXNGaW5pc2hlZE9yRmluaXNoaW5n
KCkpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmdldFJlY29yZChvcGVyYXRpb24sIGtleSk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyKFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIi
KTsKKworICAgIHJlcXVlc3QtPnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEu
cmVzdWx0RGF0YSgpKTsKKyAgICByZXF1ZXN0LT5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEp
OworfQorCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3Rv
cmUsIElEQktleSoga2V5LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRkIik7CisgICAgQVNTRVJUKGlz
QWN0aXZlKCkpOworICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKKyAgICBBU1NFUlQob2JqZWN0
U3RvcmUuaW5mbygpLmF1dG9JbmNyZW1lbnQoKSB8fCBrZXkpOworCisgICAgUmVmPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0
aGlzKTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24o
KnRoaXMsICZyZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2
ZXIsICZJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlciwga2V5LCAmdmFsdWUsIG92ZXJ3
cml0ZU1vZGUpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURjo6bW92ZShvcGVyYXRpb24pKTsK
KworICAgIHJldHVybiBXVEY6Om1vdmUocmVxdWVzdCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b246OnB1dE9yQWRkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgUmVm
UHRyPElEQktleT4ga2V5LCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29u
c3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUmIG92ZXJ3cml0ZU1vZGUpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyIik7
CisKKyAgICBBU1NFUlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKKyAgICBBU1NFUlQoIWlz
UmVhZE9ubHkoKSk7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkucHV0T3JBZGQob3BlcmF0aW9u
LCBrZXksIHZhbHVlLCBvdmVyd3JpdGVNb2RlKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6
ZGlkUHV0T3JBZGRPblNlcnZlcihSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIiKTsKKworICAgIHJlcXVlc3QtPnNldFJlc3VsdChy
ZXN1bHREYXRhLnJlc3VsdEtleSgpKTsKKyAgICByZXF1ZXN0LT5yZXF1ZXN0Q29tcGxldGVkKHJl
c3VsdERhdGEpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphY3RpdmF0ZSgpCit7CisgICAg
QVNTRVJUKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpVbnN0YXJ0ZWQg
fHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZlKTsKKyAg
ICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBY3RpdmU7Cit9CisKK3Zv
aWQgSURCVHJhbnNhY3Rpb246OmRlYWN0aXZhdGUoKQoreworICAgIGlmIChtX3N0YXRlID09IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6VW5zdGFydGVkIHx8IG1fc3RhdGUgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBY3RpdmUpCisgICAgICAgIG1fc3RhdGUgPSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZlOworCisgICAgc2NoZWR1bGVPcGVyYXRpb25U
aW1lcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmluZGV4IDVlYjc5YTUuLjRlOGM5NzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFu
c2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTgxLDEyICs4MSwxOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaWRDb21taXQoY29uc3QgSURCRXJyb3ImKTsKIAogICAgIGJvb2wgaXNWZXJzaW9uQ2hh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvLm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uTW9kZTo6VmVyc2lvbkNoYW5nZTsgfQorICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRP
bmx5OyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogCiAgICAgUmVmPElEQk9iamVjdFN0
b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKIAorICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IElEQk9iamVjdFN0b3JlJiwgSURCS2V5KiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1
ZXN0R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElE
QktleSYpOworCiAgICAgSURCQ29ubmVjdGlvblRvU2VydmVyJiBzZXJ2ZXJDb25uZWN0aW9uKCk7
CiAKKyAgICB2b2lkIGFjdGl2YXRlKCk7CisgICAgdm9pZCBkZWFjdGl2YXRlKCk7CisKIHByaXZh
dGU6CiAgICAgSURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmLCBjb25zdCBJREJUcmFuc2FjdGlv
bkluZm8mKTsKIApAQCAtMTA4LDYgKzExNSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRl
T2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25z
dCBJREJSZXN1bHREYXRhJik7CiAKKyAgICB2b2lkIHB1dE9yQWRkT25TZXJ2ZXIoVHJhbnNhY3Rp
b25PcGVyYXRpb24mLCBSZWZQdHI8SURCS2V5PiwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4sIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlJik7CisgICAgdm9p
ZCBkaWRQdXRPckFkZE9uU2VydmVyKFJlZlB0cjxJREJSZXF1ZXN0PiwgY29uc3QgSURCUmVzdWx0
RGF0YSYpOworCisgICAgdm9pZCBnZXRSZWNvcmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlv
biYsIFJlZlB0cjxJREJLZXk+KTsKKyAgICB2b2lkIGRpZEdldFJlY29yZE9uU2VydmVyKFJlZlB0
cjxJREJSZXF1ZXN0PiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCiAgICAgUmVmPElEQkRhdGFi
YXNlPiBtX2RhdGFiYXNlOwogICAgIElEQlRyYW5zYWN0aW9uSW5mbyBtX2luZm87CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9vcmlnaW5hbERhdGFiYXNlSW5mbzsKQEAg
LTEyMiw2ICsxMzUsMjYgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRp
ZmllciwgUmVmUHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPj4gbV90cmFuc2FjdGlvbk9wZXJhdGlv
bk1hcDsKIH07CiAKK2NsYXNzIFRyYW5zYWN0aW9uQWN0aXZhdG9yIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShUcmFuc2FjdGlvbkFjdGl2YXRvcik7CitwdWJsaWM6CisgICAgVHJhbnNhY3Rp
b25BY3RpdmF0b3IoSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAgICAgICA6IG1fdHJh
bnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICBpZiAobV90cmFuc2FjdGlvbikK
KyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFjdGl2YXRlKCk7CisgICAgfQorCisgICAgflRy
YW5zYWN0aW9uQWN0aXZhdG9yKCkKKyAgICB7CisgICAgICAgIGlmIChtX3RyYW5zYWN0aW9uKQor
ICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGVhY3RpdmF0ZSgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBJREJUcmFuc2FjdGlvbiogbV90cmFuc2FjdGlvbjsKK307CisKIH0gLy8gbmFtZXNw
YWNlIElEQkNsaWVudAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9u
T3BlcmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGE5OTUx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRyYW5zYWN0aW9uT3BlcmF0aW9uLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIElEQkNsaWVudCB7CisKK1RyYW5zYWN0aW9uT3BlcmF0aW9uOjpUcmFuc2FjdGlv
bk9wZXJhdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQlJlcXVlc3QqIHJlcXVl
c3QpCisgICAgOiBUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbikKK3sKKyAgICBpZiAo
IXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVy
ID0gcmVxdWVzdC0+c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIElEQkNsaWVudAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCmluZGV4IDM2
NDQwZjYuLmM5OWQ4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQlJl
cXVlc3RJbXBsLmgiCiAjaW5jbHVkZSAiSURCUmVzb3VyY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCiAKQEAgLTUxLDYgKzUyLDggQEAgcHVibGljOgogCiAg
ICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIHRyYW5zYWN0aW9u
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmluZm8oKS5pZGVudGlm
aWVyKCk7IH0KKyAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdFN0b3JlSWRlbnRpZmllcjsgfQorICAgIElEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgog
ICAgIFRyYW5zYWN0aW9uT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKQEAg
LTU5LDggKzYyLDExIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQogCisgICAgVHJhbnNhY3Rp
b25PcGVyYXRpb24oSURCVHJhbnNhY3Rpb24mLCBJREJSZXF1ZXN0Kik7CisKICAgICBSZWY8SURC
VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1f
aWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCBtX29iamVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsK
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IG1fcGVyZm9ybUZ1bmN0aW9uOwogICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCUmVzdWx0RGF0YSYpPiBtX2NvbXBsZXRlRnVuY3Rpb247
CiB9OwpAQCAtODEsNiArODcsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgKCZtX3RyYW5zYWN0
aW9uLmdldCgpLT4qY29tcGxldGVNZXRob2QpKHJlc3VsdERhdGEpOwogICAgICAgICB9OwogICAg
IH0KKworICAgIFRyYW5zYWN0aW9uT3BlcmF0aW9uSW1wbChJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0LCB2b2lkIChJREJUcmFuc2FjdGlvbjo6
KmNvbXBsZXRlTWV0aG9kKShSZWZQdHI8SURCUmVxdWVzdD4sIGNvbnN0IElEQlJlc3VsdERhdGEm
KSwgdm9pZCAoSURCVHJhbnNhY3Rpb246OipwZXJmb3JtTWV0aG9kKShUcmFuc2FjdGlvbk9wZXJh
dGlvbiYsIEFyZ3VtZW50cy4uLiksIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbiwgcmVxdWVzdC5nZXQoKSkKKyAgICB7
CisgICAgICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCisgICAgICAgIFJlZlB0cjxU
cmFuc2FjdGlvbk9wZXJhdGlvbj4gc2VsZih0aGlzKTsKKyAgICAgICAgbV9wZXJmb3JtRnVuY3Rp
b24gPSBbc2VsZiwgdGhpcywgcGVyZm9ybU1ldGhvZCwgYXJndW1lbnRzLi4uXSB7CisgICAgICAg
ICAgICAoJm1fdHJhbnNhY3Rpb24uZ2V0KCktPipwZXJmb3JtTWV0aG9kKSgqdGhpcywgYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgfTsKKworICAgICAgICBtX2NvbXBsZXRlRnVuY3Rpb24gPSBbc2Vs
ZiwgdGhpcywgcmVxdWVzdCwgY29tcGxldGVNZXRob2RdKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpIHsKKyAgICAgICAgICAgICgmbV90cmFuc2FjdGlvbi5nZXQoKS0+KmNvbXBsZXRl
TWV0aG9kKShyZXF1ZXN0LCByZXN1bHREYXRhKTsKKyAgICAgICAgfTsKKyAgICB9CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAxPgpAQCAtOTQsNiArMTE1LDMyIEBAIFJl
ZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oCiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG9wZXJhdGlvbik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIE1Q
MSwgdHlwZW5hbWUgUDE+CitSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+IGNyZWF0ZVRyYW5z
YWN0aW9uT3BlcmF0aW9uKAorICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCwKKyAgICB2b2lkIChJREJUcmFuc2FjdGlvbjo6KmNv
bXBsZXRlKShSZWZQdHI8SURCUmVxdWVzdD4sIGNvbnN0IElEQlJlc3VsdERhdGEmKSwKKyAgICB2
b2lkIChJREJUcmFuc2FjdGlvbjo6KnBlcmZvcm0pKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgTVAx
KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKK3sKKyAgICBhdXRvIG9wZXJhdGlvbiA9IG5l
dyBUcmFuc2FjdGlvbk9wZXJhdGlvbkltcGw8TVAxPih0cmFuc2FjdGlvbiwgcmVxdWVzdCwgY29t
cGxldGUsIHBlcmZvcm0sIHBhcmFtZXRlcjEpOworICAgIHJldHVybiBhZG9wdFJlZihvcGVyYXRp
b24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUg
TVAzLCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzPgorUmVmUHRyPFRyYW5z
YWN0aW9uT3BlcmF0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigKKyAgICBJREJUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QsCisg
ICAgdm9pZCAoSURCVHJhbnNhY3Rpb246Oipjb21wbGV0ZSkoUmVmUHRyPElEQlJlcXVlc3Q+LCBj
b25zdCBJREJSZXN1bHREYXRhJiksCisgICAgdm9pZCAoSURCVHJhbnNhY3Rpb246OipwZXJmb3Jt
KShUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIE1QMSwgTVAyLCBNUDMpLAorICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJh
bWV0ZXIzKQoreworICAgIGF1dG8gb3BlcmF0aW9uID0gbmV3IFRyYW5zYWN0aW9uT3BlcmF0aW9u
SW1wbDxNUDEsIE1QMiwgTVAzPih0cmFuc2FjdGlvbiwgcmVxdWVzdCwgY29tcGxldGUsIHBlcmZv
cm0sIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMpOworICAgIHJldHVybiBhZG9w
dFJlZihvcGVyYXRpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDdlM2U1YzAuLjg3Yzg0Yjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJC
YWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTMzLDkgKzMzLDExIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSURCS2V5RGF0YTsKIGNsYXNzIElEQk9iamVjdFN0b3JlSW5mbzsKIGNs
YXNzIElEQlJlc291cmNlSWRlbnRpZmllcjsKIGNsYXNzIElEQlRyYW5zYWN0aW9uSW5mbzsKK2Ns
YXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIApAQCAt
NTAsNiArNTIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSURCRXJyb3IgY29tbWl0VHJhbnNh
Y3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIp
ID0gMDsKIAogICAgIHZpcnR1YWwgSURCRXJyb3IgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0c0luT2JqZWN0
U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGJvb2wm
IGtleUV4aXN0cykgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmKSA9IDA7CisgICAgdmlydHVh
bCBJREJFcnJvciBwdXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURC
S2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkgPSAwOworICAgIHZp
cnR1YWwgSURCRXJyb3IgZ2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleURhdGEmLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNw
cAppbmRleCBmOTg1MzdlLi40MzFhNGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50
LmNwcApAQCAtNjgsNiArNjgsMTYgQEAgdm9pZCBJREJDb25uZWN0aW9uVG9DbGllbnQ6OmRpZENy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdCkKICAgICBtX2RlbGVn
YXRlLT5kaWRDcmVhdGVPYmplY3RTdG9yZShyZXN1bHQpOwogfQogCit2b2lkIElEQkNvbm5lY3Rp
b25Ub0NsaWVudDo6ZGlkUHV0T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQorewor
ICAgIG1fZGVsZWdhdGUtPmRpZFB1dE9yQWRkKHJlc3VsdCk7Cit9CisKK3ZvaWQgSURCQ29ubmVj
dGlvblRvQ2xpZW50OjpkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQor
eworICAgIG1fZGVsZWdhdGUtPmRpZEdldFJlY29yZChyZXN1bHQpOworfQorCiB2b2lkIElEQkNv
bm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikK
IHsKICAgICBtX2RlbGVnYXRlLT5kaWRDb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGVycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuaAppbmRleCAyNWNlNTEy
Li5iZmY4NTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCkBAIC01Myw2ICs1Myw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAg
ICAgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lkIGRpZENy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIGRpZFB1dE9y
QWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIGRpZEdldFJlY29yZChjb25zdCBJ
REJSZXN1bHREYXRhJik7CiAKICAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoVW5pcXVl
SURCRGF0YWJhc2VDb25uZWN0aW9uJiwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25u
ZWN0aW9uVG9DbGllbnREZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmgKaW5kZXggY2E3ODg3Yy4u
MTAyN2Y0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLmgK
QEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRBYm9ydFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0VHJhbnNh
Y3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXN1bHREYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRQdXRP
ckFkZChjb25zdCBJREJSZXN1bHREYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRS
ZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBmaXJl
VmVyc2lvbkNoYW5nZUV2ZW50KFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIHVpbnQ2NF90
IHJlcXVlc3RlZFZlcnNpb24pID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA0OTMwMmY5Li4xYzQwMTg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcApAQCAtMTY4LDYgKzE2OCwyOCBAQCB2b2lkIElEQlNlcnZlcjo6Y3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJP
YgogICAgIHRyYW5zYWN0aW9uLT5jcmVhdGVPYmplY3RTdG9yZShyZXF1ZXN0RGF0YSwgaW5mbyk7
CiB9CiAKK3ZvaWQgSURCU2VydmVyOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRh
QnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92
ZXJ3cml0ZU1vZGUpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6cHV0T3JBZGQi
KTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQocmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5
RGF0YSwgdmFsdWVEYXRhLCBvdmVyd3JpdGVNb2RlKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6Omdl
dFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURh
dGEmIGtleURhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6Z2V0UmVjb3Jk
Iik7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0cmFuc2FjdGlvbi0+Z2V0UmVjb3JkKHJlcXVlc3REYXRhLCBr
ZXlEYXRhKTsKK30KKwogdm9pZCBJREJTZXJ2ZXI6OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQogewogICAgIExPRyhJ
bmRleGVkREIsICJJREJTZXJ2ZXI6OmNvbW1pdFRyYW5zYWN0aW9uIik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggNGQy
YTgzYy4uZmYyNjk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwogICAgIHZv
aWQgY29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CiAgICAg
dm9pZCBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQk9i
amVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEm
LCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0
YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgZ2V0UmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYpOwogICAgIHZvaWQg
ZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2VkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50
aWZpZXIpOwogCiAgICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxDcm9z
c1RocmVhZFRhc2s+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbi5jcHAKaW5kZXggNWM0NDc3Zi4uMTUyZmQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUg
Ik1lbW9yeU9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKQEAgLTY3LDE1ICs2
OCw1MyBAQCB2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOjphZGROZXdPYmplY3RT
dG9yZShNZW1vcnlPYmplY3RTdG9yZSYgb2JqZWN0UwogICAgIG9iamVjdFN0b3JlLndyaXRlVHJh
bnNhY3Rpb25TdGFydGVkKCp0aGlzKTsKIH0KIAordm9pZCBNZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbjo6cmVjb3JkVmFsdWVDaGFuZ2VkKE1lbW9yeU9iamVjdFN0b3JlJiBvYmplY3RTdG9y
ZSwgY29uc3QgSURCS2V5RGF0YSYga2V5KQoreworICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5j
b250YWlucygmb2JqZWN0U3RvcmUpKTsKKworICAgIGlmIChtX2lzQWJvcnRpbmcpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9vcmlnaW5hbFZhbHVlcy5hZGQoJm9i
amVjdFN0b3JlLCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdGQ6Om1ha2VfdW5pcXVlPEtleVZhbHVl
TWFwPigpOworCisgICAgYXV0byogbWFwID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKKworICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAtPmFkZChrZXksIFRocmVh
ZFNhZmVEYXRhQnVmZmVyKCkpOworICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBvYmplY3RTdG9yZS52YWx1ZUZvcktleShrZXkpOworICAgIH0KK30KKwogdm9pZCBNZW1vcnlC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJN
ZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6YWJvcnQoKSIpOwogCisgICAgVGVtcG9yYXJ5
Q2hhbmdlPGJvb2w+IGNoYW5nZShtX2lzQWJvcnRpbmcsIHRydWUpOworCiAgICAgaWYgKG1fb3Jp
Z2luYWxEYXRhYmFzZUluZm8pIHsKICAgICAgICAgQVNTRVJUKG1faW5mby5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwogICAgICAgICBtX2JhY2tp
bmdTdG9yZS5zZXREYXRhYmFzZUluZm8oKm1fb3JpZ2luYWxEYXRhYmFzZUluZm8pOwogICAgIH0K
IAorICAgIGZvciAoYXV0byBvYmplY3RTdG9yZSA6IG1fb2JqZWN0U3RvcmVzKSB7CisgICAgICAg
IGF1dG8ga2V5VmFsdWVNYXAgPSBtX29yaWdpbmFsVmFsdWVzLmdldChvYmplY3RTdG9yZSk7Cisg
ICAgICAgIGlmICgha2V5VmFsdWVNYXApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBmb3IgKGF1dG8gZW50cnkgOiAqa2V5VmFsdWVNYXApIHsKKyAgICAgICAgICAgIG9iamVjdFN0
b3JlLT5kZWxldGVSZWNvcmQoZW50cnkua2V5KTsKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLT5z
ZXRLZXlWYWx1ZShlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fb3JpZ2luYWxWYWx1ZXMucmVtb3ZlKG9iamVjdFN0b3JlKTsKKyAgICB9CisKKwogICAgIGZp
bmlzaCgpOwogCiAgICAgZm9yIChhdXRvIG9iamVjdFN0b3JlIDogbV92ZXJzaW9uQ2hhbmdlQWRk
ZWRPYmplY3RTdG9yZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bi5oCmluZGV4IGFhOGFhNjAuLjI5NWJiY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi5oCkBAIC0yOSw3ICsyOSwxMCBAQAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJbmZvLmgiCisjaW5jbHVkZSAiSURC
S2V5RGF0YS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW5mby5oIgorI2luY2x1ZGUgIlRo
cmVhZFNhZmVEYXRhQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICs0MSw4IEBA
IG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogY2xhc3MgTWVtb3J5SURCQmFja2luZ1N0b3JlOwogY2xh
c3MgTWVtb3J5T2JqZWN0U3RvcmU7CiAKK3R5cGVkZWYgSGFzaE1hcDxJREJLZXlEYXRhLCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlciwgSURCS2V5RGF0YUhhc2gsIElEQktleURhdGFIYXNoVHJhaXRzPiBL
ZXlWYWx1ZU1hcDsKKwogY2xhc3MgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gewogICAg
IGZyaWVuZCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24+IHN0
ZDo6bWFrZV91bmlxdWU8TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24+KFdlYkNvcmU6OklE
QlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlJiwgY29uc3QgV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25JbmZvJik7CiBwdWJsaWM6CkBAIC01MSw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBJREJEYXRhYmFzZUluZm8mIG9yaWdpbmFsRGF0YWJhc2VJbmZvKCkgY29uc3Q7CiAKICAgICB2
b2lkIGFkZE5ld09iamVjdFN0b3JlKE1lbW9yeU9iamVjdFN0b3JlJik7CisgICAgdm9pZCByZWNv
cmRWYWx1ZUNoYW5nZWQoTWVtb3J5T2JqZWN0U3RvcmUmLCBjb25zdCBJREJLZXlEYXRhJik7CiAK
ICAgICB2b2lkIGFib3J0KCk7CiAgICAgdm9pZCBjb21taXQoKTsKQEAgLTY2LDEwICs3MiwxMyBA
QCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IG1fb3JpZ2lu
YWxEYXRhYmFzZUluZm87CiAKICAgICBib29sIG1faW5Qcm9ncmVzcyB7IHRydWUgfTsKKyAgICBi
b29sIG1faXNBYm9ydGluZyB7IGZhbHNlIH07CiAKICAgICBIYXNoU2V0PE1lbW9yeU9iamVjdFN0
b3JlKj4gbV9vYmplY3RTdG9yZXM7CiAgICAgSGFzaFNldDxNZW1vcnlPYmplY3RTdG9yZSo+IG1f
dmVyc2lvbkNoYW5nZUFkZGVkT2JqZWN0U3RvcmVzOwogCisgICAgSGFzaE1hcDxNZW1vcnlPYmpl
Y3RTdG9yZSosIHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4+IG1fb3JpZ2luYWxWYWx1ZXM7
CisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2lu
Z1N0b3JlLmNwcAppbmRleCA4NTcyYmQzLi5mZTJmYTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFj
a2luZ1N0b3JlLmNwcApAQCAtMTM2LDYgKzEzNiw2OSBAQCB2b2lkIE1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6cmVtb3ZlT2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0
UwogICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZS5pbmZvKCkuaWRlbnRpZmll
cigpKTsKIH0KIAorCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBrZXlFeGlz
dHMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhp
c3RzSW5PYmplY3RTdG9yZSIpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CisKKyAgICBNZW1vcnlPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5n
ZXQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChvYmplY3RTdG9y
ZSk7CisKKyAgICBrZXlFeGlzdHMgPSBvYmplY3RTdG9yZS0+Y29udGFpbnNSZWNvcmQoa2V5RGF0
YSk7CisgICAgcmV0dXJuIElEQkVycm9yKCk7Cit9CisKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlUmVjb3JkIik7CisKKyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKKworICAgIE1lbW9yeU9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3Rv
cmVzLmdldChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKG9iamVj
dFN0b3JlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFu
c2FjdGlvbklkZW50aWZpZXIpKTsKKworICAgIG9iamVjdFN0b3JlLT5kZWxldGVSZWNvcmQoa2V5
RGF0YSk7CisgICAgcmV0dXJuIElEQkVycm9yKCk7Cit9CisKK0lEQkVycm9yIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6cHV0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQiKTsK
KworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworCisgICAgYXV0byB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIGlm
ICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2Rl
OjpVbmtub3duLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiTm8gYmFja2luZyBzdG9yZSB0cmFuc2FjdGlv
biBmb3VuZCB0byBnZXQgcmVjb3JkIikpOworCisgICAgTWVtb3J5T2JqZWN0U3RvcmUqIG9iamVj
dFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAg
aWYgKCFvYmplY3RTdG9yZSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlvbkNv
ZGU6OlVua25vd24sIFdURjo6QVNDSUlMaXRlcmFsKCJObyBiYWNraW5nIHN0b3JlIG9iamVjdCBz
dG9yZSBmb3VuZCB0byBwdXQgcmVjb3JkIikpOworCisgICAgb2JqZWN0U3RvcmUtPnB1dFJlY29y
ZCgqdHJhbnNhY3Rpb24sIGtleURhdGEsIHZhbHVlKTsKKyAgICByZXR1cm4gSURCRXJyb3IoKTsK
K30KKworSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgVGhyZWFkU2FmZURh
dGFCdWZmZXImIG91dFZhbHVlKQoreworICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNr
aW5nU3RvcmU6OmdldFJlY29yZCIpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmll
cik7CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikpCisgICAgICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpVbmtub3du
LCBXVEY6OkFTQ0lJTGl0ZXJhbCgiTm8gYmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBmb3VuZCB0
byBnZXQgcmVjb3JkIikpOworCisgICAgTWVtb3J5T2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlID0g
bV9vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgaWYgKCFvYmpl
Y3RTdG9yZSkKKyAgICAgICAgcmV0dXJuIElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OlVua25v
d24sIFdURjo6QVNDSUlMaXRlcmFsKCJObyBiYWNraW5nIHN0b3JlIG9iamVjdCBzdG9yZSBmb3Vu
ZCIpKTsKKworICAgIG91dFZhbHVlID0gb2JqZWN0U3RvcmUtPnZhbHVlRm9yS2V5KGtleURhdGEp
OworICAgIHJldHVybiBJREJFcnJvcigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCmlu
ZGV4IDI2OTU4ZmQuLjQzMTg3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKQEAg
LTUzLDYgKzUzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkVycm9yIGFib3J0VHJhbnNh
Y3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIp
IG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgY29tbWl0VHJhbnNhY3Rpb24o
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpIG92ZXJy
aWRlIGZpbmFsOwogICAgIHZpcnR1YWwgSURCRXJyb3IgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9i
amVjdFN0b3JlSW5mbyYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3Iga2V5
RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlEYXRhJiwgYm9vbCYga2V5RXhpc3RzKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElE
QkVycm9yIGRlbGV0ZVJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJL
ZXlEYXRhJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJFcnJvciBwdXRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVh
ZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJF
cnJvciBnZXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0
YSYsIFRocmVhZFNhZmVEYXRhQnVmZmVyJiBvdXRWYWx1ZSkgb3ZlcnJpZGUgZmluYWw7CiAKICAg
ICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNoYW5nZUFib3J0KE1lbW9yeU9iamVj
dFN0b3JlJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCmluZGV4IGRmYWM3ODAuLjE0NWM4
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IG5hbWVzcGFjZSBJREJTZXJ2ZXIgewpAQCAtNjQsNiArNjUsNjEgQEAgdm9pZCBNZW1vcnlPYmpl
Y3RTdG9yZTo6d3JpdGVUcmFuc2FjdGlvbkZpbmlzaGVkKE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uJgogICAgIG1fd3JpdGVUcmFuc2FjdGlvbiA9IG51bGxwdHI7CiB9CiAKK2Jvb2wgTWVt
b3J5T2JqZWN0U3RvcmU6OmNvbnRhaW5zUmVjb3JkKGNvbnN0IElEQktleURhdGEmIGtleSkKK3sK
KyAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIG1fa2V5VmFsdWVTdG9yZS0+Y29udGFpbnMoa2V5KTsKK30KKwordm9pZCBNZW1vcnlP
YmplY3RTdG9yZTo6ZGVsZXRlUmVjb3JkKGNvbnN0IElEQktleURhdGEmIGtleSkKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiTWVtb3J5T2JqZWN0U3RvcmU6OmRlbGV0ZVJlY29yZCIpOworCisgICAg
QVNTRVJUKG1fd3JpdGVUcmFuc2FjdGlvbik7CisgICAgbV93cml0ZVRyYW5zYWN0aW9uLT5yZWNv
cmRWYWx1ZUNoYW5nZWQoKnRoaXMsIGtleSk7CisKKyAgICBpZiAoIW1fa2V5VmFsdWVTdG9yZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9rZXlWYWx1ZVN0b3JlLT5yZW1vdmUoa2V5KTsKKyAg
ICBpZiAobV9vcmRlcmVkS2V5cykKKyAgICAgICAgbV9vcmRlcmVkS2V5cy0+ZXJhc2Uoa2V5KTsK
K30KKwordm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6cHV0UmVjb3JkKE1lbW9yeUJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlKQoreworICAgIExPRyhJbmRleGVkREIsICJN
ZW1vcnlPYmplY3RTdG9yZTo6cHV0UmVjb3JkIik7CisKKyAgICBBU1NFUlQobV93cml0ZVRyYW5z
YWN0aW9uKTsKKyAgICBBU1NFUlRfVU5VU0VEKHRyYW5zYWN0aW9uLCBtX3dyaXRlVHJhbnNhY3Rp
b24gPT0gJnRyYW5zYWN0aW9uKTsKKworICAgIG1fd3JpdGVUcmFuc2FjdGlvbi0+cmVjb3JkVmFs
dWVDaGFuZ2VkKCp0aGlzLCBrZXlEYXRhKTsKKworICAgIHNldEtleVZhbHVlKGtleURhdGEsIHZh
bHVlKTsKK30KKwordm9pZCBNZW1vcnlPYmplY3RTdG9yZTo6c2V0S2V5VmFsdWUoY29uc3QgSURC
S2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlKQorewor
ICAgIGlmICghbV9rZXlWYWx1ZVN0b3JlKQorICAgICAgICBtX2tleVZhbHVlU3RvcmUgPSBzdGQ6
Om1ha2VfdW5pcXVlPEtleVZhbHVlTWFwPigpOworCisgICAgYXV0byByZXN1bHQgPSBtX2tleVZh
bHVlU3RvcmUtPnNldChrZXlEYXRhLCB2YWx1ZSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
ICYmIG1fb3JkZXJlZEtleXMpCisgICAgICAgIG1fb3JkZXJlZEtleXMtPmluc2VydChrZXlEYXRh
KTsKK30KKworVGhyZWFkU2FmZURhdGFCdWZmZXIgTWVtb3J5T2JqZWN0U3RvcmU6OnZhbHVlRm9y
S2V5KGNvbnN0IElEQktleURhdGEmIGtleURhdGEpIGNvbnN0Cit7CisgICAgTE9HKEluZGV4ZWRE
QiwgIk1lbW9yeU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleSIpOworCisgICAgaWYgKCFtX2tleVZh
bHVlU3RvcmUpCisgICAgICAgIHJldHVybiBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpOworCisgICAg
cmV0dXJuIG1fa2V5VmFsdWVTdG9yZS0+Z2V0KGtleURhdGEpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUu
aAppbmRleCAzMWUyZTRkLi5jMjQ2YWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaApAQCAtMjgs
MTMgKzI4LDIyIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUg
IklEQktleURhdGEuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUluZm8uaCIKKyNpbmNsdWRl
ICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleURhdGE7CisK
IG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCiBjbGFzcyBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbjsKIAordHlwZWRlZiBIYXNoTWFwPElEQktleURhdGEsIFRocmVhZFNhZmVEYXRhQnVmZmVy
LCBJREJLZXlEYXRhSGFzaCwgSURCS2V5RGF0YUhhc2hUcmFpdHM+IEtleVZhbHVlTWFwOworCiBj
bGFzcyBNZW1vcnlPYmplY3RTdG9yZSB7CiAgICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxNZW1v
cnlPYmplY3RTdG9yZT4gc3RkOjptYWtlX3VuaXF1ZTxNZW1vcnlPYmplY3RTdG9yZT4oY29uc3Qg
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvJik7CiBwdWJsaWM6CkBAIC00NSw2ICs1NCwxNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCB3cml0ZVRyYW5zYWN0aW9uU3RhcnRlZChNZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgd3JpdGVUcmFuc2FjdGlvbkZpbmlzaGVkKE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJik7CiAKKyAgICBib29sIGNvbnRhaW5zUmVjb3Jk
KGNvbnN0IElEQktleURhdGEmKTsKKyAgICB2b2lkIGRlbGV0ZVJlY29yZChjb25zdCBJREJLZXlE
YXRhJik7CisgICAgdm9pZCBwdXRSZWNvcmQoTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24m
LCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlKTsK
KworICAgIHZvaWQgc2V0S2V5VmFsdWUoY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNh
ZmVEYXRhQnVmZmVyJiB2YWx1ZSk7CisKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciB2YWx1ZUZv
cktleShjb25zdCBJREJLZXlEYXRhJikgY29uc3Q7CisKICAgICBjb25zdCBJREJPYmplY3RTdG9y
ZUluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KIAogcHJpdmF0ZToKQEAgLTUz
LDYgKzcwLDkgQEAgcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZUluZm8gbV9pbmZvOwogCiAg
ICAgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24qIG1fd3JpdGVUcmFuc2FjdGlvbiB7IG51
bGxwdHIgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxLZXlWYWx1ZU1hcD4gbV9rZXlWYWx1ZVN0
b3JlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnNldDxJREJLZXlEYXRhPj4gbV9vcmRlcmVk
S2V5czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAKaW5kZXggNTYyMzZkMC4uNjhmZjVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CkBAIC0xMzksNiArMTM5LDIwIEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNh
bGxiYWNrKEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9
CiAKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKEtleURhdGFDYWxs
YmFjayBjYWxsYmFjaykKK3sKKyAgICB1aW50NjRfdCBpZGVudGlmaWVyID0gZ2VuZXJhdGVVbmlx
dWVDYWxsYmFja0lkZW50aWZpZXIoKTsKKyAgICBtX2tleURhdGFDYWxsYmFja3Muc2V0KGlkZW50
aWZpZXIsIGNhbGxiYWNrKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKwordWludDY0X3Qg
VW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2soVmFsdWVEYXRhQ2FsbGJhY2sgY2FsbGJh
Y2spCit7CisgICAgdWludDY0X3QgaWRlbnRpZmllciA9IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJ
ZGVudGlmaWVyKCk7CisgICAgbV92YWx1ZURhdGFDYWxsYmFja3Muc2V0KGlkZW50aWZpZXIsIGNh
bGxiYWNrKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oKQogewogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uIik7CkBAIC0yNTEsNiArMjY1LDEwOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAg
IHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRh
QnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92
ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OnB1dE9yQWRkIik7CisKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
ayhjYWxsYmFjayk7CisgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxs
YmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEu
b2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleURhdGEsIHZhbHVlRGF0YSwgb3ZlcndyaXRlTW9k
ZSkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRh
LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQorewor
ICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQiKTsKKworICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisKKyAgICBJREJL
ZXlEYXRhIHVzZWRLZXk7CisgICAgSURCRXJyb3IgZXJyb3I7CisKKyAgICBhdXRvIG9iamVjdFN0
b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKSB7CisgICAgICAg
IGVycm9yID0gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6SW52YWxpZFN0YXRlRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiT2JqZWN0IHN0b3JlIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBz
dG9yZSIpKTsKKyAgICAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiAh
a2V5RGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgZ2Vu
ZXJhdGVkIGtleSBzdXBwb3J0IGdvZXMKKyAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJREJFeGNl
cHRpb25Db2RlOjpVbmtub3duLCBBU0NJSUxpdGVyYWwoIktleSBnZW5lcmF0b3JzIG5vdCBzdXBw
b3J0ZWQgeWV0IikpOworICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Q
dXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdXNlZEtleSA9IGtleURhdGE7CisKKyAgICBpZiAob3Zlcndy
aXRlTW9kZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3Jp
dGUpIHsKKyAgICAgICAgYm9vbCBrZXlFeGlzdHM7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXksIGtleUV4aXN0cyk7CisgICAgICAgIGlmIChlcnJv
ci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCisgICAgICAgICAgICBlcnJvciA9IElEQkVycm9yKElE
QkV4Y2VwdGlvbkNvZGU6OkNvbnN0cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgYWxyZWFk
eSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZSIpKTsKKworICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Q
dXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMy40LjEgT2JqZWN0IFN0b3Jl
IFN0b3JhZ2UgT3BlcmF0aW9uCisgICAgLy8gLi4uSWYgYSByZWNvcmQgYWxyZWFkeSBleGlzdHMg
aW4gc3RvcmUgLi4uCisgICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3JlIHVz
aW5nIHRoZSBzdGVwcyBmb3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9yZS4u
LgorICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcgaXQg
ZnJvbSBmcm9tIHRoZSBvYmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFwcHJv
cHJpYXRlIGluZGV4ZXMuCisgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmVjb3Jk
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2VkS2V5KTsK
KyAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5wdXRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVzZWRLZXksIHZhbHVlRGF0YSk7CisKKyAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworfQor
Cit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEm
IHJlc3VsdEtleSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCIpOwor
CisgICAgcGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBy
ZXN1bHRLZXkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBW
YWx1ZURhdGFDYWxsYmFjayBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29y
ZCIpOworCisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2FsbGJhY2sp
OworICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSUQsIHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKSwga2V5RGF0YSkpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKK3sKKyAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUdldFJlY29yZCIpOworCisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
KyAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKworICAgIFRocmVhZFNhZmVEYXRh
QnVmZmVyIHZhbHVlRGF0YTsKKyAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5n
ZXRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtl
eURhdGEsIHZhbHVlRGF0YSk7CisKKyAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHZhbHVlRGF0YSkpOworfQor
Cit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciYgcmVzdWx0RGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1H
ZXRSZWNvcmQiKTsKKworICAgIHBlcmZvcm1WYWx1ZURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCByZXN1bHREYXRhKTsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Y29tbWl0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKQEAgLTM4MCw2ICs0OTYsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVy
cm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIGNhbGxi
YWNrKGVycm9yKTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFD
YWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJv
ciwgY29uc3QgSURCS2V5RGF0YSYgcmVzdWx0S2V5KQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBt
X2tleURhdGFDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOworICAgIEFTU0VSVChj
YWxsYmFjayk7CisgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdEtleSk7Cit9CisKK3ZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1WYWx1ZURhdGFDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgVGhyZWFkU2FmZURhdGFC
dWZmZXImIHJlc3VsdERhdGEpCit7CisgICAgYXV0byBjYWxsYmFjayA9IG1fdmFsdWVEYXRhQ2Fs
bGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoY2FsbGJhY2spOwor
ICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHREYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURC
U2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5k
ZXggNzkwZGIxZS4uMmIzOTBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJE
YXRhYmFzZUluZm8uaCIKICNpbmNsdWRlICJJREJTZXJ2ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRl
ICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAi
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5oIgpAQCAtNTIsNiArNTMsOCBAQCBjbGFzcyBJREJDb25uZWN0aW9uVG9D
bGllbnQ7CiBjbGFzcyBJREJTZXJ2ZXI7CiAKIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IElEQkVycm9yJik+IEVycm9yQ2FsbGJhY2s7Cit0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9p
ZChjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQktleURhdGEmKT4gS2V5RGF0YUNhbGxiYWNrOwor
dHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgSURCRXJyb3ImLCBjb25zdCBUaHJlYWRT
YWZlRGF0YUJ1ZmZlciYpPiBWYWx1ZURhdGFDYWxsYmFjazsKIAogY2xhc3MgVW5pcXVlSURCRGF0
YWJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VW5pcXVlSURCRGF0YWJhc2U+IHsK
IHB1YmxpYzoKQEAgLTY2LDYgKzY5LDggQEAgcHVibGljOgogICAgIElEQlNlcnZlciYgc2VydmVy
KCkgeyByZXR1cm4gbV9zZXJ2ZXI7IH0KIAogICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIEVy
cm9yQ2FsbGJhY2spOworICAgIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBj
b25zdCBJREJLZXlEYXRhJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwg
SW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayk7Cisg
ICAgdm9pZCBnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRh
JiwgVmFsdWVEYXRhQ2FsbGJhY2spOwogICAgIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgYWJvcnRU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJyb3JDYWxsYmFjayk7
CiAgICAgdm9pZCB0cmFuc2FjdGlvbkRlc3Ryb3llZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJik7CkBAIC04MSwyMiArODYsMzAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0YXJ0VmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKCk7CiAgICAgdm9pZCBub3RpZnlDb25uZWN0aW9uc09mVmVyc2lv
bkNoYW5nZSgpOwogCi0gICAgdWludDY0X3Qgc3RvcmVDYWxsYmFjayhFcnJvckNhbGxiYWNrKTsK
LSAgICAKICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9ucwogICAgIHZvaWQgb3BlbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKICAgICB2b2lkIHBlcmZv
cm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHBl
cmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQg
YmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYp
OwogICAgIHZvaWQgcGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQgcGVyZm9ybVB1dE9yQWRk
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEs
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlKTsKKyAgICB2b2lkIHBlcmZvcm1H
ZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJik7CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFj
a3MKICAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJik7
CiAgICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwor
ICAgIHZvaWQgZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJLZXlEYXRhJik7CisgICAgdm9pZCBkaWRQZXJmb3Jt
R2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBj
b25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNvbW1pdFRy
YW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsK
ICAgICB2b2lkIGRpZFBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllcik7CiAKKyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrKEVycm9y
Q2FsbGJhY2spOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2soS2V5RGF0YUNhbGxiYWNrKTsK
KyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrKFZhbHVlRGF0YUNhbGxiYWNrKTsKKwogICAgIHZv
aWQgcGVyZm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYpOworICAgIHZvaWQgcGVyZm9ybUtleURhdGFDYWxsYmFjayh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCS2V5RGF0YSYpOwor
ICAgIHZvaWQgcGVyZm9ybVZhbHVlRGF0YUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogCiAg
ICAgdm9pZCBpbnZva2VUcmFuc2FjdGlvblNjaGVkdWxlcigpOwogICAgIHZvaWQgdHJhbnNhY3Rp
b25TY2hlZHVsaW5nVGltZXJGaXJlZCgpOwpAQCAtMTE3LDYgKzEzMCw4IEBAIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9kYXRhYmFzZUluZm87CiAKICAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBFcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tzOworICAg
IEhhc2hNYXA8dWludDY0X3QsIEtleURhdGFDYWxsYmFjaz4gbV9rZXlEYXRhQ2FsbGJhY2tzOwor
ICAgIEhhc2hNYXA8dWludDY0X3QsIFZhbHVlRGF0YUNhbGxiYWNrPiBtX3ZhbHVlRGF0YUNhbGxi
YWNrczsKIAogICAgIFRpbWVyIG1fdHJhbnNhY3Rpb25TY2hlZHVsaW5nVGltZXI7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCmluZGV4IDg5YzJhNmMu
LmNiZjZhNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5j
cHAKQEAgLTgwLDYgKzgwLDExIEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
aXNWZXJzaW9uQ2hhbmdlKCkgY29uc3QKICAgICByZXR1cm4gbV90cmFuc2FjdGlvbkluZm8ubW9k
ZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlOwogfQogCiti
b29sIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmlzUmVhZE9ubHkoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RyYW5zYWN0aW9uSW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGU6OlJlYWRPbmx5OworfSAgIAorCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmNvbW1pdCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmNvbW1pdCIpOwpAQCAtMTA4LDYgKzExMyw0MSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZQogICAgIH0pOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURC
S2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwg
SW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cHV0T3JBZGQi
KTsKKworICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
KTsKKworICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBzZWxmKHRoaXMp
OworICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnB1dE9yQWRkKHJlcXVlc3RE
YXRhLCBrZXlEYXRhLCB2YWx1ZURhdGEsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCBzZWxmLCByZXF1
ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsK
KyAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1
dE9yQWRkIChjYWxsYmFjaykiKTsKKworICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisgICAg
ICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkUHV0
T3JBZGQoSURCUmVzdWx0RGF0YTo6cHV0T3JBZGRTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJ
ZGVudGlmaWVyKCksIGtleSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkUHV0T3JBZGQoSURCUmVzdWx0RGF0
YTo6ZXJyb3IocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSwgZXJyb3IpKTsKKyAgICB9
KTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQoY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRh
KQoreworICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpn
ZXRSZWNvcmQiKTsKKworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkg
PT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOworCisgICAgUmVmUHRyPFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHNlbGYodGhpcyk7CisgICAgbV9kYXRhYmFzZUNv
bm5lY3Rpb24tPmRhdGFiYXNlKCkuZ2V0UmVjb3JkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCBbdGhp
cywgc2VsZiwgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgVGhyZWFk
U2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkgeworICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsKKworICAg
ICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlv
bi0+Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkR2V0UmVjb3JkKElEQlJlc3VsdERhdGE6OmdldFJl
Y29yZFN1Y2Nlc3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSwgdmFsdWVEYXRhKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5jb25uZWN0
aW9uVG9DbGllbnQoKS5kaWRHZXRSZWNvcmQoSURCUmVzdWx0RGF0YTo6ZXJyb3IocmVxdWVzdERh
dGEucmVxdWVzdElkZW50aWZpZXIoKSwgZXJyb3IpKTsKKyAgICB9KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSURCU2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oCmluZGV4IDFmMzM4M2QuLmE4ZTY0M2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaApAQCAtMzYsOCArMzYsMTAg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCRGF0YWJhc2VJbmZvOworY2xhc3Mg
SURCS2V5RGF0YTsKIGNsYXNzIElEQk9iamVjdFN0b3JlSW5mbzsKIGNsYXNzIElEQlJlcXVlc3RE
YXRhOworY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIg
ewogCkBAIC01Miw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICBVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24mIGRhdGFiYXNlQ29ubmVjdGlvbigpIHsgcmV0dXJuIG1fZGF0YWJhc2VDb25uZWN0aW9u
LmdldCgpOyB9CiAgICAgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2FjdGlvbkluZm87IH0KICAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNv
bnN0OworICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0OwogCiAgICAgSURCRGF0YWJhc2VJbmZv
KiBvcmlnaW5hbERhdGFiYXNlSW5mbygpIGNvbnN0OwogCkBAIC01OSw2ICs2Miw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNvbW1pdCgpOwogCiAgICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZShjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQg
cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3Qg
VGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUpOworICAgIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwg
Y29uc3QgSURCS2V5RGF0YSYpOwogCiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiwgSURCVHJhbnNhY3Rpb25JbmZv
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCRGF0YWJhc2VJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCmluZGV4IDYzODgxN2UuLjVkZGIyYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUlu
Zm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJE
YXRhYmFzZUluZm8uY3BwCkBAIC03Nyw2ICs3NywxNSBAQCB2b2lkIElEQkRhdGFiYXNlSW5mbzo6
YWRkRXhpc3RpbmdPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiAg
ICAgbV9vYmplY3RTdG9yZU1hcC5zZXQoaW5mby5pZGVudGlmaWVyKCksIGluZm8pOwogfQogCitj
b25zdCBJREJPYmplY3RTdG9yZUluZm8qIElEQkRhdGFiYXNlSW5mbzo6aW5mb0ZvckV4aXN0aW5n
T2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBjb25zdAoreworICAg
IGF1dG8gaXRlcmF0b3IgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKwog
VmVjdG9yPFN0cmluZz4gSURCRGF0YWJhc2VJbmZvOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QK
IHsKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaAppbmRleCA0MGY1
Mzk0Li4wZGY5ZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oCkBAIC00OSw2ICs0OSw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAg
ICAgSURCT2JqZWN0U3RvcmVJbmZvIGNyZWF0ZU5ld09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7CiAgICAgdm9pZCBh
ZGRFeGlzdGluZ09iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUodWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBjb25zdDsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9i
amVjdFN0b3JlTmFtZXMoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKaW5kZXggMjI4OGNlOC4uNDUyYTQ3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVy
cm9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
RXJyb3IuY3BwCkBAIC01MSw2ICs1MSwyMiBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiBpZGJFcnJv
ck5hbWUoSURCRXhjZXB0aW9uQ29kZSBjb2RlKQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZFN0YXRlRXJyb3IiKTsKICAg
ICAgICAgcmV0dXJuIGVudHJ5OwogICAgIH0KKyAgICBjYXNlIElEQkV4Y2VwdGlvbkNvZGU6OkRh
dGFFcnJvcjogeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9
IEFTQ0lJTGl0ZXJhbCgiRGF0YUVycm9yIik7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9
CisgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IHsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVy
YWwoIlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvciIpOworICAgICAgICByZXR1cm4gZW50cnk7Cisg
ICAgfQorICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6UmVhZE9ubHlFcnJvcjogeworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgiUmVh
ZE9ubHlFcnJvciIpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICAgIGNhc2UgSURC
RXhjZXB0aW9uQ29kZTo6RGF0YUNsb25lRXJyb3I6IHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIkRhdGFDbG9uZUVycm9yIik7Cisg
ICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CiAgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpO
b25lOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTc3
LDYgKzkzLDIyIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIGlkYkVycm9yRGVzY3JpcHRpb24oSURC
RXhjZXB0aW9uQ29kZSBjb2RlKQogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgiT3BlcmF0aW9uIHdhcyBjYWxsZWQgb24gYW4gb2JqZWN0
IG9uIHdoaWNoIGl0IGlzIG5vdCBhbGxvd2VkIG9yIGF0IGEgdGltZSB3aGVuIGl0IGlzIG5vdCBh
bGxvd2VkLiIpOwogICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgfQorICAgIGNhc2UgSURCRXhj
ZXB0aW9uQ29kZTo6RGF0YUVycm9yOiB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxT
dHJpbmc+IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJEYXRhIHByb3ZpZGVkIHRvIGFuIG9wZXJhdGlv
biBkb2VzIG5vdCBtZWV0IHJlcXVpcmVtZW50cy4iKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5Owor
ICAgIH0KKyAgICBjYXNlIElEQkV4Y2VwdGlvbkNvZGU6OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJv
cjogeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJ
TGl0ZXJhbCgiUmVxdWVzdCB3YXMgcGxhY2VkIGFnYWluc3QgYSB0cmFuc2FjdGlvbiB3aGljaCBp
cyBjdXJyZW50bHkgbm90IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmluaXNoZWQuIik7CisgICAgICAg
IHJldHVybiBlbnRyeTsKKyAgICB9CisgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpSZWFkT25s
eUVycm9yOiB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGVudHJ5ID0g
QVNDSUlMaXRlcmFsKCJBIG11dGF0aW5nIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIGluIGEgXCJy
ZWFkb25seVwiIHRyYW5zYWN0aW9uLiIpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQor
ICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6RGF0YUNsb25lRXJyb3I6IHsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIkRhdGEgYmVp
bmcgc3RvcmVkIGNvdWxkIG5vdCBiZSBjbG9uZWQgYnkgdGhlIHN0cnVjdHVyZWQgY2xvbmluZyBh
bGdvcml0aG0uIik7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CiAgICAgY2FzZSBJREJF
eGNlcHRpb25Db2RlOjpOb25lOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJFcnJvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkVycm9yLmgKaW5kZXggYjkxOTYzNi4uMmU3NGY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKQEAgLTM2LDEwICszNiwx
NCBAQCBlbnVtIGNsYXNzIElEQkV4Y2VwdGlvbkNvZGUgewogICAgIE5vbmUgPSAwLAogICAgIFVu
a25vd24sCiAgICAgQ29uc3RyYWludEVycm9yLAorICAgIERhdGFFcnJvciwKKyAgICBUcmFuc2Fj
dGlvbkluYWN0aXZlRXJyb3IsCisgICAgUmVhZE9ubHlFcnJvciwKICAgICBWZXJzaW9uRXJyb3Is
CiAKICAgICAvLyBJbmRleGVkIERCIGV4aXN0aW5nIGV4Y2VwdGlvbiBjb2RlcyB3aXRoIElEQi1z
cGVjaWZpYyBlcnJvciBtZXNzYWdlczoKICAgICBJbnZhbGlkU3RhdGVFcnJvciwKKyAgICBEYXRh
Q2xvbmVFcnJvciwKIH07CiAKIGNsYXNzIElEQkVycm9yIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwCmlu
ZGV4IDkzMjUyY2IuLjVhM2Q5ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcApAQCAtMzQsMjAgKzM0
LDI1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIElEQlJlcXVlc3REYXRhOjpJREJSZXF1ZXN0
RGF0YShjb25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwg
Y29uc3QgSURCQ2xpZW50OjpJREJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQotICAgIDogbV9yZXF1
ZXN0SWRlbnRpZmllcihzdGQ6Om1ha2VfdW5pcXVlPElEQlJlc291cmNlSWRlbnRpZmllcj4oY29u
bmVjdGlvbiwgcmVxdWVzdCkpCisgICAgOiBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKGNv
bm5lY3Rpb24uaWRlbnRpZmllcigpKQorICAgICwgbV9yZXF1ZXN0SWRlbnRpZmllcihzdGQ6Om1h
a2VfdW5pcXVlPElEQlJlc291cmNlSWRlbnRpZmllcj4oY29ubmVjdGlvbiwgcmVxdWVzdCkpCiAg
ICAgLCBtX2RhdGFiYXNlSWRlbnRpZmllcihyZXF1ZXN0LmRhdGFiYXNlSWRlbnRpZmllcigpKQog
ICAgICwgbV9yZXF1ZXN0ZWRWZXJzaW9uKHJlcXVlc3QudmVyc2lvbigpKQogewogfQogCiBJREJS
ZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYgb3BlcmF0aW9uKQotICAgIDogbV9yZXF1ZXN0SWRlbnRpZmllcihzdGQ6Om1ha2VfdW5pcXVl
PElEQlJlc291cmNlSWRlbnRpZmllcj4ob3BlcmF0aW9uLmlkZW50aWZpZXIoKSkpCisgICAgOiBt
X3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKG9wZXJhdGlvbi50cmFuc2FjdGlvbigpLmRhdGFi
YXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmlkZW50aWZpZXIoKSkKKyAgICAsIG1fcmVxdWVzdElk
ZW50aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxJREJSZXNvdXJjZUlkZW50aWZpZXI+KG9wZXJhdGlv
bi5pZGVudGlmaWVyKCkpKQogICAgICwgbV90cmFuc2FjdGlvbklkZW50aWZpZXIoc3RkOjptYWtl
X3VuaXF1ZTxJREJSZXNvdXJjZUlkZW50aWZpZXI+KG9wZXJhdGlvbi50cmFuc2FjdGlvbklkZW50
aWZpZXIoKSkpCisgICAgLCBtX29iamVjdFN0b3JlSWRlbnRpZmllcihvcGVyYXRpb24ub2JqZWN0
U3RvcmVJZGVudGlmaWVyKCkpCiB7CiB9CiAKIElEQlJlcXVlc3REYXRhOjpJREJSZXF1ZXN0RGF0
YShjb25zdCBJREJSZXF1ZXN0RGF0YSYgb3RoZXIpCi0gICAgOiBtX2RhdGFiYXNlSWRlbnRpZmll
cihvdGhlci5tX2RhdGFiYXNlSWRlbnRpZmllcikKKyAgICA6IG1fc2VydmVyQ29ubmVjdGlvbklk
ZW50aWZpZXIob3RoZXIubV9zZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcikKKyAgICAsIG1fb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKG90aGVyLm1fb2JqZWN0U3RvcmVJZGVudGlmaWVyKQorICAgICwg
bV9kYXRhYmFzZUlkZW50aWZpZXIob3RoZXIubV9kYXRhYmFzZUlkZW50aWZpZXIpCiAgICAgLCBt
X3JlcXVlc3RlZFZlcnNpb24ob3RoZXIubV9yZXF1ZXN0ZWRWZXJzaW9uKQogewogICAgIGlmIChv
dGhlci5tX3JlcXVlc3RJZGVudGlmaWVyKQpAQCAtNTYsNiArNjEsMTIgQEAgSURCUmVxdWVzdERh
dGE6OklEQlJlcXVlc3REYXRhKGNvbnN0IElEQlJlcXVlc3REYXRhJiBvdGhlcikKICAgICAgICAg
bV90cmFuc2FjdGlvbklkZW50aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQlJlc291cmNlSWRl
bnRpZmllcj4oKm90aGVyLm1fdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIH0KIAordWludDY0X3Qg
SURCUmVxdWVzdERhdGE6OnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9zZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1fc2Vy
dmVyQ29ubmVjdGlvbklkZW50aWZpZXI7Cit9CisKIElEQlJlc291cmNlSWRlbnRpZmllciBJREJS
ZXF1ZXN0RGF0YTo6cmVxdWVzdElkZW50aWZpZXIoKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fcmVxdWVzdElkZW50aWZpZXIpOwpAQCAtNjgsNiArNzksMTIgQEAgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyIElEQlJlcXVlc3REYXRhOjp0cmFuc2FjdGlvbklkZW50aWZpZXIoKSBjb25zdAog
ICAgIHJldHVybiAqbV90cmFuc2FjdGlvbklkZW50aWZpZXI7CiB9CiAKK3VpbnQ2NF90IElEQlJl
cXVlc3REYXRhOjpvYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9y
ZUlkZW50aWZpZXI7Cit9CisKIHVpbnQ2NF90IElEQlJlcXVlc3REYXRhOjpyZXF1ZXN0ZWRWZXJz
aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZXF1ZXN0ZWRWZXJzaW9uOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERh
dGEuaAppbmRleCA0MTZmZDVkLi5iOGI0YTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaApAQCAtNDYsOCAr
NDYsMTAgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IElEQlJlcXVlc3REYXRhKElEQkNsaWVudDo6
VHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKICAgICBJREJSZXF1ZXN0RGF0YShjb25zdCBJREJSZXF1
ZXN0RGF0YSYpOwogCisgICAgdWludDY0X3Qgc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIoKSBj
b25zdDsKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgcmVxdWVzdElkZW50aWZpZXIoKSBjb25z
dDsKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgdHJhbnNhY3Rpb25JZGVudGlmaWVyKCkgY29u
c3Q7CisgICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAgICBj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGRhdGFiYXNlSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2VJZGVudGlmaWVyOyB9CiAgICAgdWludDY0X3QgcmVxdWVzdGVkVmVy
c2lvbigpIGNvbnN0OwpAQCAtNTUsOCArNTcsMTAgQEAgcHVibGljOgogICAgIElEQlJlcXVlc3RE
YXRhIGlzb2xhdGVkQ29weSgpOwogCiBwcml2YXRlOgorICAgIHVpbnQ2NF90IG1fc2VydmVyQ29u
bmVjdGlvbklkZW50aWZpZXIgeyAwIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlJlc291cmNl
SWRlbnRpZmllcj4gbV9yZXF1ZXN0SWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURC
UmVzb3VyY2VJZGVudGlmaWVyPiBtX3RyYW5zYWN0aW9uSWRlbnRpZmllcjsKKyAgICB1aW50NjRf
dCBtX29iamVjdFN0b3JlSWRlbnRpZmllciB7IDAgfTsKIAogICAgIElEQkRhdGFiYXNlSWRlbnRp
ZmllciBtX2RhdGFiYXNlSWRlbnRpZmllcjsKICAgICB1aW50NjRfdCBtX3JlcXVlc3RlZFZlcnNp
b24geyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCUmVzdWx0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAKaW5kZXggNjUwNzFkOC4uOGRjYjc0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJS
ZXN1bHREYXRhLmNwcApAQCAtNTAsMTEgKzUwLDE0IEBAIElEQlJlc3VsdERhdGE6OklEQlJlc3Vs
dERhdGEoY29uc3QgSURCUmVzdWx0RGF0YSYgb3RoZXIpCiAgICAgLCBtX3JlcXVlc3RJZGVudGlm
aWVyKG90aGVyLm1fcmVxdWVzdElkZW50aWZpZXIpCiAgICAgLCBtX2Vycm9yKG90aGVyLm1fZXJy
b3IpCiAgICAgLCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIob3RoZXIubV9kYXRhYmFz
ZUNvbm5lY3Rpb25JZGVudGlmaWVyKQorICAgICwgbV9yZXN1bHREYXRhKG90aGVyLm1fcmVzdWx0
RGF0YSkKIHsKICAgICBpZiAob3RoZXIubV9kYXRhYmFzZUluZm8pCiAgICAgICAgIG1fZGF0YWJh
c2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KCpvdGhlci5tX2RhdGFi
YXNlSW5mbyk7CiAgICAgaWYgKG90aGVyLm1fdHJhbnNhY3Rpb25JbmZvKQogICAgICAgICBtX3Ry
YW5zYWN0aW9uSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCVHJhbnNhY3Rpb25JbmZvPigqb3Ro
ZXIubV90cmFuc2FjdGlvbkluZm8pOworICAgIGlmIChvdGhlci5tX3Jlc3VsdEtleSkKKyAgICAg
ICAgbV9yZXN1bHRLZXkgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQktleURhdGE+KCpvdGhlci5tX3Jl
c3VsdEtleSk7CiB9CiAKIElEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6ZXJyb3IoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
IGVycm9yKQpAQCAtOTAsNiArOTMsMjAgQEAgSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpj
cmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWUKICAgICBy
ZXR1cm4geyBJREJSZXN1bHRUeXBlOjpDcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MsIHJlcXVlc3RJ
ZGVudGlmaWVyIH07CiB9CiAKK0lEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6cHV0T3JBZGRT
dWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIGNv
bnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKK3sKKyAgICBJREJSZXN1bHREYXRhIHJlc3VsdChJ
REJSZXN1bHRUeXBlOjpQdXRPckFkZFN1Y2Nlc3MsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBy
ZXN1bHQubV9yZXN1bHRLZXkgPSBzdGQ6Om1ha2VfdW5pcXVlPElEQktleURhdGE+KHJlc3VsdEtl
eSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRh
OjpnZXRSZWNvcmRTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElk
ZW50aWZpZXIsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCit7CisgICAg
SURCUmVzdWx0RGF0YSByZXN1bHQoSURCUmVzdWx0VHlwZTo6R2V0UmVjb3JkU3VjY2VzcywgcmVx
dWVzdElkZW50aWZpZXIpOworICAgIHJlc3VsdC5tX3Jlc3VsdERhdGEgPSB2YWx1ZURhdGE7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogY29uc3QgSURCRGF0YWJhc2VJbmZvJiBJREJSZXN1bHRE
YXRhOjpkYXRhYmFzZUluZm8oKSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGF0YWJh
c2VJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXN1bHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCUmVzdWx0RGF0YS5oCmluZGV4IDJhZTcxZDMuLjhmMjkzYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERh
dGEuaApAQCAtMzAsMzEgKzMwLDM4IEBACiAKICNpbmNsdWRlICJJREJEYXRhYmFzZUluZm8uaCIK
ICNpbmNsdWRlICJJREJFcnJvci5oIgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKICNpbmNsdWRl
ICJJREJSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkluZm8u
aCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIElEQlJlc291cmNlSWRlbnRpZmllcjsKLQotbmFtZXNwYWNlIElEQlNlcnZl
ciB7Ci1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb247Ci1jbGFzcyBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOwotfQorY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKIGVu
dW0gY2xhc3MgSURCUmVzdWx0VHlwZSB7CiAgICAgRXJyb3IsCiAgICAgT3BlbkRhdGFiYXNlU3Vj
Y2VzcywKICAgICBPcGVuRGF0YWJhc2VVcGdyYWRlTmVlZGVkLAogICAgIENyZWF0ZU9iamVjdFN0
b3JlU3VjY2VzcywKKyAgICBQdXRPckFkZFN1Y2Nlc3MsCisgICAgR2V0UmVjb3JkU3VjY2VzcywK
IH07CiAKK25hbWVzcGFjZSBJREJTZXJ2ZXIgeworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uOworY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjsKK30KKwogY2xhc3Mg
SURCUmVzdWx0RGF0YSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIElEQlJlc3VsdERhdGEgZXJyb3Io
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgY29uc3QgSURCRXJyb3ImKTsKICAgICBzdGF0
aWMgSURCUmVzdWx0RGF0YSBvcGVuRGF0YWJhc2VTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYsIElEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJik7CiAgICAg
c3RhdGljIElEQlJlc3VsdERhdGEgb3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImLCBJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mKTsKICAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3Mo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CisgICAgc3RhdGljIElEQlJlc3VsdERhdGEg
cHV0T3JBZGRTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQktl
eURhdGEmKTsKKyAgICBzdGF0aWMgSURCUmVzdWx0RGF0YSBnZXRSZWNvcmRTdWNjZXNzKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1
ZURhdGEpOwogCiAgICAgSURCUmVzdWx0RGF0YShjb25zdCBJREJSZXN1bHREYXRhJik7CiAKQEAg
LTY3LDYgKzc0LDkgQEAgcHVibGljOgogICAgIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgZGF0YWJh
c2VJbmZvKCkgY29uc3Q7CiAgICAgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiB0cmFuc2FjdGlv
bkluZm8oKSBjb25zdDsKIAorICAgIGNvbnN0IElEQktleURhdGEqIHJlc3VsdEtleSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdWx0S2V5LmdldCgpOyB9CisgICAgY29uc3QgVGhyZWFkU2FmZURhdGFC
dWZmZXImIHJlc3VsdERhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdERhdGE7IH0KKwogcHJp
dmF0ZToKICAgICBJREJSZXN1bHREYXRhKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpOwog
ICAgIElEQlJlc3VsdERhdGEoSURCUmVzdWx0VHlwZSwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJik7CkBAIC03OCw2ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9kYXRhYmFz
ZUNvbm5lY3Rpb25JZGVudGlmaWVyIHsgMCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRh
YmFzZUluZm8+IG1fZGF0YWJhc2VJbmZvOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJUcmFuc2Fj
dGlvbkluZm8+IG1fdHJhbnNhY3Rpb25JbmZvOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJLZXlE
YXRhPiBtX3Jlc3VsdEtleTsKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBtX3Jlc3VsdERhdGE7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3Bw
CmluZGV4IGJhM2I2MGMuLjhiNjA2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9DbGllbnQuaCIKICNp
bmNsdWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKKyNpbmNsdWRlICJJREJLZXlEYXRhLmgi
CiAjaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdEltcGwuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0
RGF0YS5oIgogI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKQEAgLTEyNiw2ICsxMjcsMjIgQEAg
dm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZENyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c3VsdERhdGEmIHJlc3VsdERhdGEpCiAgICAgfSk7CiB9CiAKK3ZvaWQgSW5Qcm9jZXNzSURCU2Vy
dmVyOjpkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAg
IFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CisgICAgUnVuTG9vcDo6Y3Vy
cmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxmLCByZXN1bHREYXRhXSB7CisgICAgICAgIG1fY29u
bmVjdGlvblRvU2VydmVyLT5kaWRQdXRPckFkZChyZXN1bHREYXRhKTsKKyAgICB9KTsKK30KKwor
dm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZEdldFJlY29yZChjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXRhKQoreworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhp
cyk7CisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBzZWxmLCByZXN1bHRE
YXRhXSB7CisgICAgICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5kaWRHZXRSZWNvcmQocmVzdWx0
RGF0YSk7CisgICAgfSk7Cit9CisKIHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjphYm9ydFRyYW5z
YWN0aW9uKElEQlJlc291cmNlSWRlbnRpZmllciYgcmVzb3VyY2VJZGVudGlmaWVyKQogewogICAg
IFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CkBAIC0xNTAsNiArMTY3LDI3
IEBAIHZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVzdWx0RGF0YSwgY29uCiAgICAgfSk7CiB9CiAKK3ZvaWQgSW5Qcm9jZXNz
SURCU2VydmVyOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIElE
QktleSoga2V5LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQoreworICAgIFJlZlB0cjxJ
blByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CisgICAgSURCS2V5RGF0YSBrZXlEYXRhKGtl
eSk7CisgICAgYXV0byB2YWx1ZURhdGEgPSBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6Y29weVZlY3Rv
cih2YWx1ZS5kYXRhKCkpOworCisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlz
LCBzZWxmLCByZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWVEYXRhLCBvdmVyd3JpdGVNb2RlXSB7
CisgICAgICAgIG1fc2VydmVyLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWVE
YXRhLCBvdmVyd3JpdGVNb2RlKTsKKyAgICB9KTsKK30KKwordm9pZCBJblByb2Nlc3NJREJTZXJ2
ZXI6OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIElEQktleSog
a2V5KQoreworICAgIFJlZlB0cjxJblByb2Nlc3NJREJTZXJ2ZXI+IHNlbGYodGhpcyk7CisgICAg
SURCS2V5RGF0YSBrZXlEYXRhKGtleSk7CisKKyAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlzcGF0
Y2goW3RoaXMsIHNlbGYsIHJlcXVlc3REYXRhLCBrZXlEYXRhXSB7CisgICAgICAgIG1fc2VydmVy
LT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGtleURhdGEpOworICAgIH0pOworfQorCiB2b2lkIElu
UHJvY2Vzc0lEQlNlcnZlcjo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgdWludDY0X3QgcmVxdWVzdGVkVmVy
c2lvbikKIHsKICAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vz
c0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lu
UHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IDg3MzY1NTcuLmVmYzMxYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmgKQEAgLTU5LDYgKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBh
Ym9ydFRyYW5zYWN0aW9uKElEQlJlc291cmNlSWRlbnRpZmllciYpIG92ZXJyaWRlIGZpbmFsOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmFuc2FjdGlvbihJREJSZXNvdXJjZUlkZW50aWZpZXIm
KSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSBvdmVycmlkZSBm
aW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBJ
REJLZXkqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0
b3JlT3ZlcndyaXRlTW9kZSkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGdldFJl
Y29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIElEQktleSopIG92ZXJyaWRlIGZpbmFsOwogICAg
IHZpcnR1YWwgdm9pZCBkYXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQodWludDY0X3QgZGF0YWJhc2VD
b25uZWN0aW9uSWRlbnRpZmllcikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICAvLyBJREJDb25uZWN0
aW9uVG9DbGllbnQKQEAgLTY4LDYgKzcwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRBYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKSBvdmVycmlkZSBmaW5hbDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0
YSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBkaWRQdXRPckFkZChjb25zdCBJ
REJSZXN1bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGRpZEdldFJl
Y29yZChjb25zdCBJREJSZXN1bHREYXRhJikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2
b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoSURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24mLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKSBvdmVycmlkZSBmaW5hbDsKIAog
ICAgIHZpcnR1YWwgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNzSURC
U2VydmVyPjo6cmVmKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA5MDBiMTU0Li5jMTFjNTYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTgxLDYgKzIx
ODEsOCBAQAogCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDBDNTE1
MERBQTkwQjcwMDNCMzgzMSAvKiBKU1N0b3JhZ2VDdXN0b20uY3BwICovOyB9OwogCQk1MUQ3MjM2
QzFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQ3MjM2QTFCQjYwQkZFMDA0NzhDQTMgLyog
SURCUmVzdWx0RGF0YS5jcHAgKi87IH07CiAJCTUxRDcyMzZEMUJCNjE3NDkwMDQ3OENBMyAvKiBJ
REJSZXN1bHREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUQ3MjM2QjFCQjYwQkZFMDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oICovOyB9Owor
CQk1MUQ3RUZFQTFCREU4RjhDMDBFOTNFMTAgLyogVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUZBRUE5MUJEQzk4
OUEwMEI0QUZFNCAvKiBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxRDdFRkVDMUJERUZBNTEwMEU5M0UxMCAv
KiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUQ3RUZFQjFCREVGQTQ3MDBFOTNFMTAgLyogVHJhbnNhY3Rpb25P
cGVyYXRpb24uY3BwICovOyB9OwogCQk1MURDRTgwMjBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxS
ZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRENFODAxMENBQzlGMUMwMDQ4ODM1OCAvKiBKU1NRTFJlc3VsdFNl
dFJvd0xpc3RDdXN0b20uY3BwICovOyB9OwogCQk1MURGNkQ3RTBCOTJBMTZEMDBDMkRDODUgLyog
VGhyZWFkQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxREY2RDdEMEI5MkExNkQwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxREY2RDgwMEI5MkExOEUw
MEMyREM4NSAvKiBUaHJlYWRDaGVjay5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxREY2RDdGMEI5MkExOEUwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5t
bSAqLzsgfTsKQEAgLTkzNDUsNiArOTM0Nyw3IEBACiAJCTUxMUVGMkNDMTdGMEZERjEwMEU0RkEx
NiAvKiBKU0lEQkFueUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0lEQkFueUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MUVGMkNEMTdGMEZERjEwMEU0RkExNiAvKiBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCRGF0YWJhc2VDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFFRjJDRTE3RjBGREYxMDBFNEZBMTYgLyog
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTExRkFFQTkxQkRDOTg5QTAwQjRBRkU0IC8qIFRocmVhZFNhZmVEYXRhQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZFNhZmVEYXRhQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjNBRjE2MTg5MEE0Q0EwMDMxQ0RD
OSAvKiBJREJLZXlSYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSURCS2V5UmFuZ2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTEyM0FGMTcxODkwQTRDQTAwMzFDREM5IC8qIElEQktleVJhbmdlRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJREJLZXlSYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTEyM0FGMUMxODkxOEFFNDAwMzFDREM5IC8qIElEQkdldFJlc3VsdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJHZXRSZXN1bHQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1OTIsNiArOTU5NSw3IEBACiAJCTUxRDcxOUIzMTgx
MTA2RTAwMDE2REM1MSAvKiBXb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQ3MjM2QTFCQjYwQkZFMDA0NzhDQTMg
LyogSURCUmVzdWx0RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJSZXN1bHREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzIz
NkIxQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCUmVzdWx0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MUQ3RUZFQjFCREVGQTQ3MDBFOTNFMTAgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNhY3Rpb25PcGVyYXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MURDRTgwMTBDQUM5RjFDMDA0
ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxREY2RDdEMEI5MkExNkQwMEMyREM4NSAvKiBU
aHJlYWRDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRDaGVj
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MURGNkQ3RjBCOTJBMThFMDBDMkRD
ODUgLyogVGhyZWFkQ2hlY2subW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBUaHJlYWRDaGVjay5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2ODA1
LDYgKzE2ODA5LDcgQEAKIAkJCQk1MTk4RjdCMzFCQkUwMDFEMDBFMkNDNUYgLyogSURCVHJhbnNh
Y3Rpb25JbXBsLmggKi8sCiAJCQkJNTE5OEY3QjYxQkMzMTQxNzAwRTJDQzVGIC8qIElEQlZlcnNp
b25DaGFuZ2VFdmVudEltcGwuY3BwICovLAogCQkJCTUxOThGN0I3MUJDMzE0MTcwMEUyQ0M1RiAv
KiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmggKi8sCisJCQkJNTFEN0VGRUIxQkRFRkE0NzAw
RTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk1MTYwNzEyQjFCRDgz
MDUzMDBEQkM0RjIgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gY2xpZW50OwpAQCAtMjI1MjUsNiArMjI1MzAsNyBAQAogCQkJCTUxREY2RDdEMEI5MkExNkQw
MEMyREM4NSAvKiBUaHJlYWRDaGVjay5oICovLAogCQkJCUUxRkY1N0E1MEYwMTI1NkIwMDg5MUVC
QiAvKiBUaHJlYWRHbG9iYWxEYXRhLmNwcCAqLywKIAkJCQlFMUZGNTdBMjBGMDEyNTVCMDA4OTFF
QkIgLyogVGhyZWFkR2xvYmFsRGF0YS5oICovLAorCQkJCTUxMUZBRUE5MUJEQzk4OUEwMEI0QUZF
NCAvKiBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oICovLAogCQkJCTE4NUJDRjI2MEYzMjc5Q0UwMDBF
QTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwICovLAogCQkJCTE4NUJDRjI3MEYzMjc5Q0UwMDBFQTI2
MiAvKiBUaHJlYWRUaW1lcnMuaCAqLywKIAkJCQk5MzMwOUVBMTA5OUVCNzhDMDA1NkU1ODEgLyog
VGltZXIuY3BwICovLApAQCAtMjYzMTEsNiArMjYzMTcsNyBAQAogCQkJCUIyRkEzREFGMEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjI3QjI4MkEwQ0VGMEMwNzAwRDM5RDU0IC8qIEpTU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDQ5NkUzQTAxMzk4MTNBNTAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUQ3RUZFQTFCREU4RjhDMDBFOTNFMTAgLyog
VGhyZWFkU2FmZURhdGFCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NDJBNzk3MEFFNUM5
NDMwMERGNThERiAvKiBKU1NWR051bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjEw
QUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHTnVtYmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJGQTNEQjMwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGFpbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzExMTksNiArMzExMjYsNyBAQAogCQkJCTJENEY5NkY1MUExRUNDMjQwMDk4QkY4OCAvKiBU
ZXh0SW5kaWNhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJENEY5NkY4MUExRUNDMjQwMDk4
QkY4OCAvKiBUZXh0SW5kaWNhdG9yV2luZG93Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNE
RDkxMjUxRjEyRDAwM0VGMjY5IC8qIFRleHRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTFEN0VGRUMxQkRFRkE1MTAwRTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUNFQ0FERkNEMTUzNzc5MUQwMEUzNzA2OCAvKiBUZXh0SW5zZXJ0
aW9uQmFzZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUIwOTlFNjQ5MjAw
NTZFNTgxIC8qIFRleHRJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEQ5ODhCNjE3
QkZFQjIxMDA4NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
CmluZGV4IGE3Y2JkNzguLjNiZjRiMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCiAKICNpbmNsdWRl
IDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuaD4KQEAgLTc3LDEyICs3OCwxNCBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlJiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsCiAKIHN0
YXRpYyBKU1ZhbHVlIGlkYktleVRvSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIElEQktleSoga2V5KQogewotICAgIGlmICgha2V5KSB7Cisg
ICAgaWYgKCFrZXkgfHwgIWV4ZWMpIHsKICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgdW5kZWZp
bmVkLCBub3QgbnVsbC4KICAgICAgICAgLy8gU3BlYzogaHR0cDovL2R2Y3MudzMub3JnL2hnL0lu
ZGV4ZWREQi9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCNpZGwtZGVmLUlEQktleVJhbmdlCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAorICAgIExvY2tlcjxKU0xvY2s+
IGxvY2tlcihleGVjLT52bSgpLmFwaUxvY2soKSk7CisKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgp
KSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKICAgICAgICAgewpAQCAtMjc5LDEwICsyODIs
NDEgQEAgUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0
aChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IERlcHIKICAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBrZXlQYXRoLnN0cmlu
ZygpKTsKIH0KIAorUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIEFTU0VSVCgha2V5
UGF0aC5pc051bGwoKSk7CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpL
ZXlQYXRoVHlwZTo6QXJyYXkpIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiByZXN1
bHQ7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcnJheSA9IGtleVBhdGguYXJyYXko
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7IGkrKykgewor
ICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9t
U2NyaXB0VmFsdWVBbmRLZXlQYXRoKCZleGVjLCB2YWx1ZSwgYXJyYXlbaV0pOworICAgICAgICAg
ICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlQXJyYXkocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkg
PT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6U3RyaW5nKTsKKyAgICByZXR1cm4gaW50ZXJuYWxD
cmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKCZleGVjLCB2YWx1ZSwga2V5UGF0
aC5zdHJpbmcoKSk7Cit9CisKIGJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERP
TVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgTE9HKFN0
b3JhZ2VBUEksICJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAorICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7CisgICAgaWYgKCFleGVjKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY2FuSW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKCpleGVjLCBzY3JpcHRWYWx1ZSwga2V5UGF0aCk7Cit9CisKK2Jvb2wgY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCkKK3sKKyAgICBMT0coU3RvcmFnZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZSIpOworCiAgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5
UGF0aFR5cGU6OlN0cmluZyk7CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwog
ICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwpAQCAtMjkyLDggKzMyNiw3IEBAIGJvb2wg
Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0
YXRlLCBjb25zdCBEZXByZWNhCiAgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RT
dGF0ZS0+ZXhlYygpOwotICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aChleGVj
LCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCksIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRz
LnNpemUoKSAtIDEpOworICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCgmZXhl
Y1N0YXRlLCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCksIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVs
ZW1lbnRzLnNpemUoKSAtIDEpOwogfQogCiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlh
bGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUpCkBAIC0zMDgsNiArMzQxLDI4IEBAIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiBy
ZXF1ZXN0U3RhdGUsIFBhc3NSCiAgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4
ZWMtPnZtKCksIHJlc3VsdCk7CiB9CiAKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFs
aXplSURCVmFsdWVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRo
cmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCit7CisgICAgRE9NUmVxdWVzdFN0YXRlIHN0
YXRlKCZjb250ZXh0KTsKKyAgICBhdXRvKiBleGVjU3RhdGUgPSBzdGF0ZS5leGVjKCk7CisKKyAg
ICBpZiAoIXZhbHVlRGF0YS5kYXRhKCkpCisgICAgICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZShleGVjU3RhdGUtPnZtKCksIGpzVW5kZWZpbmVkKCkpOworCisgICAgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBkYXRhID0gKnZhbHVlRGF0YS5kYXRhKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQ7CisgICAgaWYgKGRhdGEuc2l6ZSgpKSB7CisgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmVCeXRlcyhkYXRhKTsKKworICAgICAgICBleGVjU3RhdGUtPnZtKCkuYXBpTG9jaygp
LmxvY2soKTsKKyAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShl
eGVjU3RhdGUsIGV4ZWNTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBOb25UaHJvd2lu
Zyk7CisgICAgICAgIGV4ZWNTdGF0ZS0+dm0oKS5hcGlMb2NrKCkudW5sb2NrKCk7CisgICAgfSBl
bHNlCisgICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOworCisgICAgcmV0dXJuIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlKGV4ZWNTdGF0ZS0+dm0oKSwgcmVzdWx0KTsKK30KKwogRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihET01SZXF1ZXN0U3RhdGUqIHJl
cXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHBycEJ1ZmZlciwgYm9vbCBrZXlJ
c0RlZmluZWQpCiB7CiAgICAgaWYgKHBycEJ1ZmZlcikgewpAQCAtMzUwLDYgKzQwNSwxMSBAQCBS
ZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KERPTVJlcXVlc3RTdGF0ZSogcmVxdWVz
dFN0YXRlLCBjb25zdCBEZXByZWNhdAogICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFsdWUo
ZXhlYywgc2NyaXB0VmFsdWUuanNWYWx1ZSgpKTsKIH0KIAorUmVmUHRyPElEQktleT4gc2NyaXB0
VmFsdWVUb0lEQktleShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBzY3JpcHRWYWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKCZl
eGVjLCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCkpOworfQorCiB2b2lkIGdlbmVyYXRlSW5kZXhLZXlz
Rm9yVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsIFZlY3Rv
cjxJREJLZXlEYXRhPiYgaW5kZXhLZXlzKQogewogICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5
ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCBvYmplY3RWYWx1
ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKQEAgLTM3NSw2ICs0MzUsMTMgQEAgdm9pZCBnZW5l
cmF0ZUluZGV4S2V5c0ZvclZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSURCSW5kZXhNZXRh
ZGF0YSYgaW5kZXhNZXQKICAgICB9CiB9CiAKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktl
eURhdGFUb1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEpCit7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0
YS5tYXliZUNyZWF0ZUlEQktleSgpOworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUo
Y29udGV4dCk7CisgICAgcmV0dXJuIGlkYktleVRvU2NyaXB0VmFsdWUoJnJlcXVlc3RTdGF0ZSwg
a2V5LmdldCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9J
REJCaW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggYmJkMTA2Ni4uNDJiN2IzOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMzgsNiAr
MzgsNyBAQCBjbGFzcyBET01SZXF1ZXN0U3RhdGU7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJL
ZXlQYXRoOwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7
CiAKIHN0cnVjdCBJREJJbmRleE1ldGFkYXRhOwogY2xhc3MgSURCS2V5RGF0YTsKQEAgLTQ1LDE1
ICs0NiwyMyBAQCBjbGFzcyBJREJLZXlEYXRhOwogSURCS2V5UGF0aCBpZGJLZXlQYXRoRnJvbVZh
bHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKIAogYm9vbCBpbmplY3RJREJLZXlJ
bnRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+LCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKKwogUmVmUHRyPElEQktl
eT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworUmVm
UHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJL
ZXlQYXRoJik7CisKIGJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERPTVJlcXVl
c3RTdGF0ZSosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0
aCYpOworYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKKwog
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShET01SZXF1ZXN0U3Rh
dGUqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpOwogRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihET01SZXF1ZXN0U3RhdGUqLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wga2V5SXNEZWZpbmVkKTsKIFdFQkNPUkVfRVhQT1JU
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBib29sIGtleUlzRGVmaW5lZCk7CiBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0
ZSosIFBhc3NSZWZQdHI8SURCS2V5Pik7CiBSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURC
S2V5KERPTVJlcXVlc3RTdGF0ZSosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7CitS
ZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2VuZXJhdGVJ
bmRleEtleXNGb3JWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsIFZlY3RvcjxJREJL
ZXlEYXRhPiYgaW5kZXhLZXlzKTsKIAorRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaWRiS2V5RGF0
YVRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IElEQktleURhdGEm
KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmluZGV4IGY4ZTNmY2IuLjFkOGNm
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5j
bHVkZSAiVGhyZWFkU2FmZURhdGFCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC04Niw2ICs4NywxMSBAQCBD
cm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBTZXNzaW9uSUQ+OjpUeXBlIENyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZQogICAgIHJldHVybiBzZXNzaW9uSUQ7CiB9CiAKK0Nyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFRocmVhZFNhZmVEYXRhQnVmZmVyPjo6VHlw
ZSBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZl
cj46OmNvcHkoY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICByZXR1
cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIoYnVmZmVyKTsKK30KKwogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCiBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBDcm9zc1RocmVhZENvcGll
ckJhc2U8ZmFsc2UsIGZhbHNlLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZT46OmNvcHkoY29u
c3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUmIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAppbmRleCBhYmY5MDZiLi4xNjA1ODg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTQ2LDYgKzQ2LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBj
bGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogICAgIGNsYXNzIFNlc3Npb25JRDsKKyAgICBjbGFzcyBU
aHJlYWRTYWZlRGF0YUJ1ZmZlcjsKICAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3Bv
bnNlRGF0YTsKICAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhOwogICAg
IHN0cnVjdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9uczsKQEAgLTEzOSw2ICsxNDAsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFNlc3Npb25J
RCYpOwogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJh
c2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4geworICAgICAgICB0eXBlZGVm
IFRocmVhZFNhZmVEYXRhQnVmZmVyIFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImKTsKKyAgICB9OworCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAgICAgbmFtZXNwYWNlIEluZGV4ZWREQiB7CiAgICAgICAgIGVudW0gY2xhc3Mg
VHJhbnNhY3Rpb25Nb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhy
ZWFkU2FmZURhdGFCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVE
YXRhQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0Yzk1ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRh
QnVmZmVyLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkU2FmZURhdGFCdWZmZXJfaAorI2RlZmluZSBU
aHJlYWRTYWZlRGF0YUJ1ZmZlcl9oCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CisKK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVy
SW1wbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcklt
cGw+IHsKK2ZyaWVuZCBjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKK3ByaXZhdGU6CisgICAg
ZW51bSBBZG9wdFZlY3RvclRhZyB7IEFkb3B0VmVjdG9yIH07CisgICAgVGhyZWFkU2FmZURhdGFC
dWZmZXJJbXBsKFZlY3Rvcjx1aW50OF90PiYgZGF0YSwgQWRvcHRWZWN0b3JUYWcpCisgICAgewor
ICAgICAgICBtX2RhdGEuc3dhcChkYXRhKTsKKyAgICB9CisKKyAgICBUaHJlYWRTYWZlRGF0YUJ1
ZmZlckltcGwoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgICAgICA6IG1fZGF0YShk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRhOworfTsKKwor
Y2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXIgeworcHVibGljOgorICAgIHN0YXRpYyBUaHJlYWRT
YWZlRGF0YUJ1ZmZlciBhZG9wdFZlY3RvcihWZWN0b3I8dWludDhfdD4mIGRhdGEpCisgICAgewor
ICAgICAgICByZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIoZGF0YSwgVGhyZWFkU2FmZURhdGFC
dWZmZXJJbXBsOjpBZG9wdFZlY3Rvcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUaHJlYWRT
YWZlRGF0YUJ1ZmZlciBjb3B5VmVjdG9yKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBUaHJlYWRTYWZlRGF0YUJ1ZmZlcihkYXRhKTsKKyAgICB9CisK
KyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjb25z
dCBWZWN0b3I8dWludDhfdD4qIGRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
aW1wbCA/ICZtX2ltcGwtPm1fZGF0YSA6IG51bGxwdHI7CisgICAgfQorCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IFRocmVhZFNhZmVEYXRhQnVmZmVyKFZlY3Rvcjx1aW50OF90PiYgZGF0YSwgVGhy
ZWFkU2FmZURhdGFCdWZmZXJJbXBsOjpBZG9wdFZlY3RvclRhZyB0YWcpCisgICAgeworICAgICAg
ICBtX2ltcGwgPSBhZG9wdFJlZihuZXcgVGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsKGRhdGEsIHRh
ZykpOworICAgIH0KKworICAgIGV4cGxpY2l0IFRocmVhZFNhZmVEYXRhQnVmZmVyKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkKKyAgICB7CisgICAgICAgIG1faW1wbCA9IGFkb3B0UmVmKG5l
dyBUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwoZGF0YSkpOworICAgIH0KKworICAgIFJlZlB0cjxU
aHJlYWRTYWZlRGF0YUJ1ZmZlckltcGw+IG1faW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFRocmVhZFNhZmVEYXRhQnVmZmVyX2gK
</data>
<flag name="review"
          id="289282"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264155</attachid>
            <date>2015-10-27 13:38:11 -0700</date>
            <delta_ts>2015-10-27 13:38:53 -0700</delta_ts>
            <desc>Patch v4 - Handled review feedback</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>131365</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2MDQ5Y2YzLi5lZWFmZTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAt
MjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJ
REI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rl
c3RFeHBlY3RhdGlvbnM6IFJlLWVuYWJsZSBhIHRlc3QgdGhhdCBjYW4gbm93IGJlIG1hZGUgcmVs
aWFibGUuCisgICAgICAgIAorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9iYXNp
Yy1wdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vYmFzaWMtcHV0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWw6Cisg
ICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1i
YXNpYy5odG1sOiBBZGRlZC4KKwogMjAxNS0xMC0yNyAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIg
IDxjYWx2YXJpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gQWRkIGNsb3Nl
IG1ldGhvZCB0byB3cml0YWJsZSBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azEvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1YWI3NTlkLi4zOGVlYjg3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC03Myw5ICs3Myw2IEBA
IGluc3BlY3Rvci9pbmRleGVkZGIKICMgQnV0IE1vZGVybiBJbmRleGVkREIgaXMuCiBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4gWyBQYXNzIF0KIAotIyBGbGFrZXksIHNraXBwZWQgdW50aWwgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ2OCBsZXRzIHVzIGltcGxl
bWVudCBhIHByb3BlciBmaXgKLXN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3Rz
dG9yZS1iYXNpYy5odG1sCi0KICMgRmFpbHMgd2l0aCBXZWJLaXQxIG9ubHkuCiBlZGl0aW5nL3Nl
Y3VyZS1pbnB1dC9yZXNldC1zdGF0ZS1vbi1uYXZpZ2F0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFz
aWMtcHV0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZTRhMzNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL2Jhc2ljLXB1dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitBTEVSVDogVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBbb2Jq
ZWN0IElEQlRyYW5zYWN0aW9uXSAtIHZlcnNpb25jaGFuZ2UKK0FMRVJUOiBbb2JqZWN0IElEQkRh
dGFiYXNlXQorQUxFUlQ6IHB1dCBzdWNjZWVkZWQgLSBrZXkgd2FzICdmb28nCitBTEVSVDogZ2V0
IHN1Y2NlZWRlZCAtIHZhbHVlIHdhcyAnYmFyJworQUxFUlQ6IHZlcnNpb24gY2hhbmdlIHRyYW5z
YWN0aW9uIGNvbXBsZXRlZAorQUxFUlQ6IERvbmUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLXB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJjNTcwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFzaWMtcHV0Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAor
PHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9CisKK3ZhciByZXF1
ZXN0ID0gd2luZG93LmluZGV4ZWREQi5vcGVuKCJOZXdEYXRhYmFzZVB1dFRlc3REYXRhYmFzZSIp
OworCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBhbGVydCgiRG9uZSIpOworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3Jl
cXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBhbGVydCgiVXBn
cmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2
ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOworICAgIAorICAgIHZhciB0eCA9IHJlcXVl
c3QudHJhbnNhY3Rpb247CisgICAgdmFyIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKworICAg
IGFsZXJ0KHR4ICsgIiAtICIgKyB0eC5tb2RlKTsKKyAgICBhbGVydChkYik7CisKKyAgICB2YXIg
b3MgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgiVGVzdE9iamVjdFN0b3JlIik7CisgICAgdmFyIHB1
dFJlcXVlc3QgPSBvcy5wdXQoImJhciIsICJmb28iKTsKKyAgICAKKyAgICBwdXRSZXF1ZXN0Lm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgc3VjY2VlZGVk
IC0ga2V5IHdhcyAnIiArIHB1dFJlcXVlc3QucmVzdWx0ICsgIiciKTsKKyAgICAgICAgCisgICAg
ICAgIHZhciBnZXRSZXF1ZXN0ID0gb3MuZ2V0KCJmb28iKTsKKyAgICAgICAgZ2V0UmVxdWVzdC5v
bnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgYWxlcnQoImdldCBzdWNj
ZWVkZWQgLSB2YWx1ZSB3YXMgJyIgKyBnZXRSZXF1ZXN0LnJlc3VsdCArICInIik7CisgICAgICAg
IH0KKworICAgICAgICBnZXRSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICAgICAgYWxlcnQoImdldCB1bmV4cGVjdGVkbHkgZmFpbGVkIC0gIiArIGV2ZW50KTsKKyAg
ICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1dFJlcXVlc3Qub25l
cnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJwdXQgdW5leHBlY3RlZGx5
IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisgICAgCisgICAg
dHgub25hYm9ydCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJ2ZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0Iik7CisgICAgICAgIGRvbmUoKTsKKyAg
ICB9CisKKyAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxl
cnQoInZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGNvbXBsZXRlZCIpOworICAgICAgICBkb25l
KCk7CisgICAgfQorCisgICAgdHgub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAg
IGFsZXJ0KCJ2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiB1bmV4cGVjdGVkIGVycm9yIC0gIiAr
IGV2ZW50KTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3Rv
cmUtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLWV4cGVjdGVkLnR4dAppbmRleCAxOGVkZDhhLi4z
OWNmZDA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Y3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1leHBlY3RlZC50
eHQKQEAgLTEsNiArMSw3IEBACiBBTEVSVDogSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZl
cnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQogQUxFUlQ6IE9iamVjdCBzdG9yZSBuYW1lczoKIEFM
RVJUOiBGaXJzdEFib3J0ZWRPYmplY3RTdG9yZQorQUxFUlQ6IFB1dCBzdWNjZWVkZWQKIEFMRVJU
OiBJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBhYm9ydGVkCiBBTEVS
VDogT2JqZWN0IHN0b3JlIG5hbWVzOgogQUxFUlQ6IFNlY29uZCB1cGdyYWRlIG5lZWRlZDogT2xk
IHZlcnNpb24gLSAwIE5ldyB2ZXJzaW9uIC0gMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2ljLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMu
aHRtbAppbmRleCAzOGRmNjkzLi4yMTA0Zjk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFz
aWMuaHRtbApAQCAtMzAsMTMgKzMwLDE4IEBAIGNyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVk
ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRl
UmVxdWVzdC50cmFuc2FjdGlvbjsKICAgICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVz
dWx0OwogICAgIHZhciBvYmplY3RTdG9yZSA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKCJG
aXJzdEFib3J0ZWRPYmplY3RTdG9yZSIpOworICAgIHZhciByZXF1ZXN0ID0gb2JqZWN0U3RvcmUu
cHV0KCJmb28iLCAiYmFyIik7CiAKLSAgICB2YXIgZiA9IGZ1bmN0aW9uKCkgeworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlB1dCBzdWNj
ZWVkZWQiKTsKICAgICAgICAgdmVyc2lvblRyYW5zYWN0aW9uLmFib3J0KCk7Ci0gICAgfTsKLQor
ICAgIH0KKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBh
bGVydCgiUHV0IGZhaWxlZCAtICIgKyBldmVudCk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cisg
ICAgCiAgICAgZHVtcE9iamVjdFN0b3JlcyhkYXRhYmFzZSk7ICAgIAotICAgIHNldFRpbWVvdXQo
ZiwgMCk7CiAgICAgCiAgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihl
dmVudCkgewogICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJh
bnNhY3Rpb24gYWJvcnRlZCIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmMxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1iYXNpYy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQUxFUlQ6IEluaXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9s
ZCB2ZXJzaW9uIC0gMCBOZXcgdmVyc2lvbiAtIDEKK0FMRVJUOiBvYmplY3QgcHV0IFNVQ0NFU1Mg
LSBmb28xCitBTEVSVDogYXJyYXkgcHV0IFNVQ0NFU1MgLSBmb28yCitBTEVSVDogU2Vjb25kIG9i
amVjdCBwdXQgU1VDQ0VTUyAtIGJhejEKK0FMRVJUOiBTZWNvbmQgYXJyYXkgcHV0IFNVQ0NFU1Mg
LSBiYXoyCitBTEVSVDogSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24g
Y29tcGxldGUKK0FMRVJUOiBEb25lCitUaGlzIHRlc3QgY3JlYXRlcyBzb21lIG9iamVjdCBzdG9y
ZXMgd2l0aCBrZXlwYXRocy4KK0l0IHRoZW4gcHV0cyBzb21lIHZhbHVlcyBpbiB0aGVtLgorSXQg
bWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2ljLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYWViMAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9rZXlwYXRoLWJhc2lj
Lmh0bWwKQEAgLTAsMCArMSw3NCBAQAorVGhpcyB0ZXN0IGNyZWF0ZXMgc29tZSBvYmplY3Qgc3Rv
cmVzIHdpdGgga2V5cGF0aHMuPGJyPgorSXQgdGhlbiBwdXRzIHNvbWUgdmFsdWVzIGluIHRoZW0u
PGJyPgorSXQgbWFrZXMgc3VyZSB0aGUga2V5cyB1c2VkIGFyZSBhcyBleHBlY3RlZC48YnI+Cis8
c2NyaXB0PgorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30KKworZnVuY3Rpb24g
ZG9uZSgpCit7CisgICAgYWxlcnQoIkRvbmUiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCit2YXIgY3JlYXRlUmVxdWVz
dCA9IHdpbmRvdy5pbmRleGVkREIub3BlbigiS2V5cGF0aEJhc2ljVGVzdERhdGFiYXNlIiwgMSk7
CisKK2NyZWF0ZVJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIG5lZWRlZDogT2xkIHZlcnNpb24gLSAiICsgZXZlbnQu
b2xkVmVyc2lvbiArICIgTmV3IHZlcnNpb24gLSAiICsgZXZlbnQubmV3VmVyc2lvbik7CisKKyAg
ICB2YXIgdmVyc2lvblRyYW5zYWN0aW9uID0gY3JlYXRlUmVxdWVzdC50cmFuc2FjdGlvbjsKKyAg
ICB2YXIgZGF0YWJhc2UgPSBldmVudC50YXJnZXQucmVzdWx0OyAgICAKKyAgICB2YXIgb2JqZWN0
U3RvcmUxID0gZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIk9TMSIsIHsga2V5UGF0aDogImZv
byIgfSk7CisgICAgdmFyIG9iamVjdFN0b3JlMiA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3Jl
KCJPUzIiLCB7IGtleVBhdGg6ICJmb28uYmFyIiB9KTsKKworICAgIHZhciBvYmplY3QgPSBuZXcg
T2JqZWN0OworICAgIG9iamVjdC5zdHVmZiA9ICJiYXIxIjsKKyAgICBvYmplY3QuZm9vID0gImZv
bzEiOworICAgICAgICAKKyAgICB2YXIgcmVxdWVzdDEgPSBvYmplY3RTdG9yZTEucHV0KG9iamVj
dCk7CisgICAgcmVxdWVzdDEub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAg
YWxlcnQoIm9iamVjdCBwdXQgU1VDQ0VTUyAtICIgKyByZXF1ZXN0MS5yZXN1bHQpOworICAgIH0K
KworICAgIHZhciBhcnJheSA9IHsgZm9vOiAiZm9vMiIsIHN0dWZmOiAiYmFyMiIgfTsKKworICAg
IHZhciByZXF1ZXN0MiA9IG9iamVjdFN0b3JlMS5wdXQoYXJyYXkpOworICAgIHJlcXVlc3QyLm9u
c3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGFsZXJ0KCJhcnJheSBwdXQgU1VD
Q0VTUyAtICIgKyByZXF1ZXN0Mi5yZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QuZm9v
ID0gbmV3IE9iamVjdDsKKyAgICBvYmplY3QuZm9vLmJhciA9ICJiYXoxIjsKKyAgICB2YXIgcmVx
dWVzdDMgPSBvYmplY3RTdG9yZTIucHV0KG9iamVjdCk7CisgICAgcmVxdWVzdDMub25zdWNjZXNz
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgYWxlcnQoIlNlY29uZCBvYmplY3QgcHV0IFNV
Q0NFU1MgLSAiICsgcmVxdWVzdDMucmVzdWx0KTsKKyAgICB9CisKKyAgICBhcnJheS5mb28gPSB7
IGJhcjogImJhejIiIH07CisKKyAgICB2YXIgcmVxdWVzdDQgPSBvYmplY3RTdG9yZTIucHV0KGFy
cmF5KTsKKyAgICByZXF1ZXN0NC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICBhbGVydCgiU2Vjb25kIGFycmF5IHB1dCBTVUNDRVNTIC0gIiArIHJlcXVlc3Q0LnJlc3VsdCk7
CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9uLm9uYWJvcnQgPSBmdW5jdGlvbihldmVu
dCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdyYWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNh
Y3Rpb24gdW5leHBlY3RlZCBhYm9ydGVkIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAg
ICB2ZXJzaW9uVHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICAgIGFsZXJ0KCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFuc2FjdGlvbiBjb21w
bGV0ZSIpOworICAgICAgICBkb25lKCk7CisgICAgfQorCisgICAgdmVyc2lvblRyYW5zYWN0aW9u
Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBhbGVydCgiSW5pdGlhbCB1cGdy
YWRlIHZlcnNpb25jaGFuZ2UgdHJhbnNhY3Rpb24gdW5leHBlY3RlZCBlcnJvciIgKyBldmVudCk7
CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGM4Mzg3ZC4uODFmZWE1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTg3Niw2ICs4NzYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAogICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCiAgICAgTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwCisgICAgTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcAogCiAgICAgTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuY3BwCiAgICAgTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGNmMGUwNzMuLmVmMjE2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMDQgQEAKKzIwMTUt
MTAtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVy
biBJREI6IFN1cHBvcnQgSURCT2JqZWN0U3RvcmUucHV0L2dldCBzdXBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9iYXNpYy1wdXQuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2tleXBhdGgtYmFzaWMuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlEYXRhOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Om9wZXJhdG9yPT0p
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGE6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpoYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGFIYXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRyYWl0czo6
Y29uc3RydWN0RGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGFIYXNo
VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFz
aFRyYWl0czo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaFRy
YWl0czo6aXNFbXB0eVZhbHVlKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0luZGV4
ZWREQi5oOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJBbnk6OklEQkFueSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6bW9kZXJuSURCT2JqZWN0U3RvcmUpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkFueTo6Y3JlYXRlKToKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
OjpkaWRDcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZFB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpnZXRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6
c2F2ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Ub1NlcnZlcjo6Y29tcGxldGVPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6YXV0b0luY3JlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZTo6Z2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkNsaWVudDo6SURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9iamVjdFN0b3JlOjppbmZvKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJlcXVl
c3QpOiBEZWxldGVkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJl
cXVlc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCUmVxdWVzdDo6SURCUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnNvdXJjZU9i
amVjdFN0b3JlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6
OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50
OjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJ
REJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJSZXF1ZXN0OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkNsaWVudDo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6Y29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmRpZEFi
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJhbnNhY3Rpb246OmNyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGll
bnQ6OklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uOjpk
aWRQdXRPckFkZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVHJh
bnNhY3Rpb246OmRlYWN0aXZhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJUcmFuc2FjdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6SURC
VHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpU
cmFuc2FjdGlvbkFjdGl2YXRvcjo6VHJhbnNhY3Rpb25BY3RpdmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbkFjdGl2YXRvcjo6flRyYW5zYWN0aW9uQWN0aXZh
dG9yKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9w
ZXJhdGlvbi5jcHA6IAorICAgICAgICAoV2ViQ29yZTo6SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbjo6VHJhbnNhY3Rpb25PcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbjo6b2JqZWN0U3RvcmVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb246OnRyYW5zYWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVy
YXRpb24pOgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
Q29ubmVjdGlvblRvQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
Q29ubmVjdGlvblRvQ2xpZW50OjpkaWRQdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkR2V0UmVjb3JkKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50Lmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRl
Lmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwdXRPckFkZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bjo6cmVjb3JkVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaDoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpjb250YWluc1Jl
Y29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpk
ZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlPYmplY3RT
dG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5T2Jq
ZWN0U3RvcmU6OnZhbHVlRm9yS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1WYWx1ZURh
dGFDYWxsYmFjayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OmdldFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VJbmZvOjppbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oOgorCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlkYkVycm9y
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppZGJFcnJvckRlc2NyaXB0aW9uKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaDoKKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdERhdGE6OnNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3REYXRhOjpvYmplY3RTdG9yZUlkZW50aWZpZXIpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVzdWx0RGF0YTo6SURCUmVzdWx0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXN1bHREYXRhOjpwdXRPckFkZFN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0
RGF0YTo6Z2V0UmVjb3JkU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlJlc3VsdERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6OnJl
c3VsdEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXN1bHREYXRhOjpyZXN1bHREYXRhKToK
KworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpkaWRQdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZEdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OnB1dE9yQWRkKToKKyAgICAgICAg
KFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlk
YktleVRvSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjptYXliZUNyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKworICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFk
Q29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyPjo6Y29w
eSk6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKworICAgICAgICAq
IHBsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkU2FmZURhdGFCdWZmZXI6OmFkb3B0VmVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpjb3B5VmVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZFNhZmVEYXRhQnVmZmVyOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGF0YSk6CisKIDIwMTUt
MTAtMjcgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbU3RyZWFtcyBBUEldIEFkZCBjbG9zZSBtZXRob2QgdG8gd3JpdGFibGUgc3RyZWFt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCmlu
ZGV4IDkyYzMwMWYuLjE0MmYyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleURhdGEuY3BwCkBAIC0zMTksNiArMzE5LDQ1IEBAIHZvaWQgSURCS2V5RGF0
YTo6c2V0TnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlKQogICAgIG1faXNOdWxsID0gZmFsc2U7CiB9
CiAKK0lEQktleURhdGEgSURCS2V5RGF0YTo6ZGVsZXRlZFZhbHVlKCkKK3sKKyAgICBJREJLZXlE
YXRhIHJlc3VsdDsKKyAgICByZXN1bHQubV9pc051bGwgPSBmYWxzZTsKKyAgICByZXN1bHQubV9p
c0RlbGV0ZWRWYWx1ZSA9IHRydWU7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOworfQor
Citib29sIElEQktleURhdGE6Om9wZXJhdG9yPChjb25zdCBJREJLZXlEYXRhJiByaHMpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbXBhcmUocmhzKSA8IDA7Cit9CisKK2Jvb2wgSURCS2V5RGF0YTo6
b3BlcmF0b3I9PShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV90
eXBlICE9IG90aGVyLm1fdHlwZSB8fCBtX2lzTnVsbCAhPSBvdGhlci5tX2lzTnVsbCB8fCBtX2lz
RGVsZXRlZFZhbHVlICE9IG90aGVyLm1faXNEZWxldGVkVmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoK
KyAgICBjYXNlIEtleVR5cGU6Ok1heDoKKyAgICBjYXNlIEtleVR5cGU6Ok1pbjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CisgICAgY2FzZSBLZXlUeXBl
OjpEYXRlOgorICAgICAgICByZXR1cm4gbV9udW1iZXJWYWx1ZSA9PSBvdGhlci5tX251bWJlclZh
bHVlOworICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICByZXR1cm4gbV9zdHJpbmdW
YWx1ZSA9PSBvdGhlci5tX3N0cmluZ1ZhbHVlOworICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Cisg
ICAgICAgIGlmIChtX2FycmF5VmFsdWUuc2l6ZSgpICE9IG90aGVyLm1fYXJyYXlWYWx1ZS5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcnJheVZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9hcnJh
eVZhbHVlWzBdICE9IG90aGVyLm1fYXJyYXlWYWx1ZVswXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCmluZGV4IDkxNTYzYjIuLmI2YWEwYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklE
QktleS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC04NywxNCArODgsODcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOdWxsOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlICE9IEtleVR5cGU6OkludmFsaWQ7IH0KICAgICBLZXlUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IElEQktleURhdGEmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCS2V5
RGF0YSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJREJLZXlEYXRh
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZD4gaGFzaENvZGVzOworICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3R5cGUpKTsKKyAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzTnVs
bCA/IDEgOiAwKTsKKyAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzRGVsZXRlZFZhbHVlID8g
MSA6IDApOworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIEtleVR5cGU6
OkludmFsaWQ6CisgICAgICAgIGNhc2UgS2V5VHlwZTo6TWF4OgorICAgICAgICBjYXNlIEtleVR5
cGU6Ok1pbjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6Ok51bWJl
cjoKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgorICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZtX251bWJlclZh
bHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6
CisgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2gobV9zdHJpbmdW
YWx1ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6
CisgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IG1fYXJyYXlWYWx1ZSkKKyAgICAgICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gV1RGOjpyb3VuZFVwVG9Q
b3dlck9mVHdvKGhhc2hDb2Rlcy5zaXplKCkpOworICAgICAgICBoYXNoQ29kZXMucmVzaXplKHRh
cmdldFNpemUpOworCisgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFz
aENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkpOworICAg
IH0KKworICAgIHN0YXRpYyBJREJLZXlEYXRhIGRlbGV0ZWRWYWx1ZSgpOworICAgIGJvb2wgaXNE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZhbHVlOyB9CisKIHByaXZh
dGU6CiAgICAgS2V5VHlwZSBtX3R5cGU7CiAgICAgVmVjdG9yPElEQktleURhdGE+IG1fYXJyYXlW
YWx1ZTsKICAgICBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKICAgICBkb3VibGUgbV9udW1iZXJWYWx1
ZSB7IDAgfTsKICAgICBib29sIG1faXNOdWxsIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNEZWxl
dGVkVmFsdWUgeyBmYWxzZSB9OworfTsKKworc3RydWN0IElEQktleURhdGFIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBhLmhhc2go
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElEQktleURhdGEmIGEsIGNvbnN0IElE
QktleURhdGEmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCitzdHJ1Y3QgSURCS2V5
RGF0YUhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0b21IYXNoVHJhaXRzPElEQktleURhdGE+
IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworCisgICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKElEQktleURhdGEmIGtleSkKKyAgICB7
CisgICAgICAgIGtleSA9IElEQktleURhdGE6OmRlbGV0ZWRWYWx1ZSgpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IElEQktleURhdGEmIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiBrZXkuaXNEZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSURCS2V5RGF0YSBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJREJLZXlE
YXRhKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IElEQktl
eURhdGEmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkuaXNOdWxsKCk7CisgICAgfQog
fTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSW5kZXhlZERCLmgKaW5kZXggNTU4YmJhNy4uOGZlZjUyMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0luZGV4ZWREQi5oCkBAIC00MSw3ICs0MSw4IEBA
IGNvbnN0IHVuc2lnbmVkIFRyYW5zYWN0aW9uTW9kZU1heGltdW0gPSAyOwogCiBlbnVtIGNsYXNz
IFRyYW5zYWN0aW9uU3RhdGUgewogICAgIFVuc3RhcnRlZCwKLSAgICBSdW5uaW5nLAorICAgIEFj
dGl2ZSwKKyAgICBJbmFjdGl2ZSwKICAgICBDb21taXR0aW5nLAogICAgIEFib3J0aW5nLAogICAg
IEZpbmlzaGVkLApAQCAtNzEsNyArNzIsMTIgQEAgZW51bSBjbGFzcyBLZXlQYXRoVHlwZSB7CiAg
ICAgU3RyaW5nLAogICAgIEFycmF5LAogfTsKLSAgICAKKworZW51bSBjbGFzcyBPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUgeworICAgIE92ZXJ3cml0ZSwKKyAgICBOb092ZXJ3cml0ZSwKK307CisK
IC8vIEluIG9yZGVyIG9mIHRoZSBsZWFzdCB0byB0aGUgaGlnaGVzdCBwcmVjZWRlbnQgaW4gdGVy
bXMgb2Ygc29ydCBvcmRlci4KIGVudW0gS2V5VHlwZSB7CiAgICAgTWF4ID0gLTEsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5j
cHAKaW5kZXggMmZkYWI3ZC4uN2U5YTEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcApAQCAtNDIsNiArNDIsMTgg
QEAgSURCQW55OjpJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKQogewogfQogCitJ
REJBbnk6OklEQkFueShSZWY8SURCT2JqZWN0U3RvcmU+JiYgb2JqZWN0U3RvcmUpCisgICAgOiBt
X3R5cGUoSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSkKKyAgICAsIG1fb2JqZWN0U3RvcmUo
YWRvcHRSZWYoJm9iamVjdFN0b3JlLmxlYWtSZWYoKSkpCit7Cit9CisKK0lEQkFueTo6SURCQW55
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKKyAgICA6IG1fdHlwZShJREJB
bnk6OlR5cGU6OlNjcmlwdFZhbHVlKQorICAgICwgbV9zY3JpcHRWYWx1ZSh2YWx1ZSkKK3sKK30K
KwogSURCQW55Ojp+SURCQW55KCkKIHsKIH0KQEAgLTgyLDYgKzk0LDEyIEBAIFJlZlB0cjxXZWJD
b3JlOjpJREJPYmplY3RTdG9yZT4gSURCQW55OjppZGJPYmplY3RTdG9yZSgpCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKK0lEQk9iamVjdFN0b3JlKiBJREJBbnk6Om1vZGVybklEQk9iamVjdFN0
b3JlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3Rv
cmUpOworICAgIHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOworfQorCiBSZWZQdHI8V2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQogewogICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQkFueUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJBbnlJbXBsLmgKaW5kZXggYzE0MjY1Ni4uMDljNDJiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJEYXRhYmFz
ZUltcGwuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUltcGwuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CkBAIC00MSw2ICs0MiwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KFdURjo6bW92ZShkYXRhYmFzZSkp
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlKFJlZjxJREJPYmpl
Y3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSURCQW55KFdURjo6bW92ZShvYmplY3RTdG9yZSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UmVmUHRyPElEQkFueT4gY3JlYXRlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7Cisg
ICAgfQorCiAgICAgdmlydHVhbCB+SURCQW55KCk7CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgp
IGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtNTcsMTEgKzY4LDE3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgb3ZlcnJpZGUg
ZmluYWw7CiAgICAgdmlydHVhbCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgb3ZlcnJpZGUg
ZmluYWw7CiAKKyAgICBJREJPYmplY3RTdG9yZSogbW9kZXJuSURCT2JqZWN0U3RvcmUoKTsKKwog
cHJpdmF0ZToKLSAgICBJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYmKTsKKyAgICBleHBsaWNpdCBJ
REJBbnkoUmVmPElEQkRhdGFiYXNlPiYmKTsKKyAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQk9i
amVjdFN0b3JlPiYmKTsKKyAgICBleHBsaWNpdCBJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmKTsKKwogCiAgICAgSURCQW55OjpUeXBlIG1fdHlwZSB7IElEQkFueTo6VHlwZTo6
VW5kZWZpbmVkIH07CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKIAogICAgIGNvbnN0IElEQktleVBh
dGggbV9pZGJLZXlQYXRoOwogICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fc2Ny
aXB0VmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDQ2MjA5ZDgu
LmU2MTAzMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC05OCw4ICs5
OCw3IEBAIHZvaWQgSURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGVPYmplY3RTdG9yZShUcmFu
c2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKIAotICAgIEFTU0VSVCgh
bV9hY3RpdmVPcGVyYXRpb25zLmNvbnRhaW5zKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsKLSAg
ICBtX2FjdGl2ZU9wZXJhdGlvbnMuc2V0KG9wZXJhdGlvbi5pZGVudGlmaWVyKCksICZvcGVyYXRp
b24pOworICAgIHNhdmVPcGVyYXRpb24ob3BlcmF0aW9uKTsKIAogICAgIG1fZGVsZWdhdGUtPmNy
ZWF0ZU9iamVjdFN0b3JlKElEQlJlcXVlc3REYXRhKG9wZXJhdGlvbiksIGluZm8pOwogfQpAQCAt
MTA3LDExICsxMDYsMzcgQEAgdm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZU9iamVj
dFN0b3JlKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGMKIHZvaWQgSURCQ29ubmVj
dGlvblRvU2VydmVyOjpkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2ZXI6
OmRpZENyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgY29tcGxldGVPcGVyYXRpb24ocmVzdWx0RGF0
YSk7Cit9CiAKLSAgICBhdXRvIG9wZXJhdGlvbiA9IG1fYWN0aXZlT3BlcmF0aW9ucy50YWtlKHJl
c3VsdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSk7Ci0gICAgQVNTRVJUKG9wZXJhdGlvbik7Cit2
b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6cHV0T3JBZGQoVHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdGlvbiwgUmVmUHRyPElEQktleT4mIGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4mIHZhbHVlLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBv
dmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25uZWN0aW9uVG9TZXJ2
ZXI6OnB1dE9yQWRkIik7CiAKLSAgICBvcGVyYXRpb24tPmNvbXBsZXRlZChyZXN1bHREYXRhKTsK
KyAgICBzYXZlT3BlcmF0aW9uKG9wZXJhdGlvbik7CisgICAgbV9kZWxlZ2F0ZS0+cHV0T3JBZGQo
SURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwga2V5LmdldCgpLCAqdmFsdWUsIG92ZXJ3cml0ZU1v
ZGUpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6ZGlkUHV0T3JBZGQoY29uc3Qg
SURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ29u
bmVjdGlvblRvU2VydmVyOjpkaWRQdXRPckFkZCIpOworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJl
c3VsdERhdGEpOworfQorCit2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Z2V0UmVjb3JkKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+JiBrZXkpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Z2V0UmVjb3JkIik7CisK
KyAgICBBU1NFUlQoa2V5KTsKKworICAgIHNhdmVPcGVyYXRpb24ob3BlcmF0aW9uKTsKKyAgICBt
X2RlbGVnYXRlLT5nZXRSZWNvcmQoSURCUmVxdWVzdERhdGEob3BlcmF0aW9uKSwga2V5LmdldCgp
KTsKK30KKwordm9pZCBJREJDb25uZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29yZChjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXI6OmRpZEdldFJlY29yZCIpOworICAgIGNvbXBsZXRlT3BlcmF0aW9uKHJl
c3VsdERhdGEpOwogfQogCiB2b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y29tbWl0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQpAQCAtMTg1LDYgKzIxMCwyMCBAQCB2
b2lkIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6dW5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbihJ
REJEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb25NYXAucmVtb3Zl
KGRhdGFiYXNlLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgSURC
Q29ubmVjdGlvblRvU2VydmVyOjpzYXZlT3BlcmF0aW9uKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBv
cGVyYXRpb24pCit7CisgICAgQVNTRVJUKCFtX2FjdGl2ZU9wZXJhdGlvbnMuY29udGFpbnMob3Bl
cmF0aW9uLmlkZW50aWZpZXIoKSkpOworICAgIG1fYWN0aXZlT3BlcmF0aW9ucy5zZXQob3BlcmF0
aW9uLmlkZW50aWZpZXIoKSwgJm9wZXJhdGlvbik7Cit9CisKK3ZvaWQgSURCQ29ubmVjdGlvblRv
U2VydmVyOjpjb21wbGV0ZU9wZXJhdGlvbihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQoreworICAgIGF1dG8gb3BlcmF0aW9uID0gbV9hY3RpdmVPcGVyYXRpb25zLnRha2UocmVzdWx0
RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQob3BlcmF0aW9uKTsKKworICAg
IG9wZXJhdGlvbi0+Y29tcGxldGVkKHJlc3VsdERhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJ
REJDbGllbnQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1Nl
cnZlci5oCmluZGV4IDQzMDVlYTIuLjdlMjc4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2Vy
dmVyLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIElEQkNsaWVudCB7CiBjbGFzcyBJREJE
YXRhYmFzZTsKIGNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CiBjbGFzcyBJREJUcmFuc2FjdGlvbjsK
K2NsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uOwogCiBjbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IHsKIHB1YmxpYzoK
QEAgLTYzLDYgKzY0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9p
ZCBkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHREYXRhJik7CiAKKyAgICB2b2lk
IHB1dE9yQWRkKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktleT4mLCBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVy
d3JpdGVNb2RlKTsKKyAgICB2b2lkIGRpZFB1dE9yQWRkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsK
KworICAgIHZvaWQgZ2V0UmVjb3JkKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktl
eT4mKTsKKyAgICB2b2lkIGRpZEdldFJlY29yZChjb25zdCBJREJSZXN1bHREYXRhJik7CisKICAg
ICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkaWRD
b21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKIApAQCAtNzcsNyArODQsMTAgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlcihJREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZSYpOwotICAgIAorCisgICAgdm9pZCBzYXZlT3BlcmF0aW9uKFRyYW5zYWN0
aW9uT3BlcmF0aW9uJik7CisgICAgdm9pZCBjb21wbGV0ZU9wZXJhdGlvbihjb25zdCBJREJSZXN1
bHREYXRhJik7CisKICAgICBSZWY8SURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGU+IG1fZGVs
ZWdhdGU7CiAKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPElEQkNs
aWVudDo6SURCT3BlbkRCUmVxdWVzdD4+IG1fb3BlbkRCUmVxdWVzdE1hcDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9T
ZXJ2ZXJEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKaW5kZXggMDliMmYwMS4uZWYyNjhjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNv
bm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLmgKQEAgLTMwLDkg
KzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCS2V5OwogY2xhc3Mg
SURCT2JqZWN0U3RvcmVJbmZvOwogY2xhc3MgSURCUmVxdWVzdERhdGE7CiBjbGFzcyBJREJSZXNv
dXJjZUlkZW50aWZpZXI7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK25hbWVzcGFj
ZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU7Cit9CiAK
IG5hbWVzcGFjZSBJREJDbGllbnQgewogCkBAIC00Niw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgYWJvcnRUcmFuc2FjdGlvbihJREJSZXNvdXJjZUlkZW50aWZpZXImKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKElEQlJlc291cmNlSWRlbnRpZmll
ciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVx
dWVzdERhdGEmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURCS2V5KiwgU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURC
S2V5KikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlQ29ubmVjdGlvbkNsb3NlZCh1
aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKSA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgcmVmKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRleCBjZjhjZjE0
Li40ODg5YjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcApAQCAtMjgsNyArMjgsMTUg
QEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NUmVxdWVz
dFN0YXRlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklE
QkVycm9yLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdEltcGwu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkltcGwuaCIKKyNpbmNsdWRlICJJbmRleGVkREIu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJDbGllbnQgewpAQCAtODAs
NyArODgsNyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQk9iamVjdFN0b3Jl
Ojp0cmFuc2FjdGlvbigpIGNvbnN0CiAKIGJvb2wgSURCT2JqZWN0U3RvcmU6OmF1dG9JbmNyZW1l
bnQoKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG1faW5mby5hdXRvSW5jcmVtZW50KCk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikKQEAgLTg4LDkgKzk2LDkgQEAgUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUmLCBEZXBy
ZWNhdGVkOjpTY3IKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0
ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gcHV0T3JBZGQo
c3RhdGUsIHZhbHVlLCBudWxscHRyLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZTo6T3ZlcndyaXRlLCBlYyk7CiB9CiAKIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9u
Q29kZSYpCkBAIC0xMTgsOSArMTI2LDM0IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlJikKK1JlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKKworICAgIGlmICghY29udGV4dCkgewor
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
ZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpUcmFuc2Fj
dGlvbkluYWN0aXZlRXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0
U3RhdGUoY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVU
b0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+
dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxF
eGNlcHRpb25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJh
bnNhY3Rpb24tPnJlcXVlc3RHZXRSZWNvcmQoKmNvbnRleHQsICp0aGlzLCAqaWRiS2V5KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYocmVxdWVzdC5sZWFrUmVmKCkpOwogfQogCiBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikKQEAgLTEzMywxMSArMTY2LDk0IEBAIFJl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0
YXRlJiwgRGVwcmVjYXRlZDo6U2NyCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlND
OjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgYXV0byBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGV4ZWNTdGF0ZSwga2V5
KTsKKyAgICByZXR1cm4gcHV0T3JBZGQoZXhlY1N0YXRlLCB2YWx1ZSwgaWRiS2V5LCBJbmRleGVk
REI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUsIGVjKTsKIH0KIAorUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXRPckFkZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgUmVmUHRyPElE
QktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVN
b2RlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0
U3RvcmU6OnB1dE9yQWRkIik7CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgp
KSB7CisgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9u
Q29kZTo6UmVhZE9ubHlFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IHN0YXRp
Y19jYXN0PEV4Y2VwdGlvbkNvZGU+KElEQkV4Y2VwdGlvbkNvZGU6OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2Rl
bGV0ZWQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1
ZS5qc1ZhbHVlKCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkgeworICAgICAgICBlYyA9IERBVEFfQ0xPTkVfRVJSOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5oYXNCbG9iVVJMcygpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKKyAgICAg
ICAgZWMgPSBEQVRBX0NMT05FX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKGtleSAmJiBrZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAg
ICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0
YUVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCB1c2Vz
SW5saW5lS2V5cyA9ICFtX2luZm8ua2V5UGF0aCgpLmlzTnVsbCgpOworICAgIGJvb2wgdXNlc0tl
eUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKKyAgICBpZiAodXNlc0lubGluZUtleXMpIHsK
KyAgICAgICAgaWYgKGtleSkgeworICAgICAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRp
b25Db2RlPihJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5
ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHN0YXRlLCB2YWx1
ZSwgbV9pbmZvLmtleVBhdGgoKSk7CisgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRo
S2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9u
Q29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFrZXlQYXRoS2V5KSB7CisgICAgICAg
ICAgICBpZiAodXNlc0tleUdlbmVyYXRvcikgeworICAgICAgICAgICAgICAgIGlmICghY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJ
REJFeGNlcHRpb25Db2RlOjpEYXRhRXJyb3IpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGVjID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29k
ZTo6RGF0YUVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlQYXRoS2V5KSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWtleSk7CisgICAgICAgICAgICBrZXkgPSBrZXlQYXRoS2V5OworICAgICAgICB9
CisgICAgfSBlbHNlIGlmICghdXNlc0tleUdlbmVyYXRvciAmJiAha2V5KSB7CisgICAgICAgIGVj
ID0gc3RhdGljX2Nhc3Q8RXhjZXB0aW9uQ29kZT4oSURCRXhjZXB0aW9uQ29kZTo6RGF0YUVycm9y
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBjb250ZXh0ID0g
c2NyaXB0RXhlY3V0aW9uQ29udGV4dEZyb21FeGVjU3RhdGUoJnN0YXRlKTsKKyAgICBpZiAoIWNv
bnRleHQpIHsKKyAgICAgICAgZWMgPSBzdGF0aWNfY2FzdDxFeGNlcHRpb25Db2RlPihJREJFeGNl
cHRpb25Db2RlOjpVbmtub3duKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0UHV0T3JB
ZGQoKmNvbnRleHQsICp0aGlzLCBrZXkuZ2V0KCksICpzZXJpYWxpemVkVmFsdWUsIG92ZXJ3cml0
ZU1vZGUpOworICAgIHJldHVybiBhZG9wdFJlZihyZXF1ZXN0LmxlYWtSZWYoKSk7Cit9CisKKwog
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1w
bC5oCmluZGV4IDVmZGM5ODYuLmJmODIxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmgKQEAg
LTMwLDggKzMwLDEyIEBACiAKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlSW5mby5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktleTsKKwogbmFtZXNwYWNlIElEQkNsaWVudCB7CiAK
IGNsYXNzIElEQlRyYW5zYWN0aW9uOwpAQCAtNzIsMTEgKzc2LDE3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGUgZmluYWw7CiAg
ICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGUmKSBvdmVycmlkZSBmaW5hbDsKIAorICAgIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYg
aW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCiBwcml2YXRlOgogICAgIElEQk9iamVj
dFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIElEQlRyYW5zYWN0aW9uJik7CiAKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gcHV0T3JBZGQoSlNDOjpFeGVjU3RhdGUmLCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIFJlZlB0cjxJREJLZXk+LCBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZSwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgSURCT2JqZWN0U3Rv
cmVJbmZvIG1faW5mbzsKICAgICBSZWY8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisK
KyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJD
bGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwCmluZGV4IGUwMTI2OTUuLmI2ZGJk
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJPcGVuREJSZXF1ZXN0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcApAQCAtNTUsNyArNTUsNiBAQCBJ
REJPcGVuREJSZXF1ZXN0OjpJREJPcGVuREJSZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYg
Y29ubmVjdGlvbiwgU2NyaXB0RXhlYwogICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJh
c2VJZGVudGlmaWVyKQogICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCiB7Ci0gICAgc3VzcGVuZElm
TmVlZGVkKCk7CiB9CiAKIElEQk9wZW5EQlJlcXVlc3Q6On5JREJPcGVuREJSZXF1ZXN0KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1
ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
UmVxdWVzdEltcGwuY3BwCmluZGV4IGIwZjc5NDcuLmU0YzJjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBs
LmNwcApAQCAtMjksMTcgKzI5LDM5IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
ICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQktleURhdGEu
aCIKKyNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0
YUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIAorUmVmPElEQlJlcXVlc3Q+IElEQlJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RT
dG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIG9iamVjdFN0b3JlLCB0cmFu
c2FjdGlvbikpOworfQorCiBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICA6
IElEQk9wZW5EQlJlcXVlc3QoY29udGV4dCkKICAgICAsIG1fY29ubmVjdGlvbihjb25uZWN0aW9u
KQogICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIoY29ubmVjdGlvbikKIHsKKyAgICBzdXNwZW5k
SWZOZWVkZWQoKTsKK30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6IElEQk9wZW5EQlJlcXVlc3QoJmNvbnRleHQpCisgICAg
LCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKKyAgICAsIG1fY29ubmVjdGlvbih0cmFuc2Fj
dGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFu
c2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3NvdXJjZShhZG9wdFJlZigqSURC
QW55OjpjcmVhdGUob2JqZWN0U3RvcmUpLmxlYWtSZWYoKSkpCit7CisgICAgc3VzcGVuZElmTmVl
ZGVkKCk7CiB9CiAKIElEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKQEAgLTc3LDYgKzk5LDE4IEBA
IGNvbnN0IFN0cmluZyYgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHJlYWR5U3RhdGU7CiB9CiAKK3VpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3Jl
SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgIT0gSURCQW55OjpUeXBlOjpJREJPYmplY3RT
dG9yZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX3NvdXJjZS0+bW9kZXJuSURCT2Jq
ZWN0U3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPm1v
ZGVybklEQk9iamVjdFN0b3JlKCktPmluZm8oKS5pZGVudGlmaWVyKCk7Cit9CisKIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKQEAgLTkyLDYg
KzEyNiwxMSBAQCBib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25z
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKK30KKwog
dm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQpAQCAtMTAxLDYgKzE0MCw4MiBAQCB2b2lk
IElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiAgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KCZldmVudC5nZXQo
KSk7CiB9CiAKK2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBwcnBFdmVudCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudCAtICVzIiwgcHJwRXZlbnQtPnR5cGUoKS5jaGFyYWN0ZXJzOCgpKTsKKworICAgIFJlZlB0
cjxFdmVudD4gZXZlbnQgPSBwcnBFdmVudDsKKworICAgIGlmIChldmVudC0+dHlwZSgpICE9IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVl
c3RSZWFkeVN0YXRlOjpEb25lOworCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRh
cmdldHM7CisgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2FjdGlv
bikgeworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uKTsKKyAgICAgICAgdGFy
Z2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbi0+ZGIoKSk7CisgICAgfQorCisgICAgYm9vbCBkb250
UHJldmVudERlZmF1bHQ7CisgICAgeworICAgICAgICBUcmFuc2FjdGlvbkFjdGl2YXRvciBhY3Rp
dmF0b3IobV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9
IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCksIHRhcmdldHMpOworICAg
IH0KKworICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7CisKKyAgICByZXR1cm4gZG9u
dFByZXZlbnREZWZhdWx0OworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJ
REJLZXlEYXRhKiBrZXlEYXRhKQoreworICAgIGlmICgha2V5RGF0YSkgeworICAgICAgICBtX3Jl
c3VsdCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKmtleURhdGEpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUo
V1RGOjptb3ZlKHZhbHVlKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1
Y3R1cmVkQ2xvbmUoY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUi
KTsKKworICAgIGF1dG8gY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBp
ZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7
CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEY6Om1vdmUodmFsdWUpKTsKK30KKwor
dm9pZCBJREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpCit7CisgICAgbV9pZGJFcnJvciA9IHJlc3VsdERhdGEuZXJyb3IoKTsKKyAgICBp
ZiAoIW1faWRiRXJyb3IuaXNOdWxsKCkpCisgICAgICAgIG9uRXJyb3IoKTsKKyAgICBlbHNlCisg
ICAgICAgIG9uU3VjY2VzcygpOworfQorCit2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpvbkVycm9yIik7CisKKyAgICBBU1NFUlQo
IW1faWRiRXJyb3IuaXNOdWxsKCkpOworICAgIG1fZG9tRXJyb3IgPSBET01FcnJvcjo6Y3JlYXRl
KG1faWRiRXJyb3IubmFtZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6
Om9uU3VjY2VzcygpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyIpOworCisgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgZmFsc2UsIGZhbHNlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCmluZGV4IGQ0NjI0MTEuLjFk
ZmZiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJSZXF1ZXN0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCkBAIC0zNyw3ICszNywxMCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBFdmVudDsKK2NsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJSZXN1
bHREYXRhOworY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CisKIAogbmFtZXNwYWNlIElEQkNs
aWVudCB7CiAKQEAgLTQ1LDYgKzQ4LDggQEAgY2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyOwog
CiBjbGFzcyBJREJSZXF1ZXN0IDogcHVibGljIFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3QsIHB1
YmxpYyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElE
QlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUm
LCBJREJUcmFuc2FjdGlvbiYpOworCiAgICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBy
ZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlSWRlbnRpZmllcjsg
fQogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpIG92ZXJyaWRlOwpAQCAtNTYsNiArNjEsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHJl
YWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIHVpbnQ2NF90IHNvdXJjZU9iamVjdFN0
b3JlSWRlbnRpZmllcigpIGNvbnN0OworCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0Ojpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KQEAgLTY0LDE1ICs3MSwyMyBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6ZGVyZWY7CiAKICAgICB2b2lkIGVucXVl
dWVFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+KSBvdmVycmlkZSBmaW5hbDsKIAogICAgIElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQogCisgICAgdm9pZCBy
ZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgc2V0UmVz
dWx0KGNvbnN0IElEQktleURhdGEqKTsKKyAgICB2b2lkIHNldFJlc3VsdFRvU3RydWN0dXJlZENs
b25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CisKIHByb3RlY3RlZDoKICAgICBJREJS
ZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
KyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYs
IElEQlRyYW5zYWN0aW9uJik7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QuCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBjb25zdCBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWw7CiAgICAgCiAgICAgLy8gRXZlbnRUYXJnZXQuCiAgICAgdmlydHVhbCB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+
OjpyZWYoKTsgfQpAQCAtODIsMTAgKzk3LDE2IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8SURC
QW55PiBtX3Jlc3VsdDsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247
CiAgICAgUmVmUHRyPERPTUVycm9yPiBtX2RvbUVycm9yOworICAgIElEQkVycm9yIG1faWRiRXJy
b3I7CiAKIHByaXZhdGU6CisgICAgdm9pZCBvbkVycm9yKCk7CisgICAgdm9pZCBvblN1Y2Nlc3Mo
KTsKKwogICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgbV9jb25uZWN0aW9uOwogICAgIElEQlJl
c291cmNlSWRlbnRpZmllciBtX3Jlc291cmNlSWRlbnRpZmllcjsKKyAgICBSZWZQdHI8SURCQW55
PiBtX3NvdXJjZTsKKyAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmlu
ZGV4IDgyZTU5NjIuLmJjMjJiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSURCRXJyb3IuaCIKICNpbmNsdWRlICJJREJFdmVudERp
c3BhdGNoZXIuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQlJl
cXVlc3RJbXBsLmgiCiAjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkBAIC02MSw3ICs2Miw3
IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihJREJEYXRhYmFzZSYgZGF0YWJhc2Us
IGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYKICAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5m
byA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2RhdGFiYXNlLT5pbmZvKCkp
OwogCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25TdGF0ZTo6UnVubmluZzsKKyAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlOjpJbmFjdGl2ZTsKIH0KIAogSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlv
bigpCkBAIC0xMzAsMTIgKzEzMSwxNSBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5k
Rm9yUGFnZUNhY2hlKCkgY29uc3QKIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKIHsKKyAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkluYWN0aXZlKQorICAgICAgICByZXR1cm4gIW1fdHJhbnNhY3Rpb25PcGVyYXRp
b25RdWV1ZS5pc0VtcHR5KCkgfHwgIW1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuaXNFbXB0eSgp
OworCiAgICAgcmV0dXJuIG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZDsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNBY3RpdmUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6UnVubmlu
ZzsKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFj
dGl2ZTsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkg
Y29uc3QKQEAgLTE4MSw3ICsxODUsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25U
aW1lckZpcmVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc0FjdGl2ZSgp
KQorICAgIGlmICghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCiAgICAgICAgIGNvbW1pdCgpOwog
fQogCkBAIC0xODksMTAgKzE5Myw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXQiKTsKIAotICAgIGlm
IChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6UnVubmluZykgewotICAg
ICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKKyAg
ICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAK
ICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpDb21taXR0aW5nOwog
CkBAIC0yMTEsNyArMjEzLDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQWJvcnQoY29uc3Qg
SURCRXJyb3ImIGVycm9yKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
ZGlkQWJvcnQiKTsKIAotICAgIEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25TdGF0ZTo6QWJvcnRpbmcgfHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OlJ1bm5pbmcpOworICAgIGlmIChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6RmluaXNoZWQpCisgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YWJhc2UtPmRpZEFi
b3J0VHJhbnNhY3Rpb24oKnRoaXMpOwogCkBAIC0yOTQsNyArMjk3LDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYg
b3BlcmF0aW9uLAogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
T2JqZWN0U3RvcmVPblNlcnZlciIpOwogCi0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFT
U0VSVCghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpOwogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFu
Z2UoKSk7CiAKICAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0
U3RvcmUob3BlcmF0aW9uLCBpbmZvKTsKQEAgLTMwOSw2ICszMTIsODQgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXQKICAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7CiB9CiAKK1JlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElEQktleSYga2V5
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRk
Iik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsK
KworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRy
YW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246
OmRpZEdldFJlY29yZE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVy
LCAma2V5KTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEY6Om1vdmUob3BlcmF0aW9uKSk7CisK
KyAgICByZXR1cm4gV1RGOjptb3ZlKHJlcXVlc3QpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
OjpnZXRSZWNvcmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBSZWZQ
dHI8SURCS2V5PiBrZXkpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpn
ZXRSZWNvcmRPblNlcnZlciIpOworCisgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmco
KSk7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0UmVjb3JkKG9wZXJhdGlvbiwga2V5KTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyIik7CisKKyAg
ICByZXF1ZXN0LnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEucmVzdWx0RGF0
YSgpKTsKKyAgICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7Cit9CisKK1Jl
ZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRkKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgSURCS2V5
KiBrZXksIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQiKTsKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7
CisgICAgQVNTRVJUKCFpc1JlYWRPbmx5KCkpOworICAgIEFTU0VSVChvYmplY3RTdG9yZS5pbmZv
KCkuYXV0b0luY3JlbWVudCgpIHx8IGtleSk7CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBvYmplY3RTdG9yZSwgKnRoaXMpOworCisg
ICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVx
dWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyLCAmSURCVHJh
bnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIsIGtleSwgJnZhbHVlLCBvdmVyd3JpdGVNb2RlKTsK
KyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEY6Om1vdmUob3BlcmF0aW9uKSk7CisKKyAgICByZXR1
cm4gV1RGOjptb3ZlKHJlcXVlc3QpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpwdXRPckFk
ZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+
IGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IEluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlJiBvdmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlciIpOworCisgICAgQVNT
RVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CisgICAgQVNTRVJUKCFpc1JlYWRPbmx5KCkp
OworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLnB1dE9yQWRkKG9wZXJhdGlvbiwga2V5LCB2YWx1
ZSwgb3ZlcndyaXRlTW9kZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRk
T25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0
RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRk
T25TZXJ2ZXIiKTsKKworICAgIHJlcXVlc3Quc2V0UmVzdWx0KHJlc3VsdERhdGEucmVzdWx0S2V5
KCkpOworICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKK30KKwordm9p
ZCBJREJUcmFuc2FjdGlvbjo6YWN0aXZhdGUoKQoreworICAgIEFTU0VSVChtX3N0YXRlID09IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6VW5zdGFydGVkIHx8IG1fc3RhdGUgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpJbmFjdGl2ZSk7CisgICAgbV9zdGF0ZSA9IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZlOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpk
ZWFjdGl2YXRlKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
U3RhdGU6OlVuc3RhcnRlZCB8fCBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0
ZTo6QWN0aXZlKQorICAgICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRl
OjpJbmFjdGl2ZTsKKworICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSURCQ2xpZW50CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2Fj
dGlvbkltcGwuaAppbmRleCA1ZWI3OWE1Li42NDA4NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1w
bC5oCkBAIC04MSwxMiArODEsMTkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ29tbWl0KGNvbnN0
IElEQkVycm9yJik7CiAKICAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFu
Z2U7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX2luZm8ubW9kZSgp
ID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seTsgfQogICAgIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdDsKIAogICAgIFJlZjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3Rv
cmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVx
dWVzdFB1dE9yQWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElE
QktleSosIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVy
d3JpdGVNb2RlKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEdldFJlY29yZChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBJREJLZXkmKTsKKwogICAgIElEQkNv
bm5lY3Rpb25Ub1NlcnZlciYgc2VydmVyQ29ubmVjdGlvbigpOwogCisgICAgdm9pZCBhY3RpdmF0
ZSgpOworICAgIHZvaWQgZGVhY3RpdmF0ZSgpOworCiBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0
aW9uKElEQkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7CiAKQEAgLTEwOCw2
ICsxMTUsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIo
VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2
b2lkIGRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYpOwog
CisgICAgdm9pZCBwdXRPckFkZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRy
PElEQktleT4sIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSYpOworICAgIHZvaWQgZGlkUHV0T3JBZGRPblNlcnZl
cihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBnZXRSZWNv
cmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIFJlZlB0cjxJREJLZXk+KTsKKyAgICB2
b2lkIGRpZEdldFJlY29yZE9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRh
Jik7CisKICAgICBSZWY8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAgICAgSURCVHJhbnNhY3Rp
b25JbmZvIG1faW5mbzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBtX29y
aWdpbmFsRGF0YWJhc2VJbmZvOwpAQCAtMTIyLDYgKzEzNSwyNiBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+
PiBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwOwogfTsKIAorY2xhc3MgVHJhbnNhY3Rpb25BY3Rp
dmF0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRyYW5zYWN0aW9uQWN0aXZhdG9yKTsK
K3B1YmxpYzoKKyAgICBUcmFuc2FjdGlvbkFjdGl2YXRvcihJREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCisgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICB7CisgICAg
ICAgIGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWN0aXZh
dGUoKTsKKyAgICB9CisKKyAgICB+VHJhbnNhY3Rpb25BY3RpdmF0b3IoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fdHJhbnNhY3Rpb24pCisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5kZWFjdGl2
YXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIElEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0
aW9uOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQ2NTY0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VHJhbnNhY3Rpb25PcGVyYXRpb24uaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgSURCQ2xpZW50IHsKKworVHJhbnNhY3Rp
b25PcGVyYXRpb246OlRyYW5zYWN0aW9uT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgSURCUmVxdWVzdCYgcmVxdWVzdCkKKyAgICA6IFRyYW5zYWN0aW9uT3BlcmF0aW9uKHRy
YW5zYWN0aW9uKQoreworICAgIG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyID0gcmVxdWVzdC5zb3Vy
Y2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmgKaW5kZXggMzY0NDBmNi4uOWRkZDVkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5z
YWN0aW9uT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSURCUmVxdWVzdEltcGwuaCIKICNp
bmNsdWRlICJJREJSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkltcGwuaCIKIApAQCAtNTEsNiArNTIsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7
IH0KICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgdHJhbnNhY3Rpb25JZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKTsgfQorICAgIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3Rv
cmVJZGVudGlmaWVyOyB9CisgICAgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKCkgeyByZXR1
cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgVHJhbnNhY3Rpb25P
cGVyYXRpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQpAQCAtNTksOCArNjIsMTEgQEAg
cHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAKKyAgICBUcmFuc2FjdGlvbk9wZXJhdGlvbihJREJU
cmFuc2FjdGlvbiYsIElEQlJlcXVlc3QmKTsKKwogICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gbV90
cmFuc2FjdGlvbjsKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOworICAg
IHVpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZGVudGlmaWVyIHsgMCB9OwogICAgIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gbV9wZXJmb3JtRnVuY3Rpb247CiAgICAgc3RkOjpmdW5jdGlvbjx2b2lkIChj
b25zdCBJREJSZXN1bHREYXRhJik+IG1fY29tcGxldGVGdW5jdGlvbjsKIH07CkBAIC04MSw2ICs4
NywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAoJm1fdHJhbnNhY3Rpb24uZ2V0KCktPipjb21w
bGV0ZU1ldGhvZCkocmVzdWx0RGF0YSk7CiAgICAgICAgIH07CiAgICAgfQorCisgICAgVHJhbnNh
Y3Rpb25PcGVyYXRpb25JbXBsKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCUmVxdWVz
dCYgcmVxdWVzdCwgdm9pZCAoSURCVHJhbnNhY3Rpb246Oipjb21wbGV0ZU1ldGhvZCkoSURCUmVx
dWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKSwgdm9pZCAoSURCVHJhbnNhY3Rpb246OipwZXJm
b3JtTWV0aG9kKShUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIEFyZ3VtZW50cy4uLiksIEFyZ3VtZW50
cyYmLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2Fj
dGlvbiwgcmVxdWVzdCkKKyAgICB7CisgICAgICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgp
OworCisgICAgICAgIFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gc2VsZih0aGlzKTsKKyAg
ICAgICAgbV9wZXJmb3JtRnVuY3Rpb24gPSBbc2VsZiwgdGhpcywgcGVyZm9ybU1ldGhvZCwgYXJn
dW1lbnRzLi4uXSB7CisgICAgICAgICAgICAoJm1fdHJhbnNhY3Rpb24uZ2V0KCktPipwZXJmb3Jt
TWV0aG9kKSgqdGhpcywgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfTsKKworICAgICAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVmUmVxdWVzdCgmcmVxdWVzdCk7CisgICAgICAgIG1fY29tcGxldGVG
dW5jdGlvbiA9IFtzZWxmLCB0aGlzLCByZWZSZXF1ZXN0LCBjb21wbGV0ZU1ldGhvZF0oY29uc3Qg
SURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkgeworICAgICAgICAgICAgKCZtX3RyYW5zYWN0aW9u
LmdldCgpLT4qY29tcGxldGVNZXRob2QpKCpyZWZSZXF1ZXN0LCByZXN1bHREYXRhKTsKKyAgICAg
ICAgfTsKKyAgICB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAxPgpA
QCAtOTQsNiArMTE2LDMyIEBAIFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gY3JlYXRlVHJh
bnNhY3Rpb25PcGVyYXRpb24oCiAgICAgcmV0dXJuIGFkb3B0UmVmKG9wZXJhdGlvbik7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDE+CitSZWZQdHI8VHJhbnNhY3Rpb25P
cGVyYXRpb24+IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKAorICAgIElEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwKKyAgICBJREJSZXF1ZXN0JiByZXF1ZXN0LAorICAgIHZvaWQgKElEQlRy
YW5zYWN0aW9uOjoqY29tcGxldGUpKElEQlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJiks
CisgICAgdm9pZCAoSURCVHJhbnNhY3Rpb246OipwZXJmb3JtKShUcmFuc2FjdGlvbk9wZXJhdGlv
biYsIE1QMSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCit7CisgICAgYXV0byBvcGVyYXRp
b24gPSBuZXcgVHJhbnNhY3Rpb25PcGVyYXRpb25JbXBsPE1QMT4odHJhbnNhY3Rpb24sIHJlcXVl
c3QsIGNvbXBsZXRlLCBwZXJmb3JtLCBwYXJhbWV0ZXIxKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
b3BlcmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBNUDIsIHR5
cGVuYW1lIE1QMywgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMz4KK1JlZlB0
cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oCisgICAg
SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLAorICAgIElEQlJlcXVlc3QmIHJlcXVlc3QsCisg
ICAgdm9pZCAoSURCVHJhbnNhY3Rpb246Oipjb21wbGV0ZSkoSURCUmVxdWVzdCYsIGNvbnN0IElE
QlJlc3VsdERhdGEmKSwKKyAgICB2b2lkIChJREJUcmFuc2FjdGlvbjo6KnBlcmZvcm0pKFRyYW5z
YWN0aW9uT3BlcmF0aW9uJiwgTVAxLCBNUDIsIE1QMyksCisgICAgY29uc3QgUDEmIHBhcmFtZXRl
cjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMp
Cit7CisgICAgYXV0byBvcGVyYXRpb24gPSBuZXcgVHJhbnNhY3Rpb25PcGVyYXRpb25JbXBsPE1Q
MSwgTVAyLCBNUDM+KHRyYW5zYWN0aW9uLCByZXF1ZXN0LCBjb21wbGV0ZSwgcGVyZm9ybSwgcGFy
YW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9w
ZXJhdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggN2UzZTVjMC4uODdjODRiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJC
YWNraW5nU3RvcmUuaApAQCAtMzMsOSArMzMsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBJREJLZXlEYXRhOwogY2xhc3MgSURCT2JqZWN0U3RvcmVJbmZvOwogY2xhc3MgSURC
UmVzb3VyY2VJZGVudGlmaWVyOwogY2xhc3MgSURCVHJhbnNhY3Rpb25JbmZvOworY2xhc3MgVGhy
ZWFkU2FmZURhdGFCdWZmZXI7CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCkBAIC01MCw2ICs1
MiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJFcnJvciBjb21taXRUcmFuc2FjdGlvbihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgPSAwOwog
CiAgICAgdmlydHVhbCBJREJFcnJvciBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJ
bmZvJikgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmplY3RTdG9yZShj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYga2V5RXhp
c3RzKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBkZWxldGVSZWNvcmQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVy
cm9yIHB1dFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRh
JiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCBJ
REJFcnJvciBnZXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
RGF0YSYsIFRocmVhZFNhZmVEYXRhQnVmZmVyJiBvdXRWYWx1ZSkgPSAwOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCmluZGV4
IGY5ODUzN2UuLjQzMWE0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9uVG9DbGllbnQuY3BwCkBA
IC02OCw2ICs2OCwxNiBAQCB2b2lkIElEQkNvbm5lY3Rpb25Ub0NsaWVudDo6ZGlkQ3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0KQogICAgIG1fZGVsZWdhdGUtPmRp
ZENyZWF0ZU9iamVjdFN0b3JlKHJlc3VsdCk7CiB9CiAKK3ZvaWQgSURCQ29ubmVjdGlvblRvQ2xp
ZW50OjpkaWRQdXRPckFkZChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHQpCit7CisgICAgbV9k
ZWxlZ2F0ZS0+ZGlkUHV0T3JBZGQocmVzdWx0KTsKK30KKwordm9pZCBJREJDb25uZWN0aW9uVG9D
bGllbnQ6OmRpZEdldFJlY29yZChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHQpCit7CisgICAg
bV9kZWxlZ2F0ZS0+ZGlkR2V0UmVjb3JkKHJlc3VsdCk7Cit9CisKIHZvaWQgSURCQ29ubmVjdGlv
blRvQ2xpZW50OjpkaWRDb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewogICAg
IG1fZGVsZWdhdGUtPmRpZENvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
ZXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25Ub0NsaWVudC5oCmluZGV4IDI1Y2U1MTIuLmJmZjg1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJDb25uZWN0aW9uVG9DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKQEAgLTUzLDYgKzUzLDggQEAgcHVi
bGljOgogICAgIHZvaWQgZGlkQWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImKTsKICAgICB2b2lk
IGRpZENvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYpOwogICAgIHZvaWQgZGlkQ3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgSURCUmVzdWx0RGF0YSYpOworICAgIHZvaWQgZGlkUHV0T3JBZGQoY29u
c3QgSURCUmVzdWx0RGF0YSYpOworICAgIHZvaWQgZGlkR2V0UmVjb3JkKGNvbnN0IElEQlJlc3Vs
dERhdGEmKTsKIAogICAgIHZvaWQgZmlyZVZlcnNpb25DaGFuZ2VFdmVudChVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb24mLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkNvbm5lY3Rpb25U
b0NsaWVudERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaAppbmRleCBjYTc4ODdjLi4xMDI3ZjRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
Q29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaApAQCAtNDks
NiArNDksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEFib3J0VHJhbnNhY3Rpb24o
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCRXJyb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZU9iamVjdFN0b3JlKGNv
bnN0IElEQlJlc3VsdERhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFB1dE9yQWRkKGNv
bnN0IElEQlJlc3VsdERhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEdldFJlY29yZChj
b25zdCBJREJSZXN1bHREYXRhJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQoVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uJiwgdWludDY0X3QgcmVxdWVz
dGVkVmVyc2lvbikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IDQ5MzAyZjkuLjFjNDAxODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuY3BwCkBAIC0xNjgsNiArMTY4LDI4IEBAIHZvaWQgSURCU2VydmVyOjpjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQk9iCiAgICAg
dHJhbnNhY3Rpb24tPmNyZWF0ZU9iamVjdFN0b3JlKHJlcXVlc3REYXRhLCBpbmZvKTsKIH0KIAor
dm9pZCBJREJTZXJ2ZXI6OnB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXIm
IHZhbHVlRGF0YSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRl
TW9kZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyOjpwdXRPckFkZCIpOworCisg
ICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldChyZXF1ZXN0RGF0YS50cmFu
c2FjdGlvbklkZW50aWZpZXIoKSk7CisgICAgaWYgKCF0cmFuc2FjdGlvbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgdHJhbnNhY3Rpb24tPnB1dE9yQWRkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2
YWx1ZURhdGEsIG92ZXJ3cml0ZU1vZGUpOworfQorCit2b2lkIElEQlNlcnZlcjo6Z2V0UmVjb3Jk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyOjpnZXRSZWNvcmQiKTsKKwor
ICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQocmVxdWVzdERhdGEudHJh
bnNhY3Rpb25JZGVudGlmaWVyKCkpOworICAgIGlmICghdHJhbnNhY3Rpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIHRyYW5zYWN0aW9uLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGtleURhdGEp
OworfQorCiB2b2lkIElEQlNlcnZlcjo6Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIklEQlNlcnZlcjo6Y29tbWl0VHJhbnNhY3Rpb24iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCA0ZDJhODNjLi5m
ZjI2OTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5oCkBAIC02MCw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFib3J0
VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJik7CiAgICAgdm9pZCBjb21t
aXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKTsKICAgICB2b2lkIGNy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCT2JqZWN0U3Rv
cmVJbmZvJik7CisgICAgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSk7CisgICAgdm9pZCBnZXRSZWNvcmQoY29u
c3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJik7CiAgICAgdm9pZCBkYXRhYmFz
ZUNvbm5lY3Rpb25DbG9zZWQodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7
CiAKICAgICB2b2lkIHBvc3REYXRhYmFzZVRhc2soc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFk
VGFzaz4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNw
cAppbmRleCA1YzQ0NzdmLi5jNTY0YWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSAiTWVtb3J5SURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiTWVtb3J5
T2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewpAQCAtNjcsMTUgKzY4LDUxIEBA
IHZvaWQgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFkZE5ld09iamVjdFN0b3JlKE1l
bW9yeU9iamVjdFN0b3JlJiBvYmplY3RTCiAgICAgb2JqZWN0U3RvcmUud3JpdGVUcmFuc2FjdGlv
blN0YXJ0ZWQoKnRoaXMpOwogfQogCit2b2lkIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
OjpyZWNvcmRWYWx1ZUNoYW5nZWQoTWVtb3J5T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25z
dCBJREJLZXlEYXRhJiBrZXkpCit7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5z
KCZvYmplY3RTdG9yZSkpOworCisgICAgaWYgKG1faXNBYm9ydGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBvcmlnaW5hbEFkZFJlc3VsdCA9IG1fb3JpZ2luYWxWYWx1ZXMuYWRkKCZv
YmplY3RTdG9yZSwgbnVsbHB0cik7CisgICAgaWYgKG9yaWdpbmFsQWRkUmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgIG9yaWdpbmFsQWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8S2V5VmFsdWVNYXA+KCk7CisKKyAgICBhdXRvKiBtYXAgPSBvcmlnaW5hbEFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC0+
YWRkKGtleSwgVGhyZWFkU2FmZURhdGFCdWZmZXIoKSk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IG9iamVjdFN0b3JlLnZhbHVlRm9yS2V5KGtleSk7Cit9CisKIHZvaWQgTWVtb3J5QmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmFib3J0KCkiKTsKIAorICAgIFRlbXBvcmFyeUNoYW5n
ZTxib29sPiBjaGFuZ2UobV9pc0Fib3J0aW5nLCB0cnVlKTsKKwogICAgIGlmIChtX29yaWdpbmFs
RGF0YWJhc2VJbmZvKSB7CiAgICAgICAgIEFTU0VSVChtX2luZm8ubW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKICAgICAgICAgbV9iYWNraW5nU3Rv
cmUuc2V0RGF0YWJhc2VJbmZvKCptX29yaWdpbmFsRGF0YWJhc2VJbmZvKTsKICAgICB9CiAKKyAg
ICBmb3IgKGF1dG8gb2JqZWN0U3RvcmUgOiBtX29iamVjdFN0b3JlcykgeworICAgICAgICBhdXRv
IGtleVZhbHVlTWFwID0gbV9vcmlnaW5hbFZhbHVlcy5nZXQob2JqZWN0U3RvcmUpOworICAgICAg
ICBpZiAoIWtleVZhbHVlTWFwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9y
IChhdXRvIGVudHJ5IDogKmtleVZhbHVlTWFwKSB7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+
ZGVsZXRlUmVjb3JkKGVudHJ5LmtleSk7CisgICAgICAgICAgICBvYmplY3RTdG9yZS0+c2V0S2V5
VmFsdWUoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBtX29y
aWdpbmFsVmFsdWVzLnJlbW92ZShvYmplY3RTdG9yZSk7CisgICAgfQorCisKICAgICBmaW5pc2go
KTsKIAogICAgIGZvciAoYXV0byBvYmplY3RTdG9yZSA6IG1fdmVyc2lvbkNoYW5nZUFkZGVkT2Jq
ZWN0U3RvcmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaApp
bmRleCBhYThhYTYwLi4yOTViYmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24uaApAQCAtMjksNyArMjksMTAgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2luY2x1ZGUgIklEQkRhdGFiYXNlSW5mby5oIgorI2luY2x1ZGUgIklEQktleURh
dGEuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkluZm8uaCIKKyNpbmNsdWRlICJUaHJlYWRT
YWZlRGF0YUJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArNDEsOCBAQCBuYW1l
c3BhY2UgSURCU2VydmVyIHsKIGNsYXNzIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTsKIGNsYXNzIE1l
bW9yeU9iamVjdFN0b3JlOwogCit0eXBlZGVmIEhhc2hNYXA8SURCS2V5RGF0YSwgVGhyZWFkU2Fm
ZURhdGFCdWZmZXIsIElEQktleURhdGFIYXNoLCBJREJLZXlEYXRhSGFzaFRyYWl0cz4gS2V5VmFs
dWVNYXA7CisKIGNsYXNzIE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uIHsKICAgICBmcmll
bmQgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uPiBzdGQ6Om1h
a2VfdW5pcXVlPE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uPihXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZSYsIGNvbnN0IFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
SW5mbyYpOwogcHVibGljOgpAQCAtNTEsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSURC
RGF0YWJhc2VJbmZvJiBvcmlnaW5hbERhdGFiYXNlSW5mbygpIGNvbnN0OwogCiAgICAgdm9pZCBh
ZGROZXdPYmplY3RTdG9yZShNZW1vcnlPYmplY3RTdG9yZSYpOworICAgIHZvaWQgcmVjb3JkVmFs
dWVDaGFuZ2VkKE1lbW9yeU9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5RGF0YSYpOwogCiAgICAg
dm9pZCBhYm9ydCgpOwogICAgIHZvaWQgY29tbWl0KCk7CkBAIC02NiwxMCArNzIsMTMgQEAgcHJp
dmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBtX29yaWdpbmFsRGF0
YWJhc2VJbmZvOwogCiAgICAgYm9vbCBtX2luUHJvZ3Jlc3MgeyB0cnVlIH07CisgICAgYm9vbCBt
X2lzQWJvcnRpbmcgeyBmYWxzZSB9OwogCiAgICAgSGFzaFNldDxNZW1vcnlPYmplY3RTdG9yZSo+
IG1fb2JqZWN0U3RvcmVzOwogICAgIEhhc2hTZXQ8TWVtb3J5T2JqZWN0U3RvcmUqPiBtX3ZlcnNp
b25DaGFuZ2VBZGRlZE9iamVjdFN0b3JlczsKIAorICAgIEhhc2hNYXA8TWVtb3J5T2JqZWN0U3Rv
cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+PiBtX29yaWdpbmFsVmFsdWVzOworCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9y
ZS5jcHAKaW5kZXggODU3MmJkMy4uZmUyZmExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdT
dG9yZS5jcHAKQEAgLTEzNiw2ICsxMzYsNjkgQEAgdm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OnJlbW92ZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNoYW5nZUFib3J0KE1lbW9yeU9iamVjdFMKICAg
ICBtX29iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIoKSk7
CiB9CiAKKworSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQor
eworICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUiKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworCisg
ICAgTWVtb3J5T2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgUkVMRUFTRV9BU1NFUlQob2JqZWN0U3RvcmUpOwor
CisgICAga2V5RXhpc3RzID0gb2JqZWN0U3RvcmUtPmNvbnRhaW5zUmVjb3JkKGtleURhdGEpOwor
ICAgIHJldHVybiBJREJFcnJvcigpOworfQorCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZVJlY29yZCIpOworCisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CisKKyAgICBNZW1vcnlPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5n
ZXQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChvYmplY3RTdG9y
ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rp
b25JZGVudGlmaWVyKSk7CisKKyAgICBvYmplY3RTdG9yZS0+ZGVsZXRlUmVjb3JkKGtleURhdGEp
OworICAgIHJldHVybiBJREJFcnJvcigpOworfQorCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5n
U3RvcmU6OnB1dFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUpCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkIik7CisKKyAg
ICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBpZiAoIXRy
YW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5r
bm93biwgV1RGOjpBU0NJSUxpdGVyYWwoIk5vIGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gZm91
bmQgdG8gZ2V0IHJlY29yZCIpKTsKKworICAgIE1lbW9yeU9iamVjdFN0b3JlKiBvYmplY3RTdG9y
ZSA9IG1fb2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmICgh
b2JqZWN0U3RvcmUpCisgICAgICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpV
bmtub3duLCBXVEY6OkFTQ0lJTGl0ZXJhbCgiTm8gYmFja2luZyBzdG9yZSBvYmplY3Qgc3RvcmUg
Zm91bmQgdG8gcHV0IHJlY29yZCIpKTsKKworICAgIG9iamVjdFN0b3JlLT5wdXRSZWNvcmQoKnRy
YW5zYWN0aW9uLCBrZXlEYXRhLCB2YWx1ZSk7CisgICAgcmV0dXJuIElEQkVycm9yKCk7Cit9CisK
K0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIFRocmVhZFNhZmVEYXRhQnVm
ZmVyJiBvdXRWYWx1ZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpnZXRSZWNvcmQiKTsKKworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwor
CisgICAgaWYgKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIp
KQorICAgICAgICByZXR1cm4gSURCRXJyb3IoSURCRXhjZXB0aW9uQ29kZTo6VW5rbm93biwgV1RG
OjpBU0NJSUxpdGVyYWwoIk5vIGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gZm91bmQgdG8gZ2V0
IHJlY29yZCIpKTsKKworICAgIE1lbW9yeU9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSA9IG1fb2Jq
ZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIGlmICghb2JqZWN0U3Rv
cmUpCisgICAgICAgIHJldHVybiBJREJFcnJvcihJREJFeGNlcHRpb25Db2RlOjpVbmtub3duLCBX
VEY6OkFTQ0lJTGl0ZXJhbCgiTm8gYmFja2luZyBzdG9yZSBvYmplY3Qgc3RvcmUgZm91bmQiKSk7
CisKKyAgICBvdXRWYWx1ZSA9IG9iamVjdFN0b3JlLT52YWx1ZUZvcktleShrZXlEYXRhKTsKKyAg
ICByZXR1cm4gSURCRXJyb3IoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRleCAy
Njk1OGZkLi40MzE4NzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBAIC01Myw2
ICs1MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJREJFcnJvciBhYm9ydFRyYW5zYWN0aW9u
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBvdmVy
cmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBvdmVycmlkZSBm
aW5hbDsKICAgICB2aXJ0dWFsIElEQkVycm9yIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RT
dG9yZUluZm8mKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0
c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0
YSYsIGJvb2wmIGtleUV4aXN0cykgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBJREJFcnJv
ciBkZWxldGVSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0
YSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3IgcHV0UmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciYgdmFsdWUpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgSURCRXJyb3Ig
Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBU
aHJlYWRTYWZlRGF0YUJ1ZmZlciYgb3V0VmFsdWUpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdm9p
ZCByZW1vdmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9y
ZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCBkZmFjNzgwLi4xNDVjODllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZW1v
cnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1l
c3BhY2UgSURCU2VydmVyIHsKQEAgLTY0LDYgKzY1LDYxIEBAIHZvaWQgTWVtb3J5T2JqZWN0U3Rv
cmU6OndyaXRlVHJhbnNhY3Rpb25GaW5pc2hlZChNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlv
biYKICAgICBtX3dyaXRlVHJhbnNhY3Rpb24gPSBudWxscHRyOwogfQogCitib29sIE1lbW9yeU9i
amVjdFN0b3JlOjpjb250YWluc1JlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCit7CisgICAg
aWYgKCFtX2tleVZhbHVlU3RvcmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBtX2tleVZhbHVlU3RvcmUtPmNvbnRhaW5zKGtleSk7Cit9CisKK3ZvaWQgTWVtb3J5T2JqZWN0
U3RvcmU6OmRlbGV0ZVJlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXkpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIk1lbW9yeU9iamVjdFN0b3JlOjpkZWxldGVSZWNvcmQiKTsKKworICAgIEFTU0VS
VChtX3dyaXRlVHJhbnNhY3Rpb24pOworICAgIG1fd3JpdGVUcmFuc2FjdGlvbi0+cmVjb3JkVmFs
dWVDaGFuZ2VkKCp0aGlzLCBrZXkpOworCisgICAgaWYgKCFtX2tleVZhbHVlU3RvcmUpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fa2V5VmFsdWVTdG9yZS0+cmVtb3ZlKGtleSk7CisgICAgaWYg
KG1fb3JkZXJlZEtleXMpCisgICAgICAgIG1fb3JkZXJlZEtleXMtPmVyYXNlKGtleSk7Cit9CisK
K3ZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OnB1dFJlY29yZChNZW1vcnlCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRo
cmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5
T2JqZWN0U3RvcmU6OnB1dFJlY29yZCIpOworCisgICAgQVNTRVJUKG1fd3JpdGVUcmFuc2FjdGlv
bik7CisgICAgQVNTRVJUX1VOVVNFRCh0cmFuc2FjdGlvbiwgbV93cml0ZVRyYW5zYWN0aW9uID09
ICZ0cmFuc2FjdGlvbik7CisKKyAgICBtX3dyaXRlVHJhbnNhY3Rpb24tPnJlY29yZFZhbHVlQ2hh
bmdlZCgqdGhpcywga2V5RGF0YSk7CisKKyAgICBzZXRLZXlWYWx1ZShrZXlEYXRhLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgTWVtb3J5T2JqZWN0U3RvcmU6OnNldEtleVZhbHVlKGNvbnN0IElEQktleURh
dGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSkKK3sKKyAgICBp
ZiAoIW1fa2V5VmFsdWVTdG9yZSkKKyAgICAgICAgbV9rZXlWYWx1ZVN0b3JlID0gc3RkOjptYWtl
X3VuaXF1ZTxLZXlWYWx1ZU1hcD4oKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9rZXlWYWx1ZVN0
b3JlLT5zZXQoa2V5RGF0YSwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSAmJiBt
X29yZGVyZWRLZXlzKQorICAgICAgICBtX29yZGVyZWRLZXlzLT5pbnNlcnQoa2V5RGF0YSk7Cit9
CisKK1RocmVhZFNhZmVEYXRhQnVmZmVyIE1lbW9yeU9iamVjdFN0b3JlOjp2YWx1ZUZvcktleShj
b25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKSBjb25zdAoreworICAgIExPRyhJbmRleGVkREIsICJN
ZW1vcnlPYmplY3RTdG9yZTo6dmFsdWVGb3JLZXkiKTsKKworICAgIGlmICghbV9rZXlWYWx1ZVN0
b3JlKQorICAgICAgICByZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIoKTsKKworICAgIHJldHVy
biBtX2tleVZhbHVlU3RvcmUtPmdldChrZXlEYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURC
U2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgKaW5k
ZXggMzFlMmU0ZC4uYzI0NmFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmgKQEAgLTI4LDEzICsy
OCwyMiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJL
ZXlEYXRhLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbmZvLmgiCisjaW5jbHVkZSAiVGhy
ZWFkU2FmZURhdGFCdWZmZXIuaCIKKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXlEYXRhOworCiBuYW1l
c3BhY2UgSURCU2VydmVyIHsKIAogY2xhc3MgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb247
CiAKK3R5cGVkZWYgSGFzaE1hcDxJREJLZXlEYXRhLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciwgSURC
S2V5RGF0YUhhc2gsIElEQktleURhdGFIYXNoVHJhaXRzPiBLZXlWYWx1ZU1hcDsKKwogY2xhc3Mg
TWVtb3J5T2JqZWN0U3RvcmUgewogICAgIGZyaWVuZCBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5T2Jq
ZWN0U3RvcmU+IHN0ZDo6bWFrZV91bmlxdWU8TWVtb3J5T2JqZWN0U3RvcmU+KGNvbnN0IFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlSW5mbyYpOwogcHVibGljOgpAQCAtNDUsNiArNTQsMTQgQEAgcHVi
bGljOgogICAgIHZvaWQgd3JpdGVUcmFuc2FjdGlvblN0YXJ0ZWQoTWVtb3J5QmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIHdyaXRlVHJhbnNhY3Rpb25GaW5pc2hlZChNZW1vcnlC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbiYpOwogCisgICAgYm9vbCBjb250YWluc1JlY29yZChjb25z
dCBJREJLZXlEYXRhJik7CisgICAgdm9pZCBkZWxldGVSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYp
OworICAgIHZvaWQgcHV0UmVjb3JkKE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uJiwgY29u
c3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSk7CisKKyAg
ICB2b2lkIHNldEtleVZhbHVlKGNvbnN0IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgdmFsdWUpOworCisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgdmFsdWVGb3JLZXko
Y29uc3QgSURCS2V5RGF0YSYpIGNvbnN0OworCiAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZv
JiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKIHByaXZhdGU6CkBAIC01Myw2ICs3
MCw5IEBAIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvIG1faW5mbzsKIAogICAgIE1l
bW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKiBtX3dyaXRlVHJhbnNhY3Rpb24geyBudWxscHRy
IH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8S2V5VmFsdWVNYXA+IG1fa2V5VmFsdWVTdG9yZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpzZXQ8SURCS2V5RGF0YT4+IG1fb3JkZXJlZEtleXM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CmluZGV4IDU2MjM2ZDAuLjY4ZmY1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAt
MTM5LDYgKzEzOSwyMCBAQCB1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFj
ayhFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCit1
aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFjayhLZXlEYXRhQ2FsbGJhY2sg
Y2FsbGJhY2spCit7CisgICAgdWludDY0X3QgaWRlbnRpZmllciA9IGdlbmVyYXRlVW5pcXVlQ2Fs
bGJhY2tJZGVudGlmaWVyKCk7CisgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLnNldChpZGVudGlmaWVy
LCBjYWxsYmFjayk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK3VpbnQ2NF90IFVuaXF1
ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKFZhbHVlRGF0YUNhbGxiYWNrIGNhbGxiYWNrKQor
eworICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRp
ZmllcigpOworICAgIG1fdmFsdWVEYXRhQ2FsbGJhY2tzLnNldChpZGVudGlmaWVyLCBjYWxsYmFj
ayk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
KG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiIp
OwpAQCAtMjUxLDYgKzI2NSwxMDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBwZXJm
b3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZl
ciYgdmFsdWVEYXRhLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3Jp
dGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
dXRPckFkZCIpOworCisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2soY2Fs
bGJhY2spOworICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJ
RCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVj
dFN0b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZURhdGEsIG92ZXJ3cml0ZU1vZGUpKTsK
K30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkIik7CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUpOworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOworCisgICAgSURCS2V5RGF0
YSB1c2VkS2V5OworICAgIElEQkVycm9yIGVycm9yOworCisgICAgYXV0byBvYmplY3RTdG9yZUlu
Zm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKKyAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgeworICAgICAgICBlcnJv
ciA9IElEQkVycm9yKElEQkV4Y2VwdGlvbkNvZGU6OkludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxp
dGVyYWwoIk9iamVjdCBzdG9yZSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGJhY2tpbmcgc3RvcmUi
KSk7CisgICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYgIWtleURh
dGEuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIGdlbmVyYXRl
ZCBrZXkgc3VwcG9ydCBnb2VzCisgICAgICAgIGVycm9yID0gSURCRXJyb3IoSURCRXhjZXB0aW9u
Q29kZTo6VW5rbm93biwgQVNDSUlMaXRlcmFsKCJLZXkgZ2VuZXJhdG9ycyBub3Qgc3VwcG9ydGVk
IHlldCIpKTsKKyAgICAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHVzZWRLZXkgPSBrZXlEYXRhOworCisgICAgaWYgKG92ZXJ3cml0ZU1v
ZGUgPT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlKSB7
CisgICAgICAgIGJvb2wga2V5RXhpc3RzOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCB1c2VkS2V5LCBrZXlFeGlzdHMpOworICAgICAgICBpZiAoZXJyb3IuaXNO
dWxsKCkgJiYga2V5RXhpc3RzKQorICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJREJFeGNl
cHRpb25Db2RlOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiS2V5IGFscmVhZHkgZXhp
c3RzIGluIHRoZSBvYmplY3Qgc3RvcmUiKSk7CisKKyAgICAgICAgaWYgKCFlcnJvci5pc051bGwo
KSkgeworICAgICAgICAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBTdG9y
YWdlIE9wZXJhdGlvbgorICAgIC8vIC4uLklmIGEgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGluIHN0
b3JlIC4uLgorICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBzdG9yZSB1c2luZyB0
aGUgc3RlcHMgZm9yIGRlbGV0aW5nIHJlY29yZHMgZnJvbSBhbiBvYmplY3Qgc3RvcmUuLi4KKyAg
ICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0aW5nIGl0IGZyb20g
ZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRoZSBhcHByb3ByaWF0
ZSBpbmRleGVzLgorICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJlY29yZCh0cmFu
c2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgdXNlZEtleSk7CisgICAg
aWYgKCFlcnJvci5pc051bGwoKSkgeworICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cHV0
UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2Vk
S2V5LCB2YWx1ZURhdGEpOworCisgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKK30KKwordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiByZXN1
bHRLZXkpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBMT0coSW5kZXhlZERC
LCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQiKTsKKworICAg
IHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0
S2V5KTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgVmFsdWVE
YXRhQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsK
KworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrKGNhbGxiYWNrKTsKKyAg
ICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCksIGtleURhdGEpKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCit7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1HZXRSZWNvcmQiKTsKKworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAg
QVNTRVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisKKyAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZl
ciB2YWx1ZURhdGE7CisgICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVj
b3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlEYXRh
LCB2YWx1ZURhdGEpOworCisgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0
UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB2YWx1ZURhdGEpKTsKK30KKwordm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgVGhyZWFkU2FmZURhdGFC
dWZmZXImIHJlc3VsdERhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVj
b3JkIik7CisKKyAgICBwZXJmb3JtVmFsdWVEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvciwgcmVzdWx0RGF0YSk7Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1p
dFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBF
cnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBA
IC0zODAsNiArNDk2LDIwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNh
bGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBjYWxsYmFjayhl
cnJvcik7CiB9CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJh
Y2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNv
bnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9rZXlE
YXRhQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoY2FsbGJh
Y2spOworICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHRLZXkpOworfQorCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtVmFsdWVEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVy
JiByZXN1bHREYXRhKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3ZhbHVlRGF0YUNhbGxiYWNr
cy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CisgICAgQVNTRVJUKGNhbGxiYWNrKTsKKyAgICBj
YWxsYmFjayhlcnJvciwgcmVzdWx0RGF0YSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZl
cgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDc5
MGRiMWUuLjJiMzkwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VJbmZvLmgiCiAjaW5jbHVkZSAiSURCU2VydmVyT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiVGhy
ZWFkU2FmZURhdGFCdWZmZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24uaCIKQEAgLTUyLDYgKzUzLDggQEAgY2xhc3MgSURCQ29ubmVjdGlvblRvQ2xpZW50
OwogY2xhc3MgSURCU2VydmVyOwogCiB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBJ
REJFcnJvciYpPiBFcnJvckNhbGxiYWNrOwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgSURCRXJyb3ImLCBjb25zdCBJREJLZXlEYXRhJik+IEtleURhdGFDYWxsYmFjazsKK3R5cGVk
ZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IElEQkVycm9yJiwgY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImKT4gVmFsdWVEYXRhQ2FsbGJhY2s7CiAKIGNsYXNzIFVuaXF1ZUlEQkRhdGFiYXNl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFVuaXF1ZUlEQkRhdGFiYXNlPiB7CiBwdWJs
aWM6CkBAIC02Niw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICBJREJTZXJ2ZXImIHNlcnZlcigpIHsg
cmV0dXJuIG1fc2VydmVyOyB9CiAKICAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBFcnJvckNh
bGxiYWNrKTsKKyAgICB2b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3Qg
SURCS2V5RGF0YSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOworICAgIHZv
aWQgZ2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIFZh
bHVlRGF0YUNhbGxiYWNrKTsKICAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNrKTsKICAgICB2b2lkIGFib3J0VHJhbnNh
Y3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIEVycm9yQ2FsbGJhY2spOwogICAg
IHZvaWQgdHJhbnNhY3Rpb25EZXN0cm95ZWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYp
OwpAQCAtODEsMjIgKzg2LDMwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbigpOwogICAgIHZvaWQgbm90aWZ5Q29ubmVjdGlvbnNPZlZlcnNpb25DaGFu
Z2UoKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2soRXJyb3JDYWxsYmFjayk7Ci0gICAg
CiAgICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIG9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgdm9pZCBwZXJmb3JtQ29t
bWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3Jt
QWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2lu
VHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKICAg
ICB2b2lkIHBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1QdXRPckFkZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IElEQktleURhdGEmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSk7CisgICAgdm9pZCBwZXJmb3JtR2V0UmVj
b3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5RGF0YSYpOwogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAg
ICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYpOwogICAg
IHZvaWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICB2
b2lkIGRpZFBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiwgY29uc3QgSURCS2V5RGF0YSYpOworICAgIHZvaWQgZGlkUGVyZm9ybUdldFJl
Y29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3Qg
VGhyZWFkU2FmZURhdGFCdWZmZXImKTsKICAgICB2b2lkIGRpZFBlcmZvcm1Db21taXRUcmFuc2Fj
dGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJik7CiAgICAg
dm9pZCBkaWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwogCisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFjayhFcnJvckNhbGxi
YWNrKTsKKyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrKEtleURhdGFDYWxsYmFjayk7CisgICAg
dWludDY0X3Qgc3RvcmVDYWxsYmFjayhWYWx1ZURhdGFDYWxsYmFjayk7CisKICAgICB2b2lkIHBl
cmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
RXJyb3ImKTsKKyAgICB2b2lkIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQktleURhdGEmKTsKKyAgICB2
b2lkIHBlcmZvcm1WYWx1ZURhdGFDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImKTsKIAogICAgIHZv
aWQgaW52b2tlVHJhbnNhY3Rpb25TY2hlZHVsZXIoKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uU2No
ZWR1bGluZ1RpbWVyRmlyZWQoKTsKQEAgLTExNyw2ICsxMzAsOCBAQCBwcml2YXRlOgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IG1fZGF0YWJhc2VJbmZvOwogCiAgICAgSGFz
aE1hcDx1aW50NjRfdCwgRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrczsKKyAgICBIYXNo
TWFwPHVpbnQ2NF90LCBLZXlEYXRhQ2FsbGJhY2s+IG1fa2V5RGF0YUNhbGxiYWNrczsKKyAgICBI
YXNoTWFwPHVpbnQ2NF90LCBWYWx1ZURhdGFDYWxsYmFjaz4gbV92YWx1ZURhdGFDYWxsYmFja3M7
CiAKICAgICBUaW1lciBtX3RyYW5zYWN0aW9uU2NoZWR1bGluZ1RpbWVyOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCA4OWMyYTZjLi5jYmY2
YTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwCkBA
IC04MCw2ICs4MCwxMSBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmlzVmVy
c2lvbkNoYW5nZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25JbmZvLm1vZGUoKSA9
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZTsKIH0KIAorYm9vbCBV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90cmFuc2FjdGlvbkluZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlOjpSZWFkT25seTsKK30gICAKKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
Ojpjb21taXQoKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpjb21taXQiKTsKQEAgLTEwOCw2ICsxMTMsNDEgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYg
cmVxdWUKICAgICB9KTsKIH0KIAordm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpw
dXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURh
dGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4
ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkIik7CisK
KyAgICBBU1NFUlQoIWlzUmVhZE9ubHkoKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZv
LmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CisK
KyAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gc2VsZih0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5wdXRPckFkZChyZXF1ZXN0RGF0YSwg
a2V5RGF0YSwgdmFsdWVEYXRhLCBvdmVyd3JpdGVNb2RlLCBbdGhpcywgc2VsZiwgcmVxdWVzdERh
dGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7CisgICAg
ICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFk
ZCAoY2FsbGJhY2spIik7CisKKyAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICAg
ICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmNvbm5lY3Rpb25Ub0NsaWVudCgpLmRpZFB1dE9yQWRk
KElEQlJlc3VsdERhdGE6OnB1dE9yQWRkU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRp
ZmllcigpLCBrZXkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmNvbm5lY3Rpb25Ub0NsaWVudCgpLmRpZFB1dE9yQWRkKElEQlJlc3VsdERhdGE6OmVy
cm9yKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIGVycm9yKSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVj
b3JkIik7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKKworICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uPiBzZWxmKHRoaXMpOworICAgIG1fZGF0YWJhc2VDb25uZWN0
aW9uLT5kYXRhYmFzZSgpLmdldFJlY29yZChyZXF1ZXN0RGF0YSwga2V5RGF0YSwgW3RoaXMsIHNl
bGYsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IFRocmVhZFNhZmVE
YXRhQnVmZmVyJiB2YWx1ZURhdGEpIHsKKyAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCAoY2FsbGJhY2spIik7CisKKyAgICAgICAg
aWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmNv
bm5lY3Rpb25Ub0NsaWVudCgpLmRpZEdldFJlY29yZChJREJSZXN1bHREYXRhOjpnZXRSZWNvcmRT
dWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIHZhbHVlRGF0YSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRv
Q2xpZW50KCkuZGlkR2V0UmVjb3JkKElEQlJlc3VsdERhdGE6OmVycm9yKHJlcXVlc3REYXRhLnJl
cXVlc3RJZGVudGlmaWVyKCksIGVycm9yKSk7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IElEQlNlcnZlcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24uaAppbmRleCAxZjMzODNkLi5hOGU2NDNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmgKQEAgLTM2LDggKzM2LDEwIEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkRhdGFiYXNlSW5mbzsKK2NsYXNzIElEQktl
eURhdGE7CiBjbGFzcyBJREJPYmplY3RTdG9yZUluZm87CiBjbGFzcyBJREJSZXF1ZXN0RGF0YTsK
K2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIApA
QCAtNTIsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
JiBkYXRhYmFzZUNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2RhdGFiYXNlQ29ubmVjdGlvbi5nZXQo
KTsgfQogICAgIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNhY3Rpb25JbmZvOyB9CiAgICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdDsK
KyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdDsKIAogICAgIElEQkRhdGFiYXNlSW5mbyogb3Jp
Z2luYWxEYXRhYmFzZUluZm8oKSBjb25zdDsKIApAQCAtNTksNiArNjIsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjb21taXQoKTsKIAogICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVxdWVzdERhdGEmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICB2b2lkIHB1dE9y
QWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IFRocmVh
ZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlKTsKKyAgICB2b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQktleURhdGEmKTsKIAogcHJpdmF0ZToKICAgICBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uKFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYsIElEQlRyYW5zYWN0aW9uSW5mbyYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRh
dGFiYXNlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCRGF0YWJhc2VJbmZvLmNwcAppbmRleCA2Mzg4MTdlLi41ZGRiMmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJh
c2VJbmZvLmNwcApAQCAtNzcsNiArNzcsMTUgQEAgdm9pZCBJREJEYXRhYmFzZUluZm86OmFkZEV4
aXN0aW5nT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQogICAgIG1f
b2JqZWN0U3RvcmVNYXAuc2V0KGluZm8uaWRlbnRpZmllcigpLCBpbmZvKTsKIH0KIAorY29uc3Qg
SURCT2JqZWN0U3RvcmVJbmZvKiBJREJEYXRhYmFzZUluZm86OmluZm9Gb3JFeGlzdGluZ09iamVj
dFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgY29uc3QKK3sKKyAgICBhdXRv
IGl0ZXJhdG9yID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CisgICAgaWYgKGl0ZXJhdG9yID09IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKIFZlY3Rv
cjxTdHJpbmc+IElEQkRhdGFiYXNlSW5mbzo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAg
ICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKaW5kZXggNDBmNTM5NC4u
MGRmOWUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkRhdGFiYXNlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIElE
Qk9iamVjdFN0b3JlSW5mbyBjcmVhdGVOZXdPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwogICAgIHZvaWQgYWRkRXhp
c3RpbmdPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKKyAgICBjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllcikgY29uc3Q7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RT
dG9yZU5hbWVzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCmluZGV4IDIyODhjZTguLjQ1MmE0NzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9y
LmNwcApAQCAtNTEsNiArNTEsMjIgQEAgc3RhdGljIGNvbnN0IFN0cmluZyYgaWRiRXJyb3JOYW1l
KElEQkV4Y2VwdGlvbkNvZGUgY29kZSkKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIkludmFsaWRTdGF0ZUVycm9yIik7CiAgICAgICAg
IHJldHVybiBlbnRyeTsKICAgICB9CisgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpEYXRhRXJy
b3I6IHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJ
SUxpdGVyYWwoIkRhdGFFcnJvciIpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQorICAg
IGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOiB7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJU
cmFuc2FjdGlvbkluYWN0aXZlRXJyb3IiKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0K
KyAgICBjYXNlIElEQkV4Y2VwdGlvbkNvZGU6OlJlYWRPbmx5RXJyb3I6IHsKKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVyYWwoIlJlYWRPbmx5
RXJyb3IiKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICBjYXNlIElEQkV4Y2Vw
dGlvbkNvZGU6OkRhdGFDbG9uZUVycm9yOiB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJEYXRhQ2xvbmVFcnJvciIpOworICAgICAg
ICByZXR1cm4gZW50cnk7CisgICAgfQogICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6Tm9uZToK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC03Nyw2ICs5
MywyMiBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiBpZGJFcnJvckRlc2NyaXB0aW9uKElEQkV4Y2Vw
dGlvbkNvZGUgY29kZSkKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50
cnkgPSBBU0NJSUxpdGVyYWwoIk9wZXJhdGlvbiB3YXMgY2FsbGVkIG9uIGFuIG9iamVjdCBvbiB3
aGljaCBpdCBpcyBub3QgYWxsb3dlZCBvciBhdCBhIHRpbWUgd2hlbiBpdCBpcyBub3QgYWxsb3dl
ZC4iKTsKICAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgIH0KKyAgICBjYXNlIElEQkV4Y2VwdGlv
bkNvZGU6OkRhdGFFcnJvcjogeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBlbnRyeSA9IEFTQ0lJTGl0ZXJhbCgiRGF0YSBwcm92aWRlZCB0byBhbiBvcGVyYXRpb24gZG9l
cyBub3QgbWVldCByZXF1aXJlbWVudHMuIik7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9
CisgICAgY2FzZSBJREJFeGNlcHRpb25Db2RlOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IHsK
KyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZW50cnkgPSBBU0NJSUxpdGVy
YWwoIlJlcXVlc3Qgd2FzIHBsYWNlZCBhZ2FpbnN0IGEgdHJhbnNhY3Rpb24gd2hpY2ggaXMgY3Vy
cmVudGx5IG5vdCBhY3RpdmUsIG9yIHdoaWNoIGlzIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1
cm4gZW50cnk7CisgICAgfQorICAgIGNhc2UgSURCRXhjZXB0aW9uQ29kZTo6UmVhZE9ubHlFcnJv
cjogeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBlbnRyeSA9IEFTQ0lJ
TGl0ZXJhbCgiQSBtdXRhdGluZyBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBpbiBhIFwicmVhZG9u
bHlcIiB0cmFuc2FjdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICBj
YXNlIElEQkV4Y2VwdGlvbkNvZGU6OkRhdGFDbG9uZUVycm9yOiB7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGVudHJ5ID0gQVNDSUlMaXRlcmFsKCJEYXRhIGJlaW5nIHN0
b3JlZCBjb3VsZCBub3QgYmUgY2xvbmVkIGJ5IHRoZSBzdHJ1Y3R1cmVkIGNsb25pbmcgYWxnb3Jp
dGhtLiIpOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAgfQogICAgIGNhc2UgSURCRXhjZXB0
aW9uQ29kZTo6Tm9uZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCRXJyb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJF
cnJvci5oCmluZGV4IGI5MTk2MzYuLjJlNzRmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCkBAIC0zNiwxMCArMzYsMTQgQEAg
ZW51bSBjbGFzcyBJREJFeGNlcHRpb25Db2RlIHsKICAgICBOb25lID0gMCwKICAgICBVbmtub3du
LAogICAgIENvbnN0cmFpbnRFcnJvciwKKyAgICBEYXRhRXJyb3IsCisgICAgVHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yLAorICAgIFJlYWRPbmx5RXJyb3IsCiAgICAgVmVyc2lvbkVycm9yLAogCiAg
ICAgLy8gSW5kZXhlZCBEQiBleGlzdGluZyBleGNlcHRpb24gY29kZXMgd2l0aCBJREItc3BlY2lm
aWMgZXJyb3IgbWVzc2FnZXM6CiAgICAgSW52YWxpZFN0YXRlRXJyb3IsCisgICAgRGF0YUNsb25l
RXJyb3IsCiB9OwogCiBjbGFzcyBJREJFcnJvciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcAppbmRleCA5
MzI1MmNiLi41YTNkOWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAKQEAgLTM0LDIwICszNCwyNSBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEo
Y29uc3QgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0
IElEQkNsaWVudDo6SURCT3BlbkRCUmVxdWVzdCYgcmVxdWVzdCkKLSAgICA6IG1fcmVxdWVzdElk
ZW50aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxJREJSZXNvdXJjZUlkZW50aWZpZXI+KGNvbm5lY3Rp
b24sIHJlcXVlc3QpKQorICAgIDogbV9zZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcihjb25uZWN0
aW9uLmlkZW50aWZpZXIoKSkKKyAgICAsIG1fcmVxdWVzdElkZW50aWZpZXIoc3RkOjptYWtlX3Vu
aXF1ZTxJREJSZXNvdXJjZUlkZW50aWZpZXI+KGNvbm5lY3Rpb24sIHJlcXVlc3QpKQogICAgICwg
bV9kYXRhYmFzZUlkZW50aWZpZXIocmVxdWVzdC5kYXRhYmFzZUlkZW50aWZpZXIoKSkKICAgICAs
IG1fcmVxdWVzdGVkVmVyc2lvbihyZXF1ZXN0LnZlcnNpb24oKSkKIHsKIH0KIAogSURCUmVxdWVz
dERhdGE6OklEQlJlcXVlc3REYXRhKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9w
ZXJhdGlvbikKLSAgICA6IG1fcmVxdWVzdElkZW50aWZpZXIoc3RkOjptYWtlX3VuaXF1ZTxJREJS
ZXNvdXJjZUlkZW50aWZpZXI+KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKQorICAgIDogbV9zZXJ2
ZXJDb25uZWN0aW9uSWRlbnRpZmllcihvcGVyYXRpb24udHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5pZGVudGlmaWVyKCkpCisgICAgLCBtX3JlcXVlc3RJZGVudGlm
aWVyKHN0ZDo6bWFrZV91bmlxdWU8SURCUmVzb3VyY2VJZGVudGlmaWVyPihvcGVyYXRpb24uaWRl
bnRpZmllcigpKSkKICAgICAsIG1fdHJhbnNhY3Rpb25JZGVudGlmaWVyKHN0ZDo6bWFrZV91bmlx
dWU8SURCUmVzb3VyY2VJZGVudGlmaWVyPihvcGVyYXRpb24udHJhbnNhY3Rpb25JZGVudGlmaWVy
KCkpKQorICAgICwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIob3BlcmF0aW9uLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpKQogewogfQogCiBJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoY29u
c3QgSURCUmVxdWVzdERhdGEmIG90aGVyKQotICAgIDogbV9kYXRhYmFzZUlkZW50aWZpZXIob3Ro
ZXIubV9kYXRhYmFzZUlkZW50aWZpZXIpCisgICAgOiBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlm
aWVyKG90aGVyLm1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpCisgICAgLCBtX29iamVjdFN0
b3JlSWRlbnRpZmllcihvdGhlci5tX29iamVjdFN0b3JlSWRlbnRpZmllcikKKyAgICAsIG1fZGF0
YWJhc2VJZGVudGlmaWVyKG90aGVyLm1fZGF0YWJhc2VJZGVudGlmaWVyKQogICAgICwgbV9yZXF1
ZXN0ZWRWZXJzaW9uKG90aGVyLm1fcmVxdWVzdGVkVmVyc2lvbikKIHsKICAgICBpZiAob3RoZXIu
bV9yZXF1ZXN0SWRlbnRpZmllcikKQEAgLTU2LDYgKzYxLDEyIEBAIElEQlJlcXVlc3REYXRhOjpJ
REJSZXF1ZXN0RGF0YShjb25zdCBJREJSZXF1ZXN0RGF0YSYgb3RoZXIpCiAgICAgICAgIG1fdHJh
bnNhY3Rpb25JZGVudGlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxJREJSZXNvdXJjZUlkZW50aWZp
ZXI+KCpvdGhlci5tX3RyYW5zYWN0aW9uSWRlbnRpZmllcik7CiB9CiAKK3VpbnQ2NF90IElEQlJl
cXVlc3REYXRhOjpzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpOworICAgIHJldHVybiBtX3NlcnZlckNv
bm5lY3Rpb25JZGVudGlmaWVyOworfQorCiBJREJSZXNvdXJjZUlkZW50aWZpZXIgSURCUmVxdWVz
dERhdGE6OnJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVCht
X3JlcXVlc3RJZGVudGlmaWVyKTsKQEAgLTY4LDYgKzc5LDEyIEBAIElEQlJlc291cmNlSWRlbnRp
ZmllciBJREJSZXF1ZXN0RGF0YTo6dHJhbnNhY3Rpb25JZGVudGlmaWVyKCkgY29uc3QKICAgICBy
ZXR1cm4gKm1fdHJhbnNhY3Rpb25JZGVudGlmaWVyOwogfQogCit1aW50NjRfdCBJREJSZXF1ZXN0
RGF0YTo6b2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChtX29iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZGVu
dGlmaWVyOworfQorCiB1aW50NjRfdCBJREJSZXF1ZXN0RGF0YTo6cmVxdWVzdGVkVmVyc2lvbigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVxdWVzdGVkVmVyc2lvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgK
aW5kZXggNDE2ZmQ1ZC4uYjhiNGEyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgKQEAgLTQ2LDggKzQ2LDEw
IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBJREJSZXF1ZXN0RGF0YShJREJDbGllbnQ6OlRyYW5z
YWN0aW9uT3BlcmF0aW9uJik7CiAgICAgSURCUmVxdWVzdERhdGEoY29uc3QgSURCUmVxdWVzdERh
dGEmKTsKIAorICAgIHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3Q7
CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIHJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3Q7CiAg
ICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIHRyYW5zYWN0aW9uSWRlbnRpZmllcigpIGNvbnN0Owor
ICAgIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcigpIGNvbnN0OwogCiAgICAgY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBtX2RhdGFiYXNlSWRlbnRpZmllcjsgfQogICAgIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24o
KSBjb25zdDsKQEAgLTU1LDggKzU3LDEwIEBAIHB1YmxpYzoKICAgICBJREJSZXF1ZXN0RGF0YSBp
c29sYXRlZENvcHkoKTsKIAogcHJpdmF0ZToKKyAgICB1aW50NjRfdCBtX3NlcnZlckNvbm5lY3Rp
b25JZGVudGlmaWVyIHsgMCB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJSZXNvdXJjZUlkZW50
aWZpZXI+IG1fcmVxdWVzdElkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQlJlc291
cmNlSWRlbnRpZmllcj4gbV90cmFuc2FjdGlvbklkZW50aWZpZXI7CisgICAgdWludDY0X3QgbV9v
YmplY3RTdG9yZUlkZW50aWZpZXIgeyAwIH07CiAKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIg
bV9kYXRhYmFzZUlkZW50aWZpZXI7CiAgICAgdWludDY0X3QgbV9yZXF1ZXN0ZWRWZXJzaW9uIHsg
MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlJlc3VsdERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlJlc3VsdERhdGEuY3BwCmluZGV4IDY1MDcxZDguLjhkY2I3NDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0
RGF0YS5jcHAKQEAgLTUwLDExICs1MCwxNCBAQCBJREJSZXN1bHREYXRhOjpJREJSZXN1bHREYXRh
KGNvbnN0IElEQlJlc3VsdERhdGEmIG90aGVyKQogICAgICwgbV9yZXF1ZXN0SWRlbnRpZmllcihv
dGhlci5tX3JlcXVlc3RJZGVudGlmaWVyKQogICAgICwgbV9lcnJvcihvdGhlci5tX2Vycm9yKQog
ICAgICwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKG90aGVyLm1fZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllcikKKyAgICAsIG1fcmVzdWx0RGF0YShvdGhlci5tX3Jlc3VsdERhdGEp
CiB7CiAgICAgaWYgKG90aGVyLm1fZGF0YWJhc2VJbmZvKQogICAgICAgICBtX2RhdGFiYXNlSW5m
byA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPigqb3RoZXIubV9kYXRhYmFzZUlu
Zm8pOwogICAgIGlmIChvdGhlci5tX3RyYW5zYWN0aW9uSW5mbykKICAgICAgICAgbV90cmFuc2Fj
dGlvbkluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElEQlRyYW5zYWN0aW9uSW5mbz4oKm90aGVyLm1f
dHJhbnNhY3Rpb25JbmZvKTsKKyAgICBpZiAob3RoZXIubV9yZXN1bHRLZXkpCisgICAgICAgIG1f
cmVzdWx0S2V5ID0gc3RkOjptYWtlX3VuaXF1ZTxJREJLZXlEYXRhPigqb3RoZXIubV9yZXN1bHRL
ZXkpOwogfQogCiBJREJSZXN1bHREYXRhIElEQlJlc3VsdERhdGE6OmVycm9yKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJv
cikKQEAgLTkwLDYgKzkzLDIwIEBAIElEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6Y3JlYXRl
T2JqZWN0U3RvcmVTdWNjZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllCiAgICAgcmV0dXJu
IHsgSURCUmVzdWx0VHlwZTo6Q3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzLCByZXF1ZXN0SWRlbnRp
ZmllciB9OwogfQogCitJREJSZXN1bHREYXRhIElEQlJlc3VsdERhdGE6OnB1dE9yQWRkU3VjY2Vz
cyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlEYXRhJiByZXN1bHRLZXkpCit7CisgICAgSURCUmVzdWx0RGF0YSByZXN1bHQoSURCUmVz
dWx0VHlwZTo6UHV0T3JBZGRTdWNjZXNzLCByZXF1ZXN0SWRlbnRpZmllcik7CisgICAgcmVzdWx0
Lm1fcmVzdWx0S2V5ID0gc3RkOjptYWtlX3VuaXF1ZTxJREJLZXlEYXRhPihyZXN1bHRLZXkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0lEQlJlc3VsdERhdGEgSURCUmVzdWx0RGF0YTo6Z2V0
UmVjb3JkU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlm
aWVyLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQoreworICAgIElEQlJl
c3VsdERhdGEgcmVzdWx0KElEQlJlc3VsdFR5cGU6OkdldFJlY29yZFN1Y2Nlc3MsIHJlcXVlc3RJ
ZGVudGlmaWVyKTsKKyAgICByZXN1bHQubV9yZXN1bHREYXRhID0gdmFsdWVEYXRhOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgSURCUmVzdWx0RGF0YTo6
ZGF0YWJhc2VJbmZvKCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RhdGFiYXNlSW5m
byk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCUmVzdWx0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlJlc3VsdERhdGEuaAppbmRleCAyYWU3MWQzLi44ZjI5M2M5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmgK
QEAgLTMwLDMxICszMCwzOCBAQAogCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VJbmZvLmgiCiAjaW5j
bHVkZSAiSURCRXJyb3IuaCIKKyNpbmNsdWRlICJJREJLZXlEYXRhLmgiCiAjaW5jbHVkZSAiSURC
UmVzb3VyY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbmZvLmgiCisj
aW5jbHVkZSAiVGhyZWFkU2FmZURhdGFCdWZmZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJREJSZXNvdXJjZUlkZW50aWZpZXI7Ci0KLW5hbWVzcGFjZSBJREJTZXJ2ZXIgewot
Y2xhc3MgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOwotY2xhc3MgVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbjsKLX0KK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBlbnVtIGNs
YXNzIElEQlJlc3VsdFR5cGUgewogICAgIEVycm9yLAogICAgIE9wZW5EYXRhYmFzZVN1Y2Nlc3Ms
CiAgICAgT3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZCwKICAgICBDcmVhdGVPYmplY3RTdG9yZVN1
Y2Nlc3MsCisgICAgUHV0T3JBZGRTdWNjZXNzLAorICAgIEdldFJlY29yZFN1Y2Nlc3MsCiB9Owog
CituYW1lc3BhY2UgSURCU2VydmVyIHsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb247Cit9CisKIGNsYXNzIElEQlJl
c3VsdERhdGEgewogcHVibGljOgogICAgIHN0YXRpYyBJREJSZXN1bHREYXRhIGVycm9yKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQkVycm9yJik7CiAgICAgc3RhdGljIElE
QlJlc3VsdERhdGEgb3BlbkRhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImLCBJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbiYpOwogICAgIHN0YXRp
YyBJREJSZXN1bHREYXRhIG9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiwgSURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7
CiAgICAgc3RhdGljIElEQlJlc3VsdERhdGEgY3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYpOworICAgIHN0YXRpYyBJREJSZXN1bHREYXRhIHB1dE9y
QWRkU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCBjb25zdCBJREJLZXlEYXRh
Jik7CisgICAgc3RhdGljIElEQlJlc3VsdERhdGEgZ2V0UmVjb3JkU3VjY2Vzcyhjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRh
KTsKIAogICAgIElEQlJlc3VsdERhdGEoY29uc3QgSURCUmVzdWx0RGF0YSYpOwogCkBAIC02Nyw2
ICs3NCw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBJREJEYXRhYmFzZUluZm8mIGRhdGFiYXNlSW5m
bygpIGNvbnN0OwogICAgIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgdHJhbnNhY3Rpb25JbmZv
KCkgY29uc3Q7CiAKKyAgICBjb25zdCBJREJLZXlEYXRhKiByZXN1bHRLZXkoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3VsdEtleS5nZXQoKTsgfQorICAgIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVy
JiByZXN1bHREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHREYXRhOyB9CisKIHByaXZhdGU6
CiAgICAgSURCUmVzdWx0RGF0YShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKTsKICAgICBJ
REJSZXN1bHREYXRhKElEQlJlc3VsdFR5cGUsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYp
OwpAQCAtNzgsNiArODgsOCBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllciB7IDAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJ
bmZvPiBtX2RhdGFiYXNlSW5mbzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCVHJhbnNhY3Rpb25J
bmZvPiBtX3RyYW5zYWN0aW9uSW5mbzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCS2V5RGF0YT4g
bV9yZXN1bHRLZXk7CisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXIgbV9yZXN1bHREYXRhOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRl
eCBiYTNiNjBjLi44YjYwNmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCisjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgogI2lu
Y2x1ZGUgIklEQk9wZW5EQlJlcXVlc3RJbXBsLmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdERhdGEu
aCIKICNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCkBAIC0xMjYsNiArMTI3LDIyIEBAIHZvaWQg
SW5Qcm9jZXNzSURCU2VydmVyOjpkaWRDcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXN1bHRE
YXRhJiByZXN1bHREYXRhKQogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6
ZGlkUHV0T3JBZGQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBSZWZQ
dHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIFJ1bkxvb3A6OmN1cnJlbnQo
KS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVzdWx0RGF0YV0geworICAgICAgICBtX2Nvbm5lY3Rp
b25Ub1NlcnZlci0+ZGlkUHV0T3JBZGQocmVzdWx0RGF0YSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
SW5Qcm9jZXNzSURCU2VydmVyOjpkaWRHZXRSZWNvcmQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVz
dWx0RGF0YSkKK3sKKyAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOwor
ICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgc2VsZiwgcmVzdWx0RGF0YV0g
eworICAgICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+ZGlkR2V0UmVjb3JkKHJlc3VsdERhdGEp
OworICAgIH0pOworfQorCiB2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6YWJvcnRUcmFuc2FjdGlv
bihJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlc291cmNlSWRlbnRpZmllcikKIHsKICAgICBSZWZQ
dHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOwpAQCAtMTUwLDYgKzE2NywyNyBAQCB2
b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlc3VsdERhdGEsIGNvbgogICAgIH0pOwogfQogCit2b2lkIEluUHJvY2Vzc0lEQlNl
cnZlcjo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBJREJLZXkq
IGtleSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBSZWZQdHI8SW5Qcm9j
ZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIElEQktleURhdGEga2V5RGF0YShrZXkpOwor
ICAgIGF1dG8gdmFsdWVEYXRhID0gVGhyZWFkU2FmZURhdGFCdWZmZXI6OmNvcHlWZWN0b3IodmFs
dWUuZGF0YSgpKTsKKworICAgIFJ1bkxvb3A6OmN1cnJlbnQoKS5kaXNwYXRjaChbdGhpcywgc2Vs
ZiwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlRGF0YSwgb3ZlcndyaXRlTW9kZV0geworICAg
ICAgICBtX3NlcnZlci0+cHV0T3JBZGQocmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlRGF0YSwg
b3ZlcndyaXRlTW9kZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgSW5Qcm9jZXNzSURCU2VydmVyOjpn
ZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBJREJLZXkqIGtleSkK
K3sKKyAgICBSZWZQdHI8SW5Qcm9jZXNzSURCU2VydmVyPiBzZWxmKHRoaXMpOworICAgIElEQktl
eURhdGEga2V5RGF0YShrZXkpOworCisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0
aGlzLCBzZWxmLCByZXF1ZXN0RGF0YSwga2V5RGF0YV0geworICAgICAgICBtX3NlcnZlci0+Z2V0
UmVjb3JkKHJlcXVlc3REYXRhLCBrZXlEYXRhKTsKKyAgICB9KTsKK30KKwogdm9pZCBJblByb2Nl
c3NJREJTZXJ2ZXI6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoSURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24p
CiB7CiAgICAgUmVmUHRyPEluUHJvY2Vzc0lEQlNlcnZlcj4gc2VsZih0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJT
ZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nl
c3NJREJTZXJ2ZXIuaAppbmRleCA4NzM2NTU3Li5lZmMzMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNl
cnZlci5oCkBAIC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnRU
cmFuc2FjdGlvbihJREJSZXNvdXJjZUlkZW50aWZpZXImKSBvdmVycmlkZSBmaW5hbDsKICAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0VHJhbnNhY3Rpb24oSURCUmVzb3VyY2VJZGVudGlmaWVyJikgb3Zl
cnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJikgb3ZlcnJpZGUgZmluYWw7
CisgICAgdmlydHVhbCB2b2lkIHB1dE9yQWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgSURCS2V5
KiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBnZXRSZWNvcmQo
Y29uc3QgSURCUmVxdWVzdERhdGEmLCBJREJLZXkqKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0
dWFsIHZvaWQgZGF0YWJhc2VDb25uZWN0aW9uQ2xvc2VkKHVpbnQ2NF90IGRhdGFiYXNlQ29ubmVj
dGlvbklkZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8gSURCQ29ubmVjdGlvblRv
Q2xpZW50CkBAIC02OCw2ICs3MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWJv
cnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJikgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCB2b2lkIGRpZENyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc3VsdERhdGEmKSBv
dmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHV0T3JBZGQoY29uc3QgSURCUmVz
dWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRSZWNvcmQo
Y29uc3QgSURCUmVzdWx0RGF0YSYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBm
aXJlVmVyc2lvbkNoYW5nZUV2ZW50KElEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uJiwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikgb3ZlcnJpZGUgZmluYWw7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZl
cj46OnJlZigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggOTAwYjE1NC4uYzExYzU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE4MSw2ICsyMTgxLDgg
QEAKIAkJNTFEMEM1MTYwREFBOTBCNzAwM0IzODMxIC8qIEpTU3RvcmFnZUN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQwQzUxNTBEQUE5
MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTFENzIzNkMxQkI2
MTc0OTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzIzNkExQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJl
c3VsdERhdGEuY3BwICovOyB9OwogCQk1MUQ3MjM2RDFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVz
dWx0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFENzIzNkIxQkI2MEJGRTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEuaCAqLzsgfTsKKwkJNTFE
N0VGRUExQkRFOEY4QzAwRTkzRTEwIC8qIFRocmVhZFNhZmVEYXRhQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGQUVBOTFCREM5ODlBMDBC
NEFGRTQgLyogVGhyZWFkU2FmZURhdGFCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUQ3RUZFQzFCREVGQTUxMDBFOTNFMTAgLyogVHJh
bnNhY3Rpb25PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFEN0VGRUIxQkRFRkE0NzAwRTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0
aW9uLmNwcCAqLzsgfTsKIAkJNTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0
U2V0Um93TGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MURDRTgwMTBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dM
aXN0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNTFERjZEN0UwQjkyQTE2RDAwQzJEQzg1IC8qIFRocmVh
ZENoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MURGNkQ3RDBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFkQ2hlY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MURGNkQ4MDBCOTJBMThFMDBDMkRD
ODUgLyogVGhyZWFkQ2hlY2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MURGNkQ3RjBCOTJBMThFMDBDMkRDODUgLyogVGhyZWFkQ2hlY2subW0gKi87
IH07CkBAIC05MzQ1LDYgKzkzNDcsNyBAQAogCQk1MTFFRjJDQzE3RjBGREYxMDBFNEZBMTYgLyog
SlNJREJBbnlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJREJBbnlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFFRjJD
RDE3RjBGREYxMDBFNEZBMTYgLyogSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUYyQ0UxN0YwRkRGMTAwRTRGQTE2IC8qIEpTSURC
T2JqZWN0U3RvcmVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxMUZBRUE5MUJEQzk4OUEwMEI0QUZFNCAvKiBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTIzQUYxNjE4OTBBNENBMDAzMUNEQzkgLyog
SURCS2V5UmFuZ2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElEQktleVJhbmdlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjNB
RjE3MTg5MEE0Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSURCS2V5UmFuZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMjNBRjFDMTg5MThBRTQwMDMxQ0RDOSAvKiBJREJHZXRSZXN1bHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCR2V0UmVzdWx0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC05NTkyLDYgKzk1OTUsNyBAQAogCQk1MUQ3MTlCMzE4MTEwNkUw
MDAxNkRDNTEgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFiYXNlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFENzIzNkExQkI2MEJGRTAwNDc4Q0EzIC8qIElE
QlJlc3VsdERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
UmVzdWx0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcyMzZCMUJC
NjBCRkUwMDQ3OENBMyAvKiBJREJSZXN1bHREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQlJlc3VsdERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTFEN0VGRUIxQkRFRkE0NzAwRTkzRTEwIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zYWN0aW9uT3BlcmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFEQ0U4MDEwQ0FDOUYxQzAwNDg4MzU4
IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1NRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MURGNkQ3RDBCOTJBMTZEMDBDMkRDODUgLyogVGhyZWFk
Q2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkQ2hlY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFERjZEN0YwQjkyQTE4RTAwQzJEQzg1IC8q
IFRocmVhZENoZWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
VGhyZWFkQ2hlY2subW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjgwNSw2ICsx
NjgwOSw3IEBACiAJCQkJNTE5OEY3QjMxQkJFMDAxRDAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9u
SW1wbC5oICovLAogCQkJCTUxOThGN0I2MUJDMzE0MTcwMEUyQ0M1RiAvKiBJREJWZXJzaW9uQ2hh
bmdlRXZlbnRJbXBsLmNwcCAqLywKIAkJCQk1MTk4RjdCNzFCQzMxNDE3MDBFMkNDNUYgLyogSURC
VmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oICovLAorCQkJCTUxRDdFRkVCMUJERUZBNDcwMEU5M0Ux
MCAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNTE2MDcxMkIxQkQ4MzA1MzAw
REJDNEYyIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNs
aWVudDsKQEAgLTIyNTI1LDYgKzIyNTMwLDcgQEAKIAkJCQk1MURGNkQ3RDBCOTJBMTZEMDBDMkRD
ODUgLyogVGhyZWFkQ2hlY2suaCAqLywKIAkJCQlFMUZGNTdBNTBGMDEyNTZCMDA4OTFFQkIgLyog
VGhyZWFkR2xvYmFsRGF0YS5jcHAgKi8sCiAJCQkJRTFGRjU3QTIwRjAxMjU1QjAwODkxRUJCIC8q
IFRocmVhZEdsb2JhbERhdGEuaCAqLywKKwkJCQk1MTFGQUVBOTFCREM5ODlBMDBCNEFGRTQgLyog
VGhyZWFkU2FmZURhdGFCdWZmZXIuaCAqLywKIAkJCQkxODVCQ0YyNjBGMzI3OUNFMDAwRUEyNjIg
LyogVGhyZWFkVGltZXJzLmNwcCAqLywKIAkJCQkxODVCQ0YyNzBGMzI3OUNFMDAwRUEyNjIgLyog
VGhyZWFkVGltZXJzLmggKi8sCiAJCQkJOTMzMDlFQTEwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVy
LmNwcCAqLywKQEAgLTI2MzExLDYgKzI2MzE3LDcgQEAKIAkJCQlCMkZBM0RBRjBBQjc1QTZGMDAw
RTVBQzQgLyogSlNTVkdNZXRhZGF0YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyN0Iy
ODJBMENFRjBDMDcwMEQzOUQ1NCAvKiBKU1NWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ0OTZFM0EwMTM5ODEzQTUwMDNFRTMyQSAvKiBKU1NWR01QYXRoRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFEN0VGRUExQkRFOEY4QzAwRTkzRTEwIC8qIFRocmVh
ZFNhZmVEYXRhQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTQyQTc5NzBBRTVDOTQzMDBE
RjU4REYgLyogSlNTVkdOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREIxMEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR051bWJlckxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEz
REIzMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR1BhaW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMx
MTE5LDYgKzMxMTI2LDcgQEAKIAkJCQkyRDRGOTZGNTFBMUVDQzI0MDA5OEJGODggLyogVGV4dElu
ZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDRGOTZGODFBMUVDQzI0MDA5OEJGODgg
LyogVGV4dEluZGljYXRvcldpbmRvdy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQ5MTI1
MUYxMkQwMDNFRjI2OSAvKiBUZXh0SW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUx
RDdFRkVDMUJERUZBNTEwMEU5M0UxMCAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDRUNBREZDRDE1Mzc3OTFEMDBFMzcwNjggLyogVGV4dEluc2VydGlvbkJh
c2VDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFCMDk5RTY0OTIwMDU2RTU4
MSAvKiBUZXh0SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTREOTg4QjYxN0JGRUIy
MTAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRl
eCBhN2NiZDc4Li4zYmY0YjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgogCiAjaW5jbHVkZSA8cnVu
dGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9y
Lmg+CkBAIC03NywxMiArNzgsMTQgQEAgc3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LAogCiBzdGF0aWMg
SlNWYWx1ZSBpZGJLZXlUb0pTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBJREJLZXkqIGtleSkKIHsKLSAgICBpZiAoIWtleSkgeworICAgIGlm
ICgha2V5IHx8ICFleGVjKSB7CiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHVuZGVmaW5lZCwg
bm90IG51bGwuCiAgICAgICAgIC8vIFNwZWM6IGh0dHA6Ly9kdmNzLnczLm9yZy9oZy9JbmRleGVk
REIvcmF3LWZpbGUvdGlwL092ZXJ2aWV3Lmh0bWwjaWRsLWRlZi1JREJLZXlSYW5nZQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKKyAgICBMb2NrZXI8SlNMb2NrPiBsb2Nr
ZXIoZXhlYy0+dm0oKS5hcGlMb2NrKCkpOworCiAgICAgc3dpdGNoIChrZXktPnR5cGUoKSkgewog
ICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6CiAgICAgICAgIHsKQEAgLTI3OSwxMCArMjgyLDQxIEBA
IFJlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBEZXByCiAgICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7
CiB9CiAKK1JlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBBU1NFUlQoIWtleVBhdGgu
aXNOdWxsKCkpOworCisgICAgaWYgKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0
aFR5cGU6OkFycmF5KSB7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gcmVzdWx0Owor
ICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCgmZXhlYywgdmFsdWUsIGFycmF5W2ldKTsKKyAgICAgICAgICAgIGlm
ICgha2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChrZXkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZUFycmF5KHJlc3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElu
ZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmluZyk7CisgICAgcmV0dXJuIGludGVybmFsQ3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCgmZXhlYywgdmFsdWUsIGtleVBhdGguc3Ry
aW5nKCkpOworfQorCiBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1
ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNj
cmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAgIExPRyhTdG9yYWdl
QVBJLCAiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKKyAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAgIGlmICghZXhlYykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNhbkluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZSgqZXhlYywgc2NyaXB0VmFsdWUsIGtleVBhdGgpOworfQorCitib29sIGNhbkluamVjdElE
QktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCit7CisgICAgTE9HKFN0b3JhZ2VBUEksICJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFs
dWUiKTsKKwogICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhU
eXBlOjpTdHJpbmcpOwogICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKICAgICBJ
REJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKQEAgLTI5Miw4ICszMjYsNyBAQCBib29sIGNhbklu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwg
Y29uc3QgRGVwcmVjYQogICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUt
PmV4ZWMoKTsKLSAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoZXhlYywgc2Ny
aXB0VmFsdWUuanNWYWx1ZSgpLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXpl
KCkgLSAxKTsKKyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoJmV4ZWNTdGF0
ZSwgc2NyaXB0VmFsdWUuanNWYWx1ZSgpLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50
cy5zaXplKCkgLSAxKTsKIH0KIAogRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJ
REJWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQpAQCAtMzA4LDYgKzM0MSwyOCBAQCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVz
dFN0YXRlLCBQYXNzUgogICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52
bSgpLCByZXN1bHQpOwogfQogCitEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlE
QlZhbHVlRGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBUaHJlYWRT
YWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQoreworICAgIERPTVJlcXVlc3RTdGF0ZSBzdGF0ZSgm
Y29udGV4dCk7CisgICAgYXV0byogZXhlY1N0YXRlID0gc3RhdGUuZXhlYygpOworCisgICAgaWYg
KCF2YWx1ZURhdGEuZGF0YSgpKQorICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUoZXhlY1N0YXRlLT52bSgpLCBqc1VuZGVmaW5lZCgpKTsKKworICAgIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgZGF0YSA9ICp2YWx1ZURhdGEuZGF0YSgpOworICAgIEpTVmFsdWUgcmVzdWx0Owor
ICAgIGlmIChkYXRhLnNpemUoKSkgeworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlQnl0ZXMoZGF0YSk7CisKKyAgICAgICAgZXhlY1N0YXRlLT52bSgpLmFwaUxvY2soKS5sb2Nr
KCk7CisgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoZXhlY1N0
YXRlLCBleGVjU3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgTm9uVGhyb3dpbmcpOwor
ICAgICAgICBleGVjU3RhdGUtPnZtKCkuYXBpTG9jaygpLnVubG9jaygpOworICAgIH0gZWxzZQor
ICAgICAgICByZXN1bHQgPSBqc051bGwoKTsKKworICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZShleGVjU3RhdGUtPnZtKCksIHJlc3VsdCk7Cit9CisKIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0
U3RhdGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBwcnBCdWZmZXIsIGJvb2wga2V5SXNEZWZp
bmVkKQogewogICAgIGlmIChwcnBCdWZmZXIpIHsKQEAgLTM1MCw2ICs0MDUsMTEgQEAgUmVmUHRy
PElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0
ZSwgY29uc3QgRGVwcmVjYXQKICAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMs
IHNjcmlwdFZhbHVlLmpzVmFsdWUoKSk7CiB9CiAKK1JlZlB0cjxJREJLZXk+IHNjcmlwdFZhbHVl
VG9JREJLZXkoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
c2NyaXB0VmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZSgmZXhlYywg
c2NyaXB0VmFsdWUuanNWYWx1ZSgpKTsKK30KKwogdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLCBWZWN0b3I8SURC
S2V5RGF0YT4mIGluZGV4S2V5cykKIHsKICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgb2JqZWN0VmFsdWUsIGlu
ZGV4TWV0YWRhdGEua2V5UGF0aCk7CkBAIC0zNzUsNiArNDM1LDEzIEBAIHZvaWQgZ2VuZXJhdGVJ
bmRleEtleXNGb3JWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IGluZGV4TWV0CiAgICAgfQogfQogCitEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlEYXRh
VG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBJREJL
ZXlEYXRhJiBrZXlEYXRhKQoreworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5
YmVDcmVhdGVJREJLZXkoKTsKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRl
eHQpOworICAgIHJldHVybiBpZGJLZXlUb1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIGtleS5n
ZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5oCmluZGV4IGJiZDEwNjYuLjQyYjdiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTM4LDYgKzM4LDcg
QEAgY2xhc3MgRE9NUmVxdWVzdFN0YXRlOwogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UGF0
aDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCiBz
dHJ1Y3QgSURCSW5kZXhNZXRhZGF0YTsKIGNsYXNzIElEQktleURhdGE7CkBAIC00NSwxNSArNDYs
MjMgQEAgY2xhc3MgSURCS2V5RGF0YTsKIElEQktleVBhdGggaWRiS2V5UGF0aEZyb21WYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CiAKIGJvb2wgaW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8SURCS2V5PiwgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CisKIFJlZlB0cjxJREJLZXk+IGNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1JlZlB0cjxJ
REJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0
aCYpOworCiBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3Rh
dGUqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsK
K2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CisKIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKTsKIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBib29sIGtleUlzRGVmaW5lZCk7CiBXRUJDT1JFX0VYUE9SVCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgYm9vbCBrZXlJc0RlZmluZWQpOwogRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUgaWRiS2V5VG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQ
YXNzUmVmUHRyPElEQktleT4pOwogUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShE
T01SZXF1ZXN0U3RhdGUqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworUmVmUHRy
PElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIGdlbmVyYXRlSW5kZXhL
ZXlzRm9yVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLCBWZWN0b3I8SURCS2V5RGF0
YT4mIGluZGV4S2V5cyk7CiAKK0RlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktleURhdGFUb1Nj
cmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBJREJLZXlEYXRhJik7CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcAppbmRleCBmOGUzZmNiLi4xZDhjZjMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlc3Npb25JRC5oIgorI2luY2x1ZGUg
IlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtODYsNiArODcsMTEgQEAgQ3Jvc3NU
aHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgU2Vzc2lvbklEPjo6VHlwZSBDcm9zc1RocmVh
ZENvcGllckJhc2U8ZmFsc2UKICAgICByZXR1cm4gc2Vzc2lvbklEOwogfQogCitDcm9zc1RocmVh
ZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj46OlR5cGUgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+Ojpj
b3B5KGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBidWZmZXIpCit7CisgICAgcmV0dXJuIFRo
cmVhZFNhZmVEYXRhQnVmZmVyKGJ1ZmZlcik7Cit9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNl
PGZhbHNlLCBmYWxzZSwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU+Ojpjb3B5KGNvbnN0IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlJiBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmgKaW5kZXggYWJmOTA2Yi4uMTYwNTg4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCkBAIC00Niw2ICs0Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKICAgICBjbGFzcyBTZXNzaW9uSUQ7CisgICAgY2xhc3MgVGhyZWFk
U2FmZURhdGFCdWZmZXI7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURh
dGE7CiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YTsKICAgICBzdHJ1
Y3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnM7CkBAIC0xMzksNiArMTQwLDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBTZXNzaW9uSUQmKTsK
ICAgICB9OwogCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZh
bHNlLCBmYWxzZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IHsKKyAgICAgICAgdHlwZWRlZiBUaHJl
YWRTYWZlRGF0YUJ1ZmZlciBUeXBlOworICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFRo
cmVhZFNhZmVEYXRhQnVmZmVyJik7CisgICAgfTsKKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogICAgIG5hbWVzcGFjZSBJbmRleGVkREIgewogICAgICAgICBlbnVtIGNsYXNzIFRyYW5z
YWN0aW9uTW9kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNh
ZmVEYXRhQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1
ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNGM5NWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZl
ci5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRocmVhZFNhZmVEYXRhQnVmZmVyX2gKKyNkZWZpbmUgVGhyZWFk
U2FmZURhdGFCdWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFRocmVhZFNhZmVEYXRhQnVmZmVyOworCitjbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlckltcGwg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkU2FmZURhdGFCdWZmZXJJbXBsPiB7
CitmcmllbmQgY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7Citwcml2YXRlOgorICAgIGVudW0g
QWRvcHRWZWN0b3JUYWcgeyBBZG9wdFZlY3RvciB9OworICAgIFRocmVhZFNhZmVEYXRhQnVmZmVy
SW1wbChWZWN0b3I8dWludDhfdD4mIGRhdGEsIEFkb3B0VmVjdG9yVGFnKQorICAgIHsKKyAgICAg
ICAgbV9kYXRhLnN3YXAoZGF0YSk7CisgICAgfQorCisgICAgVGhyZWFkU2FmZURhdGFCdWZmZXJJ
bXBsKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkK
KyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKK307CisKK2NsYXNz
IFRocmVhZFNhZmVEYXRhQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVGhyZWFkU2FmZURh
dGFCdWZmZXIgYWRvcHRWZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFRocmVhZFNhZmVEYXRhQnVmZmVyKGRhdGEsIFRocmVhZFNhZmVEYXRhQnVmZmVy
SW1wbDo6QWRvcHRWZWN0b3IpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVGhyZWFkU2FmZURh
dGFCdWZmZXIgY29weVZlY3Rvcihjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCisgICAgewor
ICAgICAgICByZXR1cm4gVGhyZWFkU2FmZURhdGFCdWZmZXIoZGF0YSk7CisgICAgfQorCisgICAg
VGhyZWFkU2FmZURhdGFCdWZmZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+KiBkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwg
PyAmbV9pbXBsLT5tX2RhdGEgOiBudWxscHRyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcihWZWN0b3I8dWludDhfdD4mIGRhdGEsIFRocmVhZFNh
ZmVEYXRhQnVmZmVySW1wbDo6QWRvcHRWZWN0b3JUYWcgdGFnKQorICAgIHsKKyAgICAgICAgbV9p
bXBsID0gYWRvcHRSZWYobmV3IFRocmVhZFNhZmVEYXRhQnVmZmVySW1wbChkYXRhLCB0YWcpKTsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcihjb25zdCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpCisgICAgeworICAgICAgICBtX2ltcGwgPSBhZG9wdFJlZihuZXcgVGhy
ZWFkU2FmZURhdGFCdWZmZXJJbXBsKGRhdGEpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8VGhyZWFk
U2FmZURhdGFCdWZmZXJJbXBsPiBtX2ltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>