<?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>201957</bug_id>
          
          <creation_ts>2019-09-18 17:28:57 -0700</creation_ts>
          <short_desc>IndexedDB: update size to actual disk usage only when estimated increase is bigger than space available</short_desc>
          <delta_ts>2019-10-09 18:44:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>202480</dependson>
          <blocked>202483</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1572172</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-18 17:28:57 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572176</commentid>
    <comment_count>1</comment_count>
      <attachid>379089</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-18 17:49:05 -0700</bug_when>
    <thetext>Created attachment 379089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572211</commentid>
    <comment_count>2</comment_count>
      <attachid>379089</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-09-18 19:43:49 -0700</bug_when>
    <thetext>Comment on attachment 379089
Patch

Looks like this needs an update to trunk.

Can you include performance data for this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572435</commentid>
    <comment_count>3</comment_count>
      <attachid>379152</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-19 12:31:03 -0700</bug_when>
    <thetext>Created attachment 379152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572638</commentid>
    <comment_count>4</comment_count>
      <attachid>379204</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-19 21:47:07 -0700</bug_when>
    <thetext>Created attachment 379204
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572783</commentid>
    <comment_count>5</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-20 11:14:43 -0700</bug_when>
    <thetext>This patch cuts about 100ms for one iteration of PerformanceTests/IndexedDB/basic/objectstore-add.html (which does a lot of small adds) when running with &quot;run-minibrowser --release&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572884</commentid>
    <comment_count>6</comment_count>
      <attachid>379204</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-09-20 14:14:12 -0700</bug_when>
    <thetext>Comment on attachment 379204
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        the file size only when the accumulated estimated increase is bigger than space availabe.

available

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:715
&gt; +    m_shouldSyncSpaceCompletely = true;
&gt; +    if (m_manager)
&gt; +        m_manager-&gt;userNeedSync(*this);

It looks like the m_shouldSyncSpaceCompletely boolean is only used for the sake of userNeedSync(). Is that right? If so, can you reorganize the code so that userNeedSync() just calls a separate function? It seems like there&apos;s one function that initializes all values from disk, and another function that updates values based on changes that have been recorded. I would call those two functions &quot;computeSpaceUsed&quot; and &quot;updateSpaceUsed&quot;.

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.cpp:723
&gt; +    if (m_shouldSyncSpaceCompletely) {
&gt; +        m_server.startComputingSpaceUsedForOrigin(m_origin);

It looks like we use two words to describe the operation of reading sizes on disk: &quot;compute&quot; and &quot;sync&quot;. Also for describing a space delta: &quot;modify&quot; and &quot;change&quot;. I find code a lot more readable when we use one term consistently. I like &quot;compute&quot; and &quot;update&quot;, so I&apos;ll suggest renames that use them:

syncSpaceUsed =&gt; computeSpaceUsed
m_syncCallbacks =&gt; m_computeSpaceUsedCallbacks
didSyncSpaceUsed =&gt; didComputeSpaceUsed
userNeedSync =&gt; userNeedsToComputeSpaceUsed
askUserToSync =&gt; askUserToComputeSpaceUsed

computeSpaceUsedChangeForOrigin =&gt; updateSpaceUsedForOrigin
startComputingSpaceUsedChangeForOrigin =&gt; startUpdatingSpaceUsedChangeForOrigin
finishComputingSpaceUsedChangeForOrigin =&gt; finishUpdatingSpaceUsedForOrigin

m_shouldSyncSpaceCompletely =&gt; [ remove ]
didSyncSpaceUsedModifiedOnly =&gt; didUpdateSpaceUsed
canSyncSpaceModifiedOnly =&gt; canUpdateSpaceUsed

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:220
&gt; +{

startSpaceIncreasingTask =&gt; startSpaceIncreaseTask

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:226
&gt; +void UniqueIDBDatabase::completeSpaceIncreasingTask(uint64_t identifier, uint64_t actualTaskSize)
&gt; +{

completeSpaceIncreasingTask =&gt; finishSpaceIncreaseTask

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:227
&gt; +    auto iterator = m_pendingSpaceIncreasingTasks.find(identifier);

m_pendingSpaceIncreasingTasks =&gt; m_pendingSpaceIncreaseTasks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573926</commentid>
    <comment_count>7</comment_count>
      <attachid>379521</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-24 18:42:45 -0700</bug_when>
    <thetext>Created attachment 379521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573986</commentid>
    <comment_count>8</comment_count>
      <attachid>379521</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-25 02:02:16 -0700</bug_when>
    <thetext>Comment on attachment 379521
Patch

Some tests are failing, patch has some WTFLogAlways.

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        the accurate file size only when the accumulated estimated increase is bigger than space available.

This seems like a fine plan.
I do not really understand why the current model of StorageQuotaManager needs any change to implement this plan.
Can we do something like:
- IDBServer receives a new action
- IDBServer queries the StorageQuotaManager to check whether the action will get the space go above a given limit, for instance in IDBServer::requestSpace
- If it does not go above the limit, continue as usual
- If it goes above the limit, update the actual IDB size before continuing with IDBServer::requestSpace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574131</commentid>
    <comment_count>9</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-25 11:33:30 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #8)
&gt; Comment on attachment 379521 [details]
&gt; Patch
&gt; 
&gt; Some tests are failing, patch has some WTFLogAlways.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379521&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        the accurate file size only when the accumulated estimated increase is bigger than space available.
&gt; 
&gt; This seems like a fine plan.
&gt; I do not really understand why the current model of StorageQuotaManager
&gt; needs any change to implement this plan.
&gt; Can we do something like:
&gt; - IDBServer receives a new action
&gt; - IDBServer queries the StorageQuotaManager to check whether the action will
&gt; get the space go above a given limit, for instance in IDBServer::requestSpace
&gt; - If it does not go above the limit, continue as usual
&gt; - If it goes above the limit, update the actual IDB size before continuing
&gt; with IDBServer::requestSpace.

This would probably work in general cases. The flow may be: 
- IDBServer receives a new action with size S: asks StorageQuotaManager pre-RequestSpaceCheck(S)
- StorageQuotaManager says NoEnoughSpace, IDBServer dispatches a task to updateDatabaseSizes
- IDBServer receives a new action, queues it up because the update is not finished
- IDBServer didUpdateDatabaseSizes, requestSpace(S), this request gets handled or queued up in StorageQuotaManager
- IDBServer handles next requests in queue

Then do we do pre-RequestSpaceCheck for Cache?

The reasons I made the change in StorageQuotaManager instead of IDBServer:
1. StorageQuotaManager is aware of all pending requests (compared to queueing up requests in IDBServer) so it could decide how much more space it wants when askForMoreSpace.
2. StorageQuotaManager would block and update IDB database sizes when Cache requestSpace gets Deny. (maybe we can improve this a bit that if we find IDBServer has not executed any action since last update, we just skip this.)
3. It might be easier for us to integrate other storage types, which might also use estimatedSizeChange, in the future. We only need to add the capabilities of QuotaUser instead of adding a queue in StorageTypeServer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574141</commentid>
    <comment_count>10</comment_count>
      <attachid>379567</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-25 11:43:30 -0700</bug_when>
    <thetext>Created attachment 379567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574389</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-26 01:50:38 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #9)
&gt; (In reply to youenn fablet from comment #8)
&gt; &gt; Comment on attachment 379521 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Some tests are failing, patch has some WTFLogAlways.
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=379521&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; &gt; +        the accurate file size only when the accumulated estimated increase is bigger than space available.
&gt; &gt; 
&gt; &gt; This seems like a fine plan.
&gt; &gt; I do not really understand why the current model of StorageQuotaManager
&gt; &gt; needs any change to implement this plan.
&gt; &gt; Can we do something like:
&gt; &gt; - IDBServer receives a new action
&gt; &gt; - IDBServer queries the StorageQuotaManager to check whether the action will
&gt; &gt; get the space go above a given limit, for instance in IDBServer::requestSpace
&gt; &gt; - If it does not go above the limit, continue as usual
&gt; &gt; - If it goes above the limit, update the actual IDB size before continuing
&gt; &gt; with IDBServer::requestSpace.
&gt; 
&gt; This would probably work in general cases. The flow may be: 
&gt; - IDBServer receives a new action with size S: asks StorageQuotaManager
&gt; pre-RequestSpaceCheck(S)
&gt; - StorageQuotaManager says NoEnoughSpace, IDBServer dispatches a task to
&gt; updateDatabaseSizes
&gt; - IDBServer receives a new action, queues it up because the update is not
&gt; finished
&gt; - IDBServer didUpdateDatabaseSizes, requestSpace(S), this request gets
&gt; handled or queued up in StorageQuotaManager
&gt; - IDBServer handles next requests in queue
&gt; 
&gt; Then do we do pre-RequestSpaceCheck for Cache?

I don&apos;t believe we need pre-RequestSpaceCheck for Cache.
We could reuse requestSpace for pre-RequestSpaceCheck by adding a new parameter (RequestMoreSpaceIfNeeded::No).

&gt; 
&gt; The reasons I made the change in StorageQuotaManager instead of IDBServer:
&gt; 1. StorageQuotaManager is aware of all pending requests (compared to
&gt; queueing up requests in IDBServer) so it could decide how much more space it
&gt; wants when askForMoreSpace.
&gt; 2. StorageQuotaManager would block and update IDB database sizes when Cache
&gt; requestSpace gets Deny. (maybe we can improve this a bit that if we find
&gt; IDBServer has not executed any action since last update, we just skip this.)

Good point. IIUC, the scenario is that IDB fills up almost all space.
Cache API adds a new entry and hits the limit. In that case, we should recompute IDB actual size before answering cache API.

Maybe we should do a refactoring for having QuotaUser::spaceUsed() take a lambda.
In most cases, the lambda would be called synchronously.
quota manager would store a lastSpaceUsed, that would use IDB to either return synchronously or do a full asynchronous computation.
Would you be able to investigate this?

Another approach might be to delay full size computation based on a timer.
Every time a new action happens, we would delay the timer.
When no action happens for some time (one minute?), we would update the IDB size.

&gt; 3. It might be easier for us to integrate other storage types, which might
&gt; also use estimatedSizeChange, in the future. We only need to add the
&gt; capabilities of QuotaUser instead of adding a queue in StorageTypeServer.

It seems to me IDB is very specific there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574691</commentid>
    <comment_count>12</comment_count>
      <attachid>379567</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-09-26 17:34:54 -0700</bug_when>
    <thetext>Comment on attachment 379567
Patch

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

Ideas for simplifying:

(1) Remove updateSpaceUsed(). Always computeSpaceUsed(). We&apos;ve already taken care to make it rare, so we don&apos;t need to be so precise.

(2) Remove m_estimatedSpaceIncrease and m_spaceReserved. Instead, the quota manager can track the number of bytes written, and computeSpaceUsed() once the number exceeds half the available space (or some other reasonable fraction).

(3) Remove the code to compute space used when shouldAskForMoreSpace() is true. Instead, based on (2), we can assume that when shouldAskForMoreSpace() is true, we really have to ask. (shouldAskForMoreSpace should check whether bytesWritten exceeds bytesAvailable. It&apos;s OK if this check is a little aggressive or imperfect. When the check fires, it is certain that we need more space to operate efficiently, and very likely to be true that we&apos;re close to our space limit.)

&gt; Source/WebCore/ChangeLog:9
&gt; +        operation could slow.

could slow =&gt; is slow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574739</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-26 22:59:17 -0700</bug_when>
    <thetext>If we go with async spaceUsed, we can also probably remove whenInitialized code as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574922</commentid>
    <comment_count>14</comment_count>
      <attachid>379752</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-27 12:23:53 -0700</bug_when>
    <thetext>Created attachment 379752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574928</commentid>
    <comment_count>15</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-27 12:34:24 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #13)
&gt; If we go with async spaceUsed, we can also probably remove whenInitialized
&gt; code as well.

There are details that I am not so sure about your proposed approach, so I chose to keep the main structure of QuotaStorageManager. Let me know what do you think about the new patch. The idea is to reset UniqueIDBDatabase usage if we think the requested size is bigger than allowed, and try processing the request after the usage is reset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574941</commentid>
    <comment_count>16</comment_count>
      <attachid>379757</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-27 13:23:56 -0700</bug_when>
    <thetext>Created attachment 379757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574943</commentid>
    <comment_count>17</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-27 13:24:56 -0700</bug_when>
    <thetext>*** Bug 201728 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575032</commentid>
    <comment_count>18</comment_count>
      <attachid>379781</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-27 18:31:29 -0700</bug_when>
    <thetext>Created attachment 379781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575166</commentid>
    <comment_count>19</comment_count>
      <attachid>379819</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-29 13:18:31 -0700</bug_when>
    <thetext>Created attachment 379819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575264</commentid>
    <comment_count>20</comment_count>
      <attachid>379819</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-30 09:18:57 -0700</bug_when>
    <thetext>Comment on attachment 379819
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        Update disk usage of IndexedDB only when estimated increase is bigger than space available
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=201957
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

Double Changelog.. will fix this in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575269</commentid>
    <comment_count>21</comment_count>
      <attachid>379819</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-30 09:52:37 -0700</bug_when>
    <thetext>Comment on attachment 379819
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:170
&gt; +        uint64_t spaceUsed() const final {

&quot;{&quot; in its own line.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:988
&gt; +    return IDBError { WTF::nullopt, { }, sizeIncrease };

It might be good to add a static IDBError method, to remove the first two parameters and make it clear this is a success case, not an error case.
Or maybe we should use something like Expected&lt;uint64_t, IDBError&gt;.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1793
&gt; +    sizeIncrease += error.size();

This line reads a bit odd (Expected might be better here I guess).
Also, error should be null, so probably no need to add its size?

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h:306
&gt; +    HashMap&lt;uint64_t, uint64_t&gt; m_pendingSpaceIncreaseTasks;

Maybe we should introduce a typed identifier for this map key.

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:154
&gt; +        for (auto user : copyToVector(m_users))

auto&amp;

&gt; Source/WebCore/storage/StorageQuotaManager.h:91
&gt; +        State state;

Why do we need this state for each pending request?
Isn&apos;t it that this state should be a member of StorageQuotaManager instead?
In that case, we could merge it with m_hasStartedHandlingRequests maybe?

&gt; Source/WebCore/storage/StorageQuotaUser.h:38
&gt; +    virtual void resetSpaceUsed(Condition) { return; }

The name is not very clear and StorageQuotaManager is only calling with Condition::IndexedDBOnly.
How about:
- renaming it to computeExactSpaceUsed() with no parameters.


Also s/{  return; }//


One case to check is the case where there is no IDB at all.
In that case, we want to be sure the code is still working and the tasks will be processed.
I am not sure this will be the case since, if there is no IDB, all users will be still initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575298</commentid>
    <comment_count>22</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-30 13:03:32 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #21)
&gt; Comment on attachment 379819 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379819&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:170
&gt; &gt; +        uint64_t spaceUsed() const final {
&gt; 
&gt; &quot;{&quot; in its own line.
&gt; 
Okay.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:988
&gt; &gt; +    return IDBError { WTF::nullopt, { }, sizeIncrease };
&gt; 
&gt; It might be good to add a static IDBError method, to remove the first two
&gt; parameters and make it clear this is a success case, not an error case.
&gt; Or maybe we should use something like Expected&lt;uint64_t, IDBError&gt;.
&gt; 
Will add a static method.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:1793
&gt; &gt; +    sizeIncrease += error.size();
&gt; 
&gt; This line reads a bit odd (Expected might be better here I guess).
&gt; Also, error should be null, so probably no need to add its size?
&gt; 
IDBError&apos;s size will be set as the task size (space increase) when task successfully finishes, so size should be added only when error is null.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h:306
&gt; &gt; +    HashMap&lt;uint64_t, uint64_t&gt; m_pendingSpaceIncreaseTasks;
&gt; 
&gt; Maybe we should introduce a typed identifier for this map key.
&gt; 
Sure. This would introduce changes to other maps, so will do in https://bugs.webkit.org/show_bug.cgi?id=202366.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:154
&gt; &gt; +        for (auto user : copyToVector(m_users))
&gt; 
&gt; auto&amp;
&gt; 
Sure.

&gt; &gt; Source/WebCore/storage/StorageQuotaManager.h:91
&gt; &gt; +        State state;
&gt; 
&gt; Why do we need this state for each pending request?
&gt; Isn&apos;t it that this state should be a member of StorageQuotaManager instead?
&gt; In that case, we could merge it with m_hasStartedHandlingRequests maybe?
&gt; 
This is used to ensure that we would compute space used/ask for space increase on the same request once and only once.

Currently for StorageQuotaManger, its states are
1. waiting users to compute/initialize (m_pendingInitializationUsers is not null)
2. waiting space increase response (m_isWaitingForSpaceIncreaseResponse is true)
3. can handle request

m_hasStartedHandlingRequests can be true or false when state 3.


For PendingRequest, its states are
1. never handled before (can become 2 or 4)
2. already request for usage update (can become 3 or 4)
3. already request for space increase(can become 4)
4. handled - Grant or Deny

For StorageQuotaManger, QuotaUser update/initialize/reset are all implemented by adding that user to m_pendingInitializationUsers users. Therefore when StorageQuotaManger goes from state 1 to state 3, it does not know what action to take for the first pending request in queue.

&gt; &gt; Source/WebCore/storage/StorageQuotaUser.h:38
&gt; &gt; +    virtual void resetSpaceUsed(Condition) { return; }
&gt; 
&gt; The name is not very clear and StorageQuotaManager is only calling with
&gt; Condition::IndexedDBOnly.
&gt; How about:
&gt; - renaming it to computeExactSpaceUsed() with no parameters.
&gt; 
Sure.

&gt; 
&gt; Also s/{  return; }//
&gt;
Okay.
 
&gt;
&gt; One case to check is the case where there is no IDB at all.
&gt; In that case, we want to be sure the code is still working and the tasks
&gt; will be processed.
&gt; I am not sure this will be the case since, if there is no IDB, all users
&gt; will be still initialized.
&gt;
Yes, this case would not happen under current implementation - IDBServer would be there in the initialization of QuotaUsers(NetworkProcess::initializeQuotaUsers).

We can also add a check for pending users after computeExactSpaceUsed so we can continue to process the same request if IDB is not present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575299</commentid>
    <comment_count>23</comment_count>
      <attachid>379838</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-30 13:07:48 -0700</bug_when>
    <thetext>Created attachment 379838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575505</commentid>
    <comment_count>24</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-01 05:29:06 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/storage/StorageQuotaManager.h:91
&gt; &gt; &gt; +        State state;
&gt; &gt; 
&gt; &gt; Why do we need this state for each pending request?
&gt; &gt; Isn&apos;t it that this state should be a member of StorageQuotaManager instead?
&gt; &gt; In that case, we could merge it with m_hasStartedHandlingRequests maybe?
&gt; &gt; 
&gt; This is used to ensure that we would compute space used/ask for space
&gt; increase on the same request once and only once.
&gt; 
&gt; Currently for StorageQuotaManger, its states are
&gt; 1. waiting users to compute/initialize (m_pendingInitializationUsers is not
&gt; null)
&gt; 2. waiting space increase response (m_isWaitingForSpaceIncreaseResponse is
&gt; true)
&gt; 3. can handle request
&gt; 
&gt; m_hasStartedHandlingRequests can be true or false when state 3.
&gt; 
&gt; 
&gt; For PendingRequest, its states are
&gt; 1. never handled before (can become 2 or 4)
&gt; 2. already request for usage update (can become 3 or 4)
&gt; 3. already request for space increase(can become 4)
&gt; 4. handled - Grant or Deny
&gt; 
&gt; For StorageQuotaManger, QuotaUser update/initialize/reset are all
&gt; implemented by adding that user to m_pendingInitializationUsers users.
&gt; Therefore when StorageQuotaManger goes from state 1 to state 3, it does not
&gt; know what action to take for the first pending request in queue.

Agreed, but this is only useful for the first pending requests.
All other pending requests are Unhandled.
It seems best to have the additional information needed to go from state 1 to state 3 in StorageQuotaManager.
Or maybe we could introduce a fourth state for StorageQuotaManager which is PendingRecomputationofActualSpaceUsage.

&gt; &gt; &gt; Source/WebCore/storage/StorageQuotaUser.h:38
&gt; &gt; &gt; +    virtual void resetSpaceUsed(Condition) { return; }
&gt; &gt; 
&gt; &gt; The name is not very clear and StorageQuotaManager is only calling with
&gt; &gt; Condition::IndexedDBOnly.
&gt; &gt; How about:
&gt; &gt; - renaming it to computeExactSpaceUsed() with no parameters.
&gt; &gt; 
&gt; Sure.
&gt; 
&gt; &gt; 
&gt; &gt; Also s/{  return; }//
&gt; &gt;
&gt; Okay.
&gt;  
&gt; &gt;
&gt; &gt; One case to check is the case where there is no IDB at all.
&gt; &gt; In that case, we want to be sure the code is still working and the tasks
&gt; &gt; will be processed.
&gt; &gt; I am not sure this will be the case since, if there is no IDB, all users
&gt; &gt; will be still initialized.
&gt; &gt;
&gt; Yes, this case would not happen under current implementation - IDBServer
&gt; would be there in the initialization of
&gt; QuotaUsers(NetworkProcess::initializeQuotaUsers).
&gt; 
&gt; We can also add a check for pending users after computeExactSpaceUsed so we
&gt; can continue to process the same request if IDB is not present.

Yes, it seems more robust to cover that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575577</commentid>
    <comment_count>25</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-10-01 10:09:24 -0700</bug_when>
    <thetext>&gt; We can also add a check for pending users after computeExactSpaceUsed so we
&gt; can continue to process the same request if IDB is not present.

Do we really need to make IDB requests wait for computeExactSpaceUsed?

Could the implementation be simpler if we didn&apos;t wait?

If we didn&apos;t wait, the consequence would be that some requests near the space limit, but still below it, would trigger a user approval for more space. I think that consequence is acceptable, if it simplifies the implementation. 99.9% of websites will never even be near the space limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575592</commentid>
    <comment_count>26</comment_count>
      <attachid>379838</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-10-01 10:35:30 -0700</bug_when>
    <thetext>Comment on attachment 379838
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:236
&gt; +void UniqueIDBDatabase::startSpaceIncreaseTask(uint64_t identifier, uint64_t taskSize)
&gt; +{
&gt; +    m_server-&gt;increasePotentialSpaceUsed(m_identifier.origin(), taskSize);
&gt; +    m_pendingSpaceIncreaseTasks.add(identifier, taskSize);
&gt; +}
&gt; +
&gt; +void UniqueIDBDatabase::finishSpaceIncreaseTask(uint64_t identifier, uint64_t actualTaskSize)
&gt; +{
&gt; +    auto iterator = m_pendingSpaceIncreaseTasks.find(identifier);
&gt; +    if (iterator != m_pendingSpaceIncreaseTasks.end()) {
&gt; +        m_server-&gt;decreasePotentialSpaceUsed(m_identifier.origin(), iterator-&gt;value);
&gt; +        if (actualTaskSize)
&gt; +            m_server-&gt;increaseSpaceUsed(m_identifier.origin(), actualTaskSize);
&gt; +        m_pendingSpaceIncreaseTasks.remove(iterator);

Is it really essential that we guess how much space a task will use in advance, and then update to a precise value afterwards, and keep a precise tally in memory?

I believe it should be sufficient only to guess how much space each task will use, and accumulate guesses, and only measure the amount of space used on disk periodically.

It&apos;s OK if our guess is a little inaccurate, as long as it doesn&apos;t prompt the user too much, and it doesn&apos;t allow a webpage to use way more than 500MB on disk.

For example, even a really simple guess that only counted space increases and never counted space decreases, and synchronized with the disk when the size of space increases reach half of available capacity, would probably be good enough, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575646</commentid>
    <comment_count>27</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-01 12:29:09 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #26)
&gt; Comment on attachment 379838 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379838&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:236
&gt; &gt; +void UniqueIDBDatabase::startSpaceIncreaseTask(uint64_t identifier, uint64_t taskSize)
&gt; &gt; +{
&gt; &gt; +    m_server-&gt;increasePotentialSpaceUsed(m_identifier.origin(), taskSize);
&gt; &gt; +    m_pendingSpaceIncreaseTasks.add(identifier, taskSize);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void UniqueIDBDatabase::finishSpaceIncreaseTask(uint64_t identifier, uint64_t actualTaskSize)
&gt; &gt; +{
&gt; &gt; +    auto iterator = m_pendingSpaceIncreaseTasks.find(identifier);
&gt; &gt; +    if (iterator != m_pendingSpaceIncreaseTasks.end()) {
&gt; &gt; +        m_server-&gt;decreasePotentialSpaceUsed(m_identifier.origin(), iterator-&gt;value);
&gt; &gt; +        if (actualTaskSize)
&gt; &gt; +            m_server-&gt;increaseSpaceUsed(m_identifier.origin(), actualTaskSize);
&gt; &gt; +        m_pendingSpaceIncreaseTasks.remove(iterator);
&gt; 
&gt; Is it really essential that we guess how much space a task will use in
&gt; advance, and then update to a precise value afterwards, and keep a precise
&gt; tally in memory?
&gt; 
&gt; I believe it should be sufficient only to guess how much space each task
&gt; will use, and accumulate guesses, and only measure the amount of space used
&gt; on disk periodically.
&gt; 
&gt; It&apos;s OK if our guess is a little inaccurate, as long as it doesn&apos;t prompt
&gt; the user too much, and it doesn&apos;t allow a webpage to use way more than 500MB
&gt; on disk.
&gt; 
&gt; For example, even a really simple guess that only counted space increases
&gt; and never counted space decreases, and synchronized with the disk when the
&gt; size of space increases reach half of available capacity, would probably be
&gt; good enough, no?

Performance concern:
We only want to update disk usage(conduct file system operation) when it&apos;s necessary. Estimated space increase reaches some amount of available capacity can be too aggressive (or conservative, depending on how we do the estimate).

Correctness concern:
It&apos;s hard to estimate space increase for operation like put before it&apos;s executed, based on our current IDB implementation. The updating estimatedSizeIncrease after task done is a way to make the guess become &quot;a little inaccurate&quot; instead of &quot;very inaccurate&quot;. For example, put(key, value)
(1) Size estimate before task: size of key + size of value
(2) Size estimate after task: size of serialized key + size of serialized value + size of records for different indexes(which may be double (1)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575692</commentid>
    <comment_count>28</comment_count>
      <attachid>379938</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-01 13:22:04 -0700</bug_when>
    <thetext>Created attachment 379938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575716</commentid>
    <comment_count>29</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-01 13:48:55 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #25)
&gt; &gt; We can also add a check for pending users after computeExactSpaceUsed so we
&gt; &gt; can continue to process the same request if IDB is not present.
&gt; 
&gt; Do we really need to make IDB requests wait for computeExactSpaceUsed?
&gt; 
&gt; Could the implementation be simpler if we didn&apos;t wait?
&gt; 
&gt; If we didn&apos;t wait, the consequence would be that some requests near the
&gt; space limit, but still below it, would trigger a user approval for more
&gt; space. I think that consequence is acceptable, if it simplifies the
&gt; implementation. 99.9% of websites will never even be near the space limit.

This implementation is relatively simple now since we already have the code path to blocked update usage of QuotaUsers (IDBServer::QuotaUser::resetSpaceUsed). We barely modify QuotaUser.

If we do not block the requests during update, in some edge case, we may stat the file system multiple times(e.g. reset user usage during user usage update) or prompt multiple times(usage update running in the background thread). And this does not seem easier as we may need to keep states in QuotaUser or StorageQuotaManager.

If we believe most website will never reach this state, then blocking update should not happen very often so may be less a concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576023</commentid>
    <comment_count>30</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-02 09:26:11 -0700</bug_when>
    <thetext>This patch seems to do 3 things:
1. Improve the task estimate before calling the quota manager
2. Improve the task estimate after evaluating the task size so that our overall estimate is overall better
3. Trigger actual computation of real size when reaching quota

1 is straightforward and could be landed quickly.
2 is bigger but I think is also ok given our current approach
Could we split these in 3 patches to make progress?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576026</commentid>
    <comment_count>31</comment_count>
      <attachid>379938</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-02 09:29:59 -0700</bug_when>
    <thetext>Comment on attachment 379938
Patch

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

&gt; Source/WebCore/storage/StorageQuotaManager.h:96
&gt; +    Action m_actionTakenOnNextRequest { Action::Never };

I do not think Action is the right term. It might be State { NeedSpaceUsageInitialization, ComputingSpaceUsage, AskingForMoreSpace }
I wonder whether None could be equal to ComputingExactSpaceUsage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576028</commentid>
    <comment_count>32</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 09:39:20 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #30)
&gt; This patch seems to do 3 things:
&gt; 1. Improve the task estimate before calling the quota manager
&gt; 2. Improve the task estimate after evaluating the task size so that our
&gt; overall estimate is overall better
&gt; 3. Trigger actual computation of real size when reaching quota
&gt; 
&gt; 1 is straightforward and could be landed quickly.
&gt; 2 is bigger but I think is also ok given our current approach
&gt; Could we split these in 3 patches to make progress?

Sure.(In reply to youenn fablet from comment #30)
&gt; This patch seems to do 3 things:
&gt; 1. Improve the task estimate before calling the quota manager
&gt; 2. Improve the task estimate after evaluating the task size so that our
&gt; overall estimate is overall better
&gt; 3. Trigger actual computation of real size when reaching quota
&gt; 
&gt; 1 is straightforward and could be landed quickly.
&gt; 2 is bigger but I think is also ok given our current approach
&gt; Could we split these in 3 patches to make progress?

Sure, will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576037</commentid>
    <comment_count>33</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 10:05:10 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #31)
&gt; Comment on attachment 379938 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379938&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/StorageQuotaManager.h:96
&gt; &gt; +    Action m_actionTakenOnNextRequest { Action::Never };
&gt; 
&gt; I do not think Action is the right term. It might be State {
&gt; NeedSpaceUsageInitialization, ComputingSpaceUsage, AskingForMoreSpace }
&gt; I wonder whether None could be equal to ComputingExactSpaceUsage.

Never // Has never handled request, needs to initialize m_quota first
None // No action has been taken on first pending request, next action should be ComputeExactSpaceUsed or making a decision
ComputeExactSpaceUsed // ComputeExactSpaceUsed has been called, next action should be AskForMoreSpace or making a decision
AskForMoreSpace // AskForMoreSpace has been called, next action should be making decision

So None is not quite the same as ComputeExactSpaceUsed. If we are using state, it&apos;s probably more like
enum class State {
NeedInitializeQuota, 
Idle,
ComputingSpaceUsage, 
AskingForMoreSpace,
};
State m_lastState;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576101</commentid>
    <comment_count>34</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 12:09:01 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #30)
&gt; This patch seems to do 3 things:
&gt; 1. Improve the task estimate before calling the quota manager
&gt; 2. Improve the task estimate after evaluating the task size so that our
&gt; overall estimate is overall better
&gt; 3. Trigger actual computation of real size when reaching quota
&gt; 
&gt; 1 is straightforward and could be landed quickly.
&gt; 2 is bigger but I think is also ok given our current approach
&gt; Could we split these in 3 patches to make progress?

Patch 1: https://bugs.webkit.org/show_bug.cgi?id=202480
Patch 2: https://bugs.webkit.org/show_bug.cgi?id=202483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576170</commentid>
    <comment_count>35</comment_count>
      <attachid>380055</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-02 14:00:12 -0700</bug_when>
    <thetext>Created attachment 380055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576572</commentid>
    <comment_count>36</comment_count>
      <attachid>380158</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-03 13:34:43 -0700</bug_when>
    <thetext>Created attachment 380158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576589</commentid>
    <comment_count>37</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-03 13:55:35 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #30)
&gt; This patch seems to do 3 things:
&gt; 1. Improve the task estimate before calling the quota manager
&gt; 2. Improve the task estimate after evaluating the task size so that our
&gt; overall estimate is overall better
&gt; 3. Trigger actual computation of real size when reaching quota
&gt; 
&gt; 1 is straightforward and could be landed quickly.
&gt; 2 is bigger but I think is also ok given our current approach
&gt; Could we split these in 3 patches to make progress?

It turns out the order of these patches should be:
1. Improve the task estimate before calling the quota manager (202480).
2. Use estimated usage and trigger actual computation when estimated usage reaches limit (201957, this one). Use estimated usage without triggering actual computation would cause correctness problem as the estimated increase accumulates and never reset. 
3. Improve the task estimate after task execution so that the estimated usage in 2 is more accurate (202483).

So we still need to solve 2 first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577409</commentid>
    <comment_count>38</comment_count>
      <attachid>380158</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-07 11:38:37 -0700</bug_when>
    <thetext>Comment on attachment 380158
Patch

This looks almost good to me.
Some suggestions below.

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

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:-87
&gt; -        updateQuotaBasedOnSpaceUsage();

Why removing this call?
It should be the one that advance m_previousState to Uninitialized to MakingDecisionForRequest

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:149
&gt; +    }

Why do we have that code?
Normally, either we are initialised, in which case  the call in askUserToInitialize would move us out of Uninitialized, or the !m_pendingInitializationUsers.isEmpty() check would kick in.

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:189
&gt; +void StorageQuotaManager::processPendingRequests(Optional&lt;uint64_t&gt; newQuota)

I wonder whether we should split processPendingRequests in two methods, one for processing the request after a quota increase request and another one to restart the queue on various cases.
If you do not do it in this patch I can take a stab.

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:216
&gt; +        m_previousState = State::MakingDecisionForRequest;

We should probably make set m_previousState before callback call for compatibility with other call sites.

&gt; Source/WebCore/storage/StorageQuotaManager.h:96
&gt; +    State m_previousState { State::Uninitialized };

s/m_state/m_previousState.
Also, can we merge m_isWaitingForSpaceIncreaseResponse with m_state?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577519</commentid>
    <comment_count>39</comment_count>
      <attachid>380364</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-07 14:46:02 -0700</bug_when>
    <thetext>Created attachment 380364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577620</commentid>
    <comment_count>40</comment_count>
      <attachid>380385</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-07 19:36:46 -0700</bug_when>
    <thetext>Created attachment 380385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577672</commentid>
    <comment_count>41</comment_count>
      <attachid>380385</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-07 23:28:55 -0700</bug_when>
    <thetext>Comment on attachment 380385
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:225
&gt; +    m_pendingSpaceIncreaseTasks.add(identifier, taskSize);

Add ASSERT(!m_pendingSpaceIncreaseTasks.add(identifier))

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:230
&gt; +    auto iterator = m_pendingSpaceIncreaseTasks.find(identifier);

Can we add an ASSERT, something like ASSERT(iterator != m_pendingSpaceIncreaseTasks.end() || !isTaskSuccessful);

&gt; Source/WebCore/storage/StorageQuotaManager.h:96
&gt; +    State m_state { State::Uninitialized };

We might want to add some API tests for StorageQuotaManager like we are doing for other utility classes like Strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577861</commentid>
    <comment_count>42</comment_count>
      <attachid>380385</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-08 11:53:22 -0700</bug_when>
    <thetext>Comment on attachment 380385
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:225
&gt;&gt; +    m_pendingSpaceIncreaseTasks.add(identifier, taskSize);
&gt; 
&gt; Add ASSERT(!m_pendingSpaceIncreaseTasks.add(identifier))

Okay.

&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:230
&gt;&gt; +    auto iterator = m_pendingSpaceIncreaseTasks.find(identifier);
&gt; 
&gt; Can we add an ASSERT, something like ASSERT(iterator != m_pendingSpaceIncreaseTasks.end() || !isTaskSuccessful);

Sure.

&gt;&gt; Source/WebCore/storage/StorageQuotaManager.h:96
&gt;&gt; +    State m_state { State::Uninitialized };
&gt; 
&gt; We might want to add some API tests for StorageQuotaManager like we are doing for other utility classes like Strings.

What kind of API tests? 
I see we have some related API tests in StorageQuota.mm, this patch should not change their current behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578091</commentid>
    <comment_count>43</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-09 00:18:06 -0700</bug_when>
    <thetext>&gt; &gt; We might want to add some API tests for StorageQuotaManager like we are doing for other utility classes like Strings.
&gt; 
&gt; What kind of API tests? 
&gt; I see we have some related API tests in StorageQuota.mm, this patch should
&gt; not change their current behavior?

See for instance TestWebKitAPI/Tests/WTF/Vector.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578386</commentid>
    <comment_count>44</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-09 14:27:45 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #43)
&gt; &gt; &gt; We might want to add some API tests for StorageQuotaManager like we are doing for other utility classes like Strings.
&gt; &gt; 
&gt; &gt; What kind of API tests? 
&gt; &gt; I see we have some related API tests in StorageQuota.mm, this patch should
&gt; &gt; not change their current behavior?
&gt; 
&gt; See for instance TestWebKitAPI/Tests/WTF/Vector.cpp.

Will add a unit test in https://bugs.webkit.org/show_bug.cgi?id=202755. I will get this patch land first for some performance testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578395</commentid>
    <comment_count>45</comment_count>
      <attachid>380569</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-09 14:50:54 -0700</bug_when>
    <thetext>Created attachment 380569
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578421</commentid>
    <comment_count>46</comment_count>
      <attachid>380569</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-09 15:39:04 -0700</bug_when>
    <thetext>Comment on attachment 380569
Patch for landing

Clearing flags on attachment: 380569

Committed r250937: &lt;https://trac.webkit.org/changeset/250937&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578422</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-09 15:39:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578423</commentid>
    <comment_count>48</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-09 15:40:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/56133205&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578477</commentid>
    <comment_count>49</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-09 17:44:19 -0700</bug_when>
    <thetext>Reopened to upload test fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578483</commentid>
    <comment_count>50</comment_count>
      <attachid>380597</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-10-09 17:56:44 -0700</bug_when>
    <thetext>Created attachment 380597
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578489</commentid>
    <comment_count>51</comment_count>
      <attachid>380597</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-09 18:44:57 -0700</bug_when>
    <thetext>Comment on attachment 380597
Patch for landing

Clearing flags on attachment: 380597

Committed r250951: &lt;https://trac.webkit.org/changeset/250951&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578490</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-09 18:44:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379089</attachid>
            <date>2019-09-18 17:49:05 -0700</date>
            <delta_ts>2019-09-19 12:31:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190918174905.patch</filename>
            <type>text/plain</type>
            <size>53272</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg2OTJjMmY0Y2ZmZjY2
YzQ1ODE1ZDNlYzVkNDY1M2Y0MWI0ZjZjNS4uMWI1YzJmMGRhOWY4MmRhODUyNTA2ZmY0YzgxYjAy
ZjIzMDZlZjk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDE5LTA5LTE4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ3VycmVudGx5IHdlIHJlYWQgc2l6ZSBvZiBJbmRleGVkREIgZGF0YWJhc2UgZmls
ZXMgd2hlbiBhIGRhdGFiYXNlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuIFRoaXMgY291bGQgYmUg
c2xvdyBpZgorICAgICAgICB0aGVyZSBhcmUgbWFueSBzcGFjZSBpbmNyZWFzZSBvcGVyYXRpb25z
LiAKKyAgICAgICAgQW4gZWZmaWNpZW50IGFsdGVybmF0aXZlIGlzIHRvIGNvbXB1dGUgdGhlIHNw
YWNlIGF2YWlsYWJsZSwgZXN0aW1hdGUgc3BhY2UgaW5jcmVhc2UgZm9yIGVhY2ggb3BlYXJ0aW9u
LCBhbmQgcmVhZAorICAgICAgICB0aGUgZmlsZSBzaXplIG9ubHkgd2hlbiB0aGUgYWNjdW11bGF0
ZWQgZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJlLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRT
cGFjZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3Rh
VXNlcjo6c3luY1NwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6UXVvdGFVc2VyOjpkaWRTeW5jU3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRpZFN5bmNTcGFjZVVzZWRNb2RpZmllZE9u
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNvbXB1dGVTcGFj
ZVVzZWRGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6c3RhcnRDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VGb3JPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNvbXB1dGVTcGFj
ZVVzZWRDaGFuZ2VGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6aW5jcmVhc2VFc3RpbWF0ZWRTcGFjZVVz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmhvbGRTcGFjZUdy
YW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlbGVhc2VT
cGFjZUdyYW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRh
dGFiYXNlV2lsbEJlT3BlbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2Vy
dmVyOjpkYXRhYmFzZUlzQ2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VV
c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpR
dW90YVVzZXI6OndoZW5Jbml0aWFsaXplZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVNw
YWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6ZGVjcmVhc2VTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNw
YWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpmdWxsRGF0YWJhc2VEaXJlY3RvcnlX
aXRoVXBncmFkZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZGF0YWJhc2VTaXplRm9ySWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
VW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzY2hlZHVsZVNodXRkb3duRm9yQ2xvc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JD
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRTaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tp
bmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRPcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxl
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6dXBk
YXRlU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNw
YWNlVXNlZElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6c3Bh
Y2VVc2FnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpz
eW5jVXNlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojphc2tVc2VyVG9TeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6
OmFkZFVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3Zl
VXNlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1c2VyTmVlZFN5
bmMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6c3luY1NlbGVjdGVk
VXNlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zv
ck1vcmVTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOiBEZWxldGVk
LgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorICAgICAgICAqIHN0
b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
VXNlcjo6c3luY1NwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2Vy
OjpjYW5TeW5jU3BhY2VNb2RpZmllZE9ubHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhVXNlcjo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKwogMjAxOS0wOS0xMSAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hMU0xdIEVuc3Vy
ZSBzdHJ1Y3RzL2FycmF5cyB3aXRoIHBvaW50ZXJzIGFzIGZpZWxkcyBhcmUgZGlzYWxsb3dlZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCBiMDNkMmU2OTEyYTM3OTYyNWE5M2E0N2Q0ZjVkZDZlOTNiNjcxNWI2Li4yN2Uy
NmUyOGNlZTM2NWVjZjliNjIzZDMyZTYwNGQ1YjU3ZjBmNTFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE4IEBACisyMDE5LTA5LTE4ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisg
ICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdlIG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVk
IGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
UXVvdGFVc2Vycyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6
OnN5bmNTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6
cmVzZXRTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6
d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaDoKKwogMjAxOS0wOS0xMSAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUHJvdGVjdCBVc2VyTWVkaWFSZXF1ZXN0
IHdoZW4gc3RvcHBpbmcgaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggZThmZjIzMTJjOTQ3MzIwNmNlOTJlZWM5
NmQ4MmU3YTZlNDgxNTc5NS4uMmRiMjFjYjQxMmIyMTgyOGFmZGFhM2ExNDhkOWM4MGU1ZGE2NGFi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAKQEAgLTY5Nyw3ICs2OTcsNiBAQCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6
UXVvdGFVc2VyKElEQlNlcnZlciYgc2VydmVyLCBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2Vy
LAogICAgIDogbV9zZXJ2ZXIoc2VydmVyKQogICAgICwgbV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1h
bmFnZXIpKQogICAgICwgbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICwgbV9pc0luaXRp
YWxpemVkKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCiB7CiAgICAgaWYgKG1h
bmFnZXIpCiAgICAgICAgIG1hbmFnZXItPmFkZFVzZXIoKnRoaXMpOwpAQCAtNzExLDYwICs3MTAs
NDAgQEAgSURCU2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVzZXIoKQogCiB2b2lkIElEQlNlcnZl
cjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCgpCiB7Ci0gICAgbV9zcGFjZVVzZWQgPSAwOwot
ICAgIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA9IDA7Ci0KLSAgICBpZiAoIW1fbWFuYWdlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VydmVyLm1fc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW5pdGlhbGl6YXRpb25DYWxsYmFjayk7Ci0K
LSAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIERvIGFkZC9yZW1vdmUgdG8g
dHJpZ2dlciBjYWxsIHRvIHdoZW5Jbml0aWFsaXplZC4KLSAgICBtX21hbmFnZXItPnJlbW92ZVVz
ZXIoKnRoaXMpOwotICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7CisgICAgbV9zaG91bGRT
eW5jU3BhY2VDb21wbGV0ZWx5ID0gdHJ1ZTsKKyAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICBt
X21hbmFnZXItPnVzZXJOZWVkU3luYygqdGhpcyk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpRdW90
YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCi17Ci0gICAgaWYgKCFtX2lz
SW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgKyBz
aXplID4gbV9zcGFjZVVzZWQpOwotICAgIG1fc3BhY2VVc2VkICs9IHNpemU7Ci19Ci12b2lkIElE
QlNlcnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQordm9p
ZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6c3luY1NwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spCiB7Ci0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQobV9zcGFjZVVzZWQgPj0gc2l6ZSk7Ci0gICAgbV9zcGFjZVVz
ZWQgLT0gc2l6ZTsKLX0KKyAgICBtX3N5bmNDYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJh
Y2spKTsKIAotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6d2hlbkluaXRpYWxpemVkKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBpZiAobV9pc0luaXRpYWxp
emVkKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9pbml0aWFsaXphdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgbV9zZXJ2
ZXIuc3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4obV9vcmlnaW4pOworICAgIGlmICht
X3Nob3VsZFN5bmNTcGFjZUNvbXBsZXRlbHkpCisgICAgICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0
aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKKyAgICBlbHNlCisgICAgICAgIG1fc2Vy
dmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkQ2hhbmdlRm9yT3JpZ2luKG1fb3JpZ2luKTsKIH0K
IAotdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRf
dCBzcGFjZVVzZWQpCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRTeW5jU3BhY2VVc2Vk
KHVpbnQ2NF90IHNwYWNlVXNlZCkKIHsKLSAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkIHx8ICFt
X2VzdGltYXRlZFNwYWNlSW5jcmVhc2UpOworICAgIEFTU0VSVChtX3Nob3VsZFN5bmNTcGFjZUNv
bXBsZXRlbHkpOworICAgIG1fc2hvdWxkU3luY1NwYWNlQ29tcGxldGVseSA9IGZhbHNlOwogICAg
IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOwotICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7Cisg
ICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9z
eW5jQ2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7Cit9CiAKLSAgICBpZiAo
YXV0byBjYWxsYmFjayA9IFdURk1vdmUobV9pbml0aWFsaXphdGlvbkNhbGxiYWNrKSkKLSAgICAg
ICAgY2FsbGJhY2soKTsKK3ZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmRpZFN5bmNTcGFjZVVz
ZWRNb2RpZmllZE9ubHkodWludDY0X3QgaW5jcmVhc2UsIHVpbnQ2NF90IGRlY3JlYXNlKQorewor
ICAgIGlmIChpbmNyZWFzZSkKKyAgICAgICAgbV9zcGFjZVVzZWQgKz0gaW5jcmVhc2U7CisgICAg
aWYgKGRlY3JlYXNlKQorICAgICAgICBtX3NwYWNlVXNlZCAtPSBkZWNyZWFzZTsKKyAgICBtX2Vz
dGltYXRlZFNwYWNlSW5jcmVhc2UgPSAwOworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3N5bmNDYWxs
YmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soKTsKIH0KIAogSURCU2VydmVyOjpRdW90
YVVzZXImIElEQlNlcnZlcjo6ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYgb3Jp
Z2luKQpAQCAtNzg5LDEyICs3NjgsNTggQEAgdm9pZCBJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVz
ZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiAgICAgYXV0byBuZXdWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlmaWVyOjpkYXRhYmFzZURpcmVj
dG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9yaWdpbi5jbGllbnRPcmlnaW4s
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYxIik7CiAgICAgYXV0byBzaXplID0gU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5KG9sZFZlcnNpb25PcmlnaW5E
aXJlY3RvcnkpICsgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0
b3J5KG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkpOwogCisgICAgVmVjdG9yPElEQkRhdGFiYXNl
SWRlbnRpZmllcj4gZGF0YWJhc2VzVG9TdG9wVHJhY2tpbmc7CisgICAgZm9yIChhdXRvJiBbaWRl
bnRpZmllciwgdmFsdWVdIDogbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcCkgeworICAgICAgICBp
ZiAodmFsdWUuc2Vjb25kID09IElzQ2xvc2VkOjpObykKKyAgICAgICAgICAgIHZhbHVlLmZpcnN0
ID0gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGlkZW50
aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZGF0YWJhc2VzVG9TdG9wVHJhY2tpbmcuYXBwZW5kKGlkZW50aWZpZXIpOworICAgIH0KKwor
ICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nKQorICAg
ICAgICBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLnJlbW92ZShpZGVudGlmaWVyKTsKKwogICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJT
ZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBzaXplKSk7
CiB9CiAKIHZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4o
Y29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlVXNlZCkKIHsKLSAgICBl
bnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXplU3BhY2VVc2VkKHNwYWNlVXNlZCk7Cisg
ICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGlkU3luY1NwYWNlVXNlZChzcGFjZVVzZWQpOwor
fQorCit2b2lkIElEQlNlcnZlcjo6c3RhcnRDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VGb3JPcmln
aW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgQVNTRVJUKCFtX3Nlc3Npb25J
RC5pc0VwaGVtZXJhbCgpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJklEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZENoYW5nZUZvck9yaWdpbiwg
b3JpZ2luKSk7Cit9CisKK3ZvaWQgSURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkQ2hhbmdlRm9y
T3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworCisgICAgVmVjdG9yPElEQkRhdGFiYXNlSWRlbnRpZmllcj4gZGF0YWJhc2Vz
VG9TdG9wVHJhY2tpbmc7CisgICAgdWludDY0X3QgaW5jcmVhc2UgPSAwLCBkZWNyZWFzZSA9IDA7
CisgICAgZm9yIChhdXRvJiBbaWRlbnRpZmllciwgdmFsdWVdIDogbV9tb2RpZmllZERhdGFiYXNl
U2l6ZU1hcCkgeworICAgICAgICBhdXRvIGN1cnJlbnRTaXplID0gU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkYXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRTaXplID4gdmFsdWUuZmlyc3QpCisgICAg
ICAgICAgICBpbmNyZWFzZSArPSBjdXJyZW50U2l6ZSAtIHZhbHVlLmZpcnN0OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkZWNyZWFzZSArPSB2YWx1ZS5maXJzdCAtIGN1cnJlbnRTaXplOwor
ICAgICAgICB2YWx1ZS5maXJzdCA9IGN1cnJlbnRTaXplOworCisgICAgICAgIGlmICh2YWx1ZS5z
ZWNvbmQgPT0gSXNDbG9zZWQ6OlllcykKKyAgICAgICAgICAgIGRhdGFiYXNlc1RvU3RvcFRyYWNr
aW5nLmFwcGVuZChpZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGlkZW50aWZp
ZXIgOiBkYXRhYmFzZXNUb1N0b3BUcmFja2luZykKKyAgICAgICAgbV9tb2RpZmllZERhdGFiYXNl
U2l6ZU1hcC5yZW1vdmUoaWRlbnRpZmllcik7CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdT
cGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4sIG9yaWdpbiwgaW5jcmVhc2UsIGRlY3JlYXNlKSk7Cit9
CisKK3ZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VGb3JPcmln
aW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IGluY3JlYXNlLCB1aW50NjRf
dCBkZWNyZWFzZSkKK3sKKyAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kaWRTeW5jU3BhY2VV
c2VkTW9kaWZpZWRPbmx5KGluY3JlYXNlLCBkZWNyZWFzZSk7CiB9CiAKIHZvaWQgSURCU2VydmVy
OjpyZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tT
aXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
KT4mJiBjYWxsYmFjaykKQEAgLTgwOCwzMCArODMzLDQ2IEBAIHZvaWQgSURCU2VydmVyOjpyZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBD
b21wCiAgICAgcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2UodGFza1NpemUsIFdURk1vdmUoY2Fs
bGJhY2spKTsKIH0KIAordm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2Vk
KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQoreworICAgIGlmIChh
dXRvKiB1c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQorICAgICAgICB1c2VyLT5pbmNy
ZWFzZUVzdGltYXRlZFNwYWNlVXNlZChzaXplKTsKK30KKwogdm9pZCBJREJTZXJ2ZXI6OnJlc2V0
U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewogICAgIGlmIChhdXRvKiB1
c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQogICAgICAgICB1c2VyLT5yZXNldFNwYWNl
VXNlZCgpOwogfQogCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCit2b2lkIElEQlNlcnZlcjo6aG9sZFNw
YWNlR3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VTaXpl
KQogewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUp
OworICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmhvbGRTcGFjZUdyYW50ZWQoc3BhY2VTaXpl
KTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQordm9pZCBJREJTZXJ2ZXI6OnJlbGVhc2VTcGFj
ZUdyYW50ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlU2l6ZSkK
IHsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVNwYWNlVXNlZChzaXplKTsK
KyAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5yZWxlYXNlU3BhY2VHcmFudGVkKHNwYWNlU2l6
ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBJREJT
ZXJ2ZXI6OmRhdGFiYXNlV2lsbEJlT3BlbmVkKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYg
aWRlbnRpZmllcikKIHsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVBvdGVu
dGlhbFNwYWNlVXNlZCh0YXNrU2l6ZSk7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisK
KyAgICBhdXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5
UGF0aElzb2xhdGVkQ29weSgpOworICAgIGF1dG8gc2l6ZUJlZm9yZU9wZW4gPSBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZUZvcklkZW50aWZpZXIoaWRlbnRpZmllciwgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoKTsKKyAgICBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLnNldChpZGVu
dGlmaWVyLCBzdGQ6Om1ha2VfcGFpcihzaXplQmVmb3JlT3BlbiwgSXNDbG9zZWQ6Ok5vKSk7Cisg
ICAgcmV0dXJuIHNpemVCZWZvcmVPcGVuOwogfQogCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNw
YWNlVXNlZCkKK3ZvaWQgSURCU2VydmVyOjpkYXRhYmFzZUlzQ2xvc2VkKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2lu
KS5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZVNpemVNYXAuY29udGFp
bnMoaWRlbnRpZmllcikpIHsKKyAgICAgICAgYXV0byBzaXplID0gbV9tb2RpZmllZERhdGFiYXNl
U2l6ZU1hcC5nZXQoaWRlbnRpZmllcikuZmlyc3Q7CisgICAgICAgIG1fbW9kaWZpZWREYXRhYmFz
ZVNpemVNYXAuc2V0KGlkZW50aWZpZXIsIHN0ZDo6bWFrZV9wYWlyKHNpemUsIElzQ2xvc2VkOjpZ
ZXMpKTsKKyAgICB9CiB9CiAKIHZvaWQgSURCU2VydmVyOjp1cGdyYWRlRmlsZXNJZk5lY2Vzc2Fy
eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmgKaW5kZXggY2Q2YmFiY2ExZThiYjMyZTk3MGEyMjU0OTdjYTA0MGJjZDYyZWRiZS4u
NTA3NTE4YWJhMWNiYzQ0NDQyMWVkNTc5YzllZGJiN2Y0NTg3MjZjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTE0
LDExICsxMTQsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmRE
ZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+
JiwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKICAgICB2b2lkIHJl
cXVlc3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOwotICAg
IHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWlu
dDY0X3QgdGFza1NpemUpOwotICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29u
c3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwotICAgIHZvaWQgaW5jcmVhc2VT
cGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9pZCBk
ZWNyZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKKyAg
ICB2b2lkIGhvbGRTcGFjZUdyYW50ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFz
a1NpemUpOworICAgIHZvaWQgcmVsZWFzZVNwYWNlR3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgdm9pZCBpbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNl
ZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKICAgICB2b2lkIHJlc2V0U3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYpOworICAgIGVudW0gY2xhc3MgSXNDbG9zZWQgeyBO
bywgWWVzIH07CisgICAgdWludDY0X3QgZGF0YWJhc2VXaWxsQmVPcGVuZWQoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBkYXRhYmFzZUlzQ2xvc2VkKGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYpOwogCiAgICAgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luKSB7IGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pOyB9CiAKQEAg
LTE1NSwzOCArMTU3LDQ4IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0U3BhY2VVc2VkKHVp
bnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsgfQogICAgICAgICB2
b2lkIHJlc2V0U3BhY2VVc2VkKCk7CiAKLSAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNw
YWNlVXNlZCh1aW50NjRfdCBpbmNyZWFzZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0g
aW5jcmVhc2U7IH0KLSAgICAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50
NjRfdCBkZWNyZWFzZSkKKyAgICAgICAgdm9pZCBob2xkU3BhY2VHcmFudGVkKHVpbnQ2NF90IHNp
emUpIHsgbV9zcGFjZVJlc2VydmVkICs9IHNpemU7IH0KKyAgICAgICAgdm9pZCByZWxlYXNlU3Bh
Y2VHcmFudGVkKHVpbnQ2NF90IHNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPj0gZGVjcmVhc2UpOwotICAgICAgICAgICAgbV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlIC09IGRlY3JlYXNlOworICAgICAgICAgICAgQVNTRVJUKG1fc3Bh
Y2VSZXNlcnZlZCA+PSBzaXplKTsKKyAgICAgICAgICAgIG1fc3BhY2VSZXNlcnZlZCAtPSBzaXpl
OwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6
ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSk7CiAKLSAg
ICAgICAgdm9pZCBpbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7CisgICAg
ICAgIHZvaWQgaW5jcmVhc2VFc3RpbWF0ZWRTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSkgeyBtX2Vz
dGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gc2l6ZTsgfQorCisgICAgICAgIHZvaWQgc3luY1NwYWNl
VXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOworICAgICAgICB2b2lkIGRp
ZFN5bmNTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKKyAgICAgICAgdm9pZCBkaWRTeW5j
U3BhY2VVc2VkTW9kaWZpZWRPbmx5KHVpbnQ2NF90IGluY3JlYXNlLCB1aW50NjRfdCBkZWNyZWFz
ZSk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsgfQot
ICAgICAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
IGZpbmFsOworICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3NwYWNlVXNlZCArIG1fc3BhY2VSZXNlcnZlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFz
ZTsgfQorICAgICAgICBib29sIGNhblN5bmNTcGFjZU1vZGlmaWVkT25seSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwogICAgICAg
ICBXZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKKyAgICAgICAgYm9vbCBt
X3Nob3VsZFN5bmNTcGFjZUNvbXBsZXRlbHkgeyB0cnVlIH07CiAgICAgICAgIENsaWVudE9yaWdp
biBtX29yaWdpbjsKLSAgICAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAg
ICAgICAvLyBTcGFjZSBpbiB1c2UuCiAgICAgICAgIHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9
OworICAgICAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBvbmdvaW5nIHRhc2tzLgorICAgICAgICB1
aW50NjRfdCBtX3NwYWNlUmVzZXJ2ZWQgeyAwIH07CisgICAgICAgIC8vIEVzdGltYXRlZCBzcGFj
ZSBpbmNyZWFzZSBmb3IgZmluaXNoZWQgdGFza3Mgc2luY2UgbGFzdCBzeW5jLgogICAgICAgICB1
aW50NjRfdCBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4gbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrOworICAgICAgICBEZXF1
ZTxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3N5bmNDYWxsYmFja3M7CiAgICAgfTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIFF1b3RhVXNlciYgZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVu
dE9yaWdpbiYpOwogICAgIHZvaWQgc3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29u
c3QgQ2xpZW50T3JpZ2luJik7CiAgICAgdm9pZCBjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNv
bnN0IENsaWVudE9yaWdpbiYpOwogICAgIHZvaWQgZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9y
T3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNwYWNlVXNlZCk7CisgICAgdm9p
ZCBzdGFydENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBDbGllbnRPcmln
aW4mKTsKKyAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4oY29uc3QgQ2xp
ZW50T3JpZ2luJik7CisgICAgdm9pZCBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VGb3JP
cmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgaW5jcmVhc2UsIHVpbnQ2NF90IGRl
Y3JlYXNlKTsKIAogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7
CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlx
dWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CisgICAgSGFzaE1hcDxJREJE
YXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6cGFpcjx1aW50NjRfdCwgSXNDbG9zZWQ+PiBtX21vZGlm
aWVkRGF0YWJhc2VTaXplTWFwOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uKj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25zOwogICAgIEhhc2hNYXA8SURC
UmVzb3VyY2VJZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4gbV90cmFu
c2FjdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDI3OWIzMTU5
MTZiZDM5ZDhkNGE4NjA2ZTcwNWRiN2U1NWQxOWFlNzAuLmIzOGQyN2I2NzdjODdlMTRkMzFmNWU5
ZmVkNzAzNzg2Y2MwNDk2NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBA
IC03MjIsMTQgKzcyMiwxNCBAQCBTdHJpbmcgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFz
ZU5hbWVGcm9tRW5jb2RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZW5jbwogICAgIHJldHVybiBG
aWxlU3lzdGVtOjpkZWNvZGVGcm9tRmlsZW5hbWUocGFydGlhbGx5RGVjb2RlZCk7CiB9CiAKLVN0
cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkgY29u
c3QKK1N0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1l
KGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKQogewotICAgIEFTU0VSVCghbV9pZGVudGlmaWVy
LmRhdGFiYXNlTmFtZSgpLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIWRhdGFiYXNlTmFtZS5pc051
bGwoKSk7CiAKLSAgICBpZiAobV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLmlzRW1wdHkoKSkK
KyAgICBpZiAoZGF0YWJhc2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICIlMDAiOwog
Ci0gICAgU3RyaW5nIGZpbGVuYW1lID0gRmlsZVN5c3RlbTo6ZW5jb2RlRm9yRmlsZU5hbWUobV9p
ZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKTsKKyAgICBTdHJpbmcgZmlsZW5hbWUgPSBGaWxlU3lz
dGVtOjplbmNvZGVGb3JGaWxlTmFtZShkYXRhYmFzZU5hbWUpOwogICAgIGZpbGVuYW1lLnJlcGxh
Y2UoJy4nLCAiJTJFIik7CiAKICAgICByZXR1cm4gZmlsZW5hbWU7CkBAIC03NjcsNyArNzY3LDcg
QEAgU3RyaW5nIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZnVsbERhdGFiYXNlRGlyZWN0b3J5V2l0
aFVwZ3JhZGUoKQogewogICAgIGF1dG8gZGF0YWJhc2VSb290RGlyZWN0b3J5ID0gdGhpcy0+ZGF0
YWJhc2VSb290RGlyZWN0b3J5SXNvbGF0ZWRDb3B5KCk7CiAgICAgU3RyaW5nIG9sZE9yaWdpbkRp
cmVjdG9yeSA9IG1faWRlbnRpZmllci5kYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KGRh
dGFiYXNlUm9vdERpcmVjdG9yeSwgInYwIik7Ci0gICAgU3RyaW5nIG9sZERhdGFiYXNlRGlyZWN0
b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9sZE9yaWdpbkRpcmVj
dG9yeSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSk7CisgICAgU3RyaW5nIG9sZERhdGFiYXNl
RGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9sZE9yaWdp
bkRpcmVjdG9yeSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUobV9pZGVudGlmaWVyLmRhdGFiYXNl
TmFtZSgpKSk7CiAgICAgU3RyaW5nIG5ld09yaWdpbkRpcmVjdG9yeSA9IG1faWRlbnRpZmllci5k
YXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KGRhdGFiYXNlUm9vdERpcmVjdG9yeSwgInYx
Iik7CiAgICAgU3RyaW5nIGZpbGVOYW1lSGFzaCA9IFNRTGl0ZUZpbGVTeXN0ZW06OmNvbXB1dGVI
YXNoRm9yRmlsZU5hbWUobV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBkaXJlY3Rvcmllc1dpdGhTYW1lSGFzaCA9IEZpbGVTeXN0ZW06Omxpc3REaXJlY3Rv
cnkobmV3T3JpZ2luRGlyZWN0b3J5LCBmaWxlTmFtZUhhc2ggKyAiKiIpOwpAQCAtODYxLDYgKzg2
MSwyMCBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZSgpIGNv
bnN0CiAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZnVs
bERhdGFiYXNlUGF0aCgpKTsKIH0KIAordWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
YXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiByb290RGlyZWN0b3J5KQoreworICAgIGF1dG8gb2xkT3Jp
Z2luRGlyZWN0b3J5ID0gaWRlbnRpZmllci5kYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290
KHJvb3REaXJlY3RvcnksICJ2MCIpOworICAgIGF1dG8gb2xkRGF0YWJhc2VEaXJlY3RvcnkgPSBG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob2xkT3JpZ2luRGlyZWN0b3J5LCBm
aWxlbmFtZUZvckRhdGFiYXNlTmFtZShpZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSk7CisgICAg
YXV0byBvbGREYXRhYmFzZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQob2xkRGF0YWJhc2VEaXJlY3RvcnksICJJbmRleGVkREIuc3FsaXRlMyIpOworCisgICAgYXV0
byBvcmlnaW5EaXJlY3RvcnkgPSBpZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVU
b1Jvb3Qocm9vdERpcmVjdG9yeSwgInYxIik7CisgICAgYXV0byBmaWxlTmFtZUhhc2ggPSBTUUxp
dGVGaWxlU3lzdGVtOjpjb21wdXRlSGFzaEZvckZpbGVOYW1lKGlkZW50aWZpZXIuZGF0YWJhc2VO
YW1lKCkpOworICAgIGF1dG8gZGF0YWJhc2VEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQob3JpZ2luRGlyZWN0b3J5LCBmaWxlTmFtZUhhc2gpOworICAgIGF1
dG8gZGF0YWJhc2VQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRh
dGFiYXNlRGlyZWN0b3J5LCAiSW5kZXhlZERCLnNxbGl0ZTMiKTsKKworICAgIHJldHVybiBTUUxp
dGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG9sZERhdGFiYXNlUGF0aCkgKyBTUUxp
dGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGRhdGFiYXNlUGF0aCk7Cit9CisKIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJU
cmFuc2FjdGlvbkluZm8mIGluZm8pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbiAtICVzIiwgaW5mby5pZGVudGlmaWVyKCkubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5o
CmluZGV4IGJmZDYwNmNhNGVlOTdmNjA2ZWU2YmM0Njg1YTllZmM4YTNkMjgwMWUuLjBhMDMzN2I4
ZGU5MmYyMGNlYjlkZGJhYzIzYzE1Y2RiNWI3Yjc4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2lu
Z1N0b3JlLmgKQEAgLTk4LDEyICs5OCwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBm
dWxsRGF0YWJhc2VQYXRoRm9yRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBT
dHJpbmcgZGF0YWJhc2VOYW1lRnJvbUZpbGUoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGF0aWMg
dWludDY0X3QgZGF0YWJhc2VTaXplRm9ySWRlbnRpZmllcihjb25zdCBJREJEYXRhYmFzZUlkZW50
aWZpZXImLCBjb25zdCBTdHJpbmcmIHJvb3REaXJlY3RvcnkpOworCiAgICAgYm9vbCBoYXNUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKSBjb25zdCBmaW5hbDsKIAogICAg
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9
CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkgY29uc3Q7
CisgICAgc3RhdGljIFN0cmluZyBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZShjb25zdCBTdHJpbmcm
KTsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlUGF0aCgpIGNvbnN0OwogICAgIFN0cmluZyBmdWxs
RGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBncmFkZSgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAKaW5kZXggYzVkN2E5ODJkNzAxNmE2M2ExOGVmZGYxYjhkNTMyNzkxZDg1M2NkNy4uYTc4
NDM0NGI1MjNiZjQ3N2EwYTM1MDQzZWIxN2M3YzYyMDA1MjUxZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuY3BwCkBAIC01NSw2ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3Bh
Y2UgSURCU2VydmVyIHsKIAogc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRXcml0ZU9wZXJh
dGlvbkNvc3QgPSA0Oworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRPcGVuT3BlcmF0aW9u
Q29zdCA9IDEwMCAqIEtCOwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShj
b25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQogewpAQCAtMjE1LDI0ICsyMTYsMjIgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAg
ICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFdlIGRv
IG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlzdGluZyBvciBhIG5ldyBkYXRhYmFzZS4K
ICAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNvc3Qgc28gdGhhdCBpdCBpcyBub3QgcG9z
c2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGF0YWJhc2UuCi0gICAgICAgICAg
ICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdFdy
aXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyldKGF1
dG8gZGVjaXNpb24pIG11dGFibGUgeworICAgICAgICAgICAgcmVxdWVzdFNwYWNlKGRlZmF1bHRP
cGVuT3BlcmF0aW9uQ29zdCwgIm9wZW5EYXRhYmFzZSIsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKHRoaXMpXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBpZiAo
IXdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAg
ICBpZiAobV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IobV9jdXJyZW50T3Bl
bkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpLCBJREJFcnJvciB7
IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJvcGVuRGF0YWJhc2Ui
KSB9KTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBJREJSZXN1bHREYXRhOjplcnJvcihtX2N1cnJlbnRPcGVuREJSZXF1ZXN0
LT5yZXF1ZXN0RGF0YSgpLnJlcXVlc3RJZGVudGlmaWVyKCksICplcnJvcik7CiAgICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5kaWRPcGVuRGF0
YWJhc2UocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVz
dCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3Jl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICB0aGlz
LT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKLSAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIG1fc2VydmVyLT5ob2xkU3BhY2VHcmFudGVkKG1faWRl
bnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0KTsKKyAgICAgICAgICAg
ICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTM0NCwxNSArMzQz
LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICBpZiAobV9iYWNraW5nU3RvcmUp
IHsKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAg
ICBtX25ld0RhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAog
ICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgICAgIG1fYmFja2luZ1N0b3Jl
U3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICAgICAgbV9iYWNr
aW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8g
YmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsK
LSAgICAgICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNp
emUoKTsKIAorICAgICAgICBtX3NlcnZlci0+ZGF0YWJhc2VXaWxsQmVPcGVuZWQoaWRlbnRpZmll
cik7CiAgICAgICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgICAgIGF1dG8g
ZXJyb3IgPSBiYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNl
SW5mbyk7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCkBAIC0zNjAsMTMgKzM1OCwxNCBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaQogCiAgICAgICAgIGRlbGV0ZWRWZXJzaW9uID0gZGF0
YWJhc2VJbmZvLnZlcnNpb24oKTsKICAgICAgICAgYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5n
U3RvcmUoKTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBiYWNraW5nU3RvcmUtPmRhdGFi
YXNlU2l6ZSgpOwogICAgIH0KIAorICAgIG1fc2VydmVyLT5kYXRhYmFzZUlzQ2xvc2VkKGlkZW50
aWZpZXIpOworCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0
ZWRWZXJzaW9uKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRp
dGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKCkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9u
YWxEZWxldGVCYWNraW5nU3RvcmUiKTsKQEAgLTM3NCw3ICszNzMsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAg
aWYgKG1fYmFja2luZ1N0b3JlKQogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2lu
Z1N0b3JlKCk7CiAKLSAgICBzaHV0ZG93bkZvckNsb3NlKCk7CisgICAgc2h1dGRvd25Gb3JDbG9z
ZShpZGVudGlmaWVyKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2NoZWR1bGVTaHV0
ZG93bkZvckNsb3NlKCkKQEAgLTM4NiwyNyArMzg1LDI3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnNjaGVkdWxlU2h1dGRvd25Gb3JDbG9zZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3du
aW5nUG9pbnRlckZvckNsb3NlKTsKICAgICBtX293bmluZ1BvaW50ZXJGb3JDbG9zZSA9IG1fc2Vy
dmVyLT5jbG9zZUFuZFRha2VVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CiAKLSAgICBwb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpzaHV0ZG93bkZvckNsb3NlKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSwgbV9p
ZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xv
c2UoKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZShjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgQVNTRVJUKG1fb3duaW5nUG9pbnRlckZvckNsb3NlLmdldCgpID09IHRoaXMp
OwogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3du
Rm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgIGlmIChtX2JhY2tp
bmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAgICAgIG1fbmV3
RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotICAgIH0KIAog
ICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRz
U2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CiAgICAgbV9iYWNraW5nU3RvcmVJc0Vw
aGVtZXJhbCA9IGZhbHNlOwogCisgICAgbV9zZXJ2ZXItPmRhdGFiYXNlSXNDbG9zZWQoaWRlbnRp
Zmllcik7CisKICAgICBpZiAoIW1fZGF0YWJhc2VRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSkpOworICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZv
ckNsb3NlLCBpZGVudGlmaWVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9kYXRh
YmFzZVF1ZXVlLmtpbGwoKTsKQEAgLTQxOCw4ICs0MTcsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRTaHV0ZG93bkZvckNsb3NlKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZVJlcGx5
UXVldWUuaXNFbXB0eSgpKTsKICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1ZS5raWxsKCk7Ci0KLSAg
ICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCkBAIC00NTEs
OCArNDQ4LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3Jl
KHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQogICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0
ID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOwotCiAg
ICAgbV9kZWxldGVCYWNraW5nU3RvcmVJblByb2dyZXNzID0gZmFsc2U7CiAKICAgICBpZiAobV9o
YXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKQEAgLTU1Miw3ICs1NDcsNyBAQCB1aW50NjRfdCBVbmlx
dWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBj
YWxsYmFjaywgdQogICAgIG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUo
Y2FsbGJhY2spKTsKIAogICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+aW5j
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7
CisgICAgICAgIG1fc2VydmVyLT5ob2xkU3BhY2VHcmFudGVkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgdGFza1NpemUpOwogICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQo
aWRlbnRpZmllciwgdGFza1NpemUpOwogICAgIH0KIApAQCAtNTcyLDcgKzU2Nyw3IEBAIHVpbnQ2
NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNh
bGxiYWNrJiYgY2FsbGJhY2ssCiAgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVy
LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKICAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9z
ZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwg
dGFza1NpemUpOworICAgICAgICBtX3NlcnZlci0+aG9sZFNwYWNlR3JhbnRlZChtX2lkZW50aWZp
ZXIub3JpZ2luKCksIHRhc2tTaXplKTsKICAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5n
VGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKICAgICB9CiAKQEAgLTc4NiwxNyArNzgx
LDE1IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0
c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVs
dGFuZW91c1RyYW5zYWN0aW9ucygpOwogICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBt
X2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKIAotICAgIC8vIFF1b3RhVXNlciBzaG91bGQg
aGF2ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUKLSAgICAv
LyBzaXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9i
YWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotCisgICAgYXV0byBkYXRhYmFzZVNpemVCZWZv
cmVPcGVuID0gbV9zZXJ2ZXItPmRhdGFiYXNlV2lsbEJlT3BlbmVkKGlkZW50aWZpZXIpOwogICAg
IElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7
CisgICAgYXV0byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAwIDog
ZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0OworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tp
bmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUpKTsKIH0KIAotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25z
dCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSIpOwpAQCAtODA3LDcgKzgwMCw5IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiBpbmZvLCBjb25zdCBJCiAgICAgQVNTRVJUKG1faXNPcGVuaW5nQmFja2luZ1N0b3JlKTsK
ICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwogCi0gICAgdXBkYXRlU3BhY2VV
c2VkSWZOZWVkZWQoKTsKKyAgICBtX3NlcnZlci0+cmVsZWFzZVNwYWNlR3JhbnRlZChtX2lkZW50
aWZpZXIub3JpZ2luKCksIGFjdHVhbFRhc2tTaXplKTsKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
CisgICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNlZChtX2lkZW50aWZp
ZXIub3JpZ2luKCksIGFjdHVhbFRhc2tTaXplKTsKIAogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JV
c2VyRGVsZXRlKQogICAgICAgICByZXR1cm47CkBAIC0yMTI5LDkgKzIxMjQsNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKENyb3NzVGhyZWFkVGFzayYmIHRhc2sp
CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseShDcm9zc1Ro
cmVhZFRhc2smJiB0YXNrKQogewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9u
ZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0KICAgICBt
X2RhdGFiYXNlUmVwbHlRdWV1ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgbV9zZXJ2ZXIt
PnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSkpOwogfQpAQCAtMjI3
MCwzNSArMjI2MiwyNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZv
clVzZXJEZWxldGUoKQogICAgIC8vIE90aGVyd2lzZSwgdGhpcyBkYXRhYmFzZSBpcyBzdGlsbCBw
b3RlbnRpYWxseSBhY3RpdmUuCiAgICAgLy8gU28gd2UnbGwgaGF2ZSBpdCBvd24gaXRzZWxmIGFu
ZCB0aGVuIHBlcmZvcm0gYSBjbGVhbiB1bmNvbmRpdGlvbmFsIGRlbGV0ZSBvbiB0aGUgYmFja2dy
b3VuZCB0aHJlYWQuCiAgICAgbV9vd25pbmdQb2ludGVyRm9yQ2xvc2UgPSBtX3NlcnZlci0+Y2xv
c2VBbmRUYWtlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwotICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1V
bmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVu
Y29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUsIG1faWRlbnRpZmllcikpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChPcHRpb25hbDx1aW50
NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
Ojp1cGRhdGVTcGFjZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIElzVGFza1N1Y2Nlc3Nm
dWwgaXNTdWNjZXNzZnVsKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBp
ZiAob3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpIHsKLSAgICAgICAgdWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyID0gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIudmFsdWUoKTsKLSAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmZpbmQoY2Fs
bGJhY2tJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNl
SW5jcmVhc2luZ1Rhc2tzLmVuZCgpKSB7Ci0gICAgICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUp
OwotICAgICAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MucmVtb3ZlKGl0ZXJh
dG9yKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nU3Bh
Y2VJbmNyZWFzaW5nVGFza3MuZmluZChjYWxsYmFja0lkZW50aWZpZXIpOworICAgIGlmIChpdGVy
YXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5lbmQoKSkgeworICAgICAgICBt
X3NlcnZlci0+cmVsZWFzZVNwYWNlR3JhbnRlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJh
dG9yLT52YWx1ZSk7CiAKLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFiYXNl
U2l6ZTsKLSAgICBpZiAoZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkgewot
ICAgICAgICBpZiAoZGF0YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAgICAg
ICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwg
ZGF0YWJhc2VTaXplIC0gbV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgbV9jdXJyZW50RGF0YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9jdXJy
ZW50RGF0YWJhc2VTaXplID0gZGF0YWJhc2VTaXplOworICAgICAgICBpZiAoaXNTdWNjZXNzZnVs
ID09IElzVGFza1N1Y2Nlc3NmdWw6OlllcykKKyAgICAgICAgICAgIG1fc2VydmVyLT5pbmNyZWFz
ZUVzdGltYXRlZFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1
ZSk7CisgICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92ZShpdGVyYXRv
cik7CiAgICAgfQogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikK
IHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOworICAg
IGF1dG8gaXNUYXNrU3VjY2Vzc2Z1bCA9IGVycm9yLmlzTnVsbCgpID8gSXNUYXNrU3VjY2Vzc2Z1
bDo6WWVzIDogSXNUYXNrU3VjY2Vzc2Z1bDo6Tm87CisgICAgdXBkYXRlU3BhY2UoY2FsbGJhY2tJ
ZGVudGlmaWVyLCBpc1Rhc2tTdWNjZXNzZnVsKTsKIAogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vy
cm9yQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJh
Y2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CkBAIC0yMzExLDcgKzIyOTUsOCBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1L
ZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKIHsKLSAgICB1cGRhdGVTcGFj
ZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOworICAgIGF1dG8gaXNUYXNrU3VjY2Vz
c2Z1bCA9IGVycm9yLmlzTnVsbCgpID8gSXNUYXNrU3VjY2Vzc2Z1bDo6WWVzIDogSXNUYXNrU3Vj
Y2Vzc2Z1bDo6Tm87CisgICAgdXBkYXRlU3BhY2UoY2FsbGJhY2tJZGVudGlmaWVyLCBpc1Rhc2tT
dWNjZXNzZnVsKTsKIAogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxsYmFja3MudGFr
ZShjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9z
ZWRGb3JVc2VyRGVsZXRlKTsKQEAgLTIzNTcsNyArMjM0Miw3IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQo
Y2FsbGJhY2tJZGVudGlmaWVyKTsKKyAgICB1cGRhdGVTcGFjZShjYWxsYmFja0lkZW50aWZpZXIs
IElzVGFza1N1Y2Nlc3NmdWw6Ok5vKTsKIAogICAgIEFTU0VSVChtX2Vycm9yQ2FsbGJhY2tzLmNv
bnRhaW5zKGNhbGxiYWNrSWRlbnRpZmllcikpOwogICAgIEFTU0VSVChtX2NhbGxiYWNrUXVldWUu
bGFzdCgpID09IGNhbGxiYWNrSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4
IDY4YTVjZWE1NjQzMTNiNTZjMDY0ZjVkM2MzMzI0OWQ1YzgzZjljZmEuLmJhNmU1YzllYzNkMDAz
NjNhYjcyZDVlMDczYjM5ZDNlMmJjYTM5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0x
MTYsOCArMTE2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkQ2xvc2VkRm9yVXNlckRlbGV0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGU7IH0KIAotICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0OwotCiAgICAgdm9pZCBmaW5pc2hBY3RpdmVUcmFuc2Fj
dGlvbnMoKTsKIAogcHJpdmF0ZToKQEAgLTE4MywxMiArMTgxLDEyIEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJUcmFu
c2FjdGlvbkluZm8mKTsKICAgICB2b2lkIHBlcmZvcm1BY3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNr
aW5nU3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJUcmFuc2FjdGlv
bkluZm8mKTsKLSAgICB2b2lkIHBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3Jl
KCk7Ci0gICAgdm9pZCBzaHV0ZG93bkZvckNsb3NlKCk7CisgICAgdm9pZCBwZXJmb3JtVW5jb25k
aXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsK
KyAgICB2b2lkIHNodXRkb3duRm9yQ2xvc2UoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7
CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFja3MKICAgICB2b2lkIGRpZERlbGV0ZUJhY2tp
bmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbik7Ci0gICAgdm9pZCBkaWRPcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CisgICAgdm9p
ZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVy
cm9yJiwgdWludDY0X3QgYWN0dWFsVGFza1NpemUpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
LCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2b2lkIGRpZFBlcmZvcm1EZWxldGVP
YmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1SZW5h
bWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9y
JiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUp
OwpAQCAtMjQ5LDcgKzI0Nyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlcXVlc3RTcGFjZSh1
aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3YWl0Rm9yUmVx
dWVzdFNwYWNlQ29tcGxldGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVy
cm9yPiYmKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChPcHRpb25hbDx1
aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIgPSBXVEY6Om51bGxvcHQpOworICAg
IGVudW0gY2xhc3MgSXNUYXNrU3VjY2Vzc2Z1bCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIHVwZGF0
ZVNwYWNlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgSXNUYXNrU3VjY2Vzc2Z1bCk7CiAK
ICAgICBSZWY8SURCU2VydmVyPiBtX3NlcnZlcjsKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIg
bV9pZGVudGlmaWVyOwpAQCAtMzAzLDggKzMwMiw2IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxJ
REJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsKIAogICAgIEhhc2hNYXA8
dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrczsKLSAgICB1
aW50NjRfdCBtX2N1cnJlbnREYXRhYmFzZVNpemUgeyAwIH07Ci0gICAgdWludDY0X3QgbV9uZXdE
YXRhYmFzZVNpemUgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmluZGV4IDc2N2Fk
MmVhZjRhY2NiODMxOTA0NDIyODk3MDY5NDliNzBiMzQzMGUuLjMyYTNjOTU5Mjc5MGFhNGU0ZjIw
MmVkMzZjNTVkN2YyNzU2NDkxMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmNwcApAQCAtNDAsNyArNDAsNyBAQCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp+U3RvcmFnZVF1b3RhTWFuYWdlcigpCiB1aW50NjRfdCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpz
cGFjZVVzYWdlKCkgY29uc3QKIHsKICAgICB1aW50NjRfdCB1c2FnZSA9IDA7Ci0gICAgZm9yIChh
dXRvJiB1c2VyIDogbV91c2VycykKKyAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX2FjdGl2ZVVzZXJz
KQogICAgICAgICB1c2FnZSArPSB1c2VyLT5zcGFjZVVzZWQoKTsKICAgICByZXR1cm4gdXNhZ2U7
CiB9CkBAIC01NCwzNCArNTQsNDEgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVR
dW90YUJhc2VkT25TcGFjZVVzYWdlKCkKICAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwg
ZGVmYXVsdFF1b3RhU3RlcCAqICgoc3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkgKyAx
KSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVk
ZWQoKQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzeW5jVXNlcnNJZk5lZWRlZCgpCiB7Ci0g
ICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQorICAgIGlmICht
X3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxT
dG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb0luaXRpYWxpemU7Ci0gICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMpIHsKLSAgICAgICAgaWYgKGtleVZh
bHVlLnZhbHVlID09IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6Tm8pIHsKLSAgICAgICAgICAgIGtl
eVZhbHVlLnZhbHVlID0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpZZXM7Ci0gICAgICAgICAgICB1
c2Vyc1RvSW5pdGlhbGl6ZS5hcHBlbmQoa2V5VmFsdWUua2V5KTsKLSAgICAgICAgfQorICAgIFZl
Y3RvcjxTdG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb1N5bmM7CisgICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IG1fcGVuZGluZ1VzZXJzKSB7CisgICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBJ
c1N5bmNDYWxsZWQ6Ok5vKQorICAgICAgICAgICAgdXNlcnNUb1N5bmMuYXBwZW5kKGtleVZhbHVl
LmtleSk7CiAgICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0aWFsaXplKSB7
Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKHVzZXIp
KQotICAgICAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7CisgICAgZm9yIChhdXRv
KiB1c2VyIDogdXNlcnNUb1N5bmMpIHsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmNvbnRh
aW5zKHVzZXIpKQorICAgICAgICAgICAgYXNrVXNlclRvU3luYygqdXNlcik7CiAgICAgfQogfQog
Ci12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1
b3RhVXNlciYgdXNlcikKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvU3luYyhT
dG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIHVzZXIud2hlbkluaXRpYWxpemVkKFt0aGlz
LCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7CisgICAgbV9wZW5kaW5n
VXNlcnMuc2V0KCZ1c2VyLCBJc1N5bmNDYWxsZWQ6Olllcyk7CisgICAgdXNlci5zeW5jU3BhY2VV
c2VkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7CiAgICAg
ICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKG1f
cGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSkKLSAgICAgICAgICAgIG1f
dXNlcnMuYWRkKCZ1c2VyKTsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmNvbnRhaW5zKCZ1
c2VyKSkgeworICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmdldCgmdXNlcikgPT0gSXNT
eW5jQ2FsbGVkOjpZZXMpIHsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdVc2Vycy5yZW1vdmUo
JnVzZXIpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlVXNlcnMuYWRkKCZ1c2VyKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQW5vdGhlciBzeW5jIHJlcXVlc3Qg
aXMgcmVjZWl2ZWQgZHVyaW5nIHRoZSBzeW5jaW5nIG9mIHRoZSB1c2VyLgorICAgICAgICAgICAg
ICAgIGFza1VzZXJUb1N5bmModXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VV
c2FnZSgpOwpAQCAtOTEsMzcgKzk4LDQ4IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
VXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogCiB2b2lkIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OmFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKIHsKLSAgICBBU1NF
UlQoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBB
U1NFUlQoIW1fdXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJbml0aWFsaXph
dGlvblVzZXJzLmFkZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7CisgICAgQVNT
RVJUKCFtX3BlbmRpbmdVc2Vycy5jb250YWlucygmdXNlcikpOworICAgIEFTU0VSVCghbV9hY3Rp
dmVVc2Vycy5jb250YWlucygmdXNlcikpOworICAgIG1fcGVuZGluZ1VzZXJzLmFkZCgmdXNlciwg
SXNTeW5jQ2FsbGVkOjpObyk7CiAKICAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHko
KSkKLSAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSh1c2VyKTsKKyAgICAgICAgYXNrVXNlclRv
U3luYyh1c2VyKTsKIH0KIAotYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JN
b3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKK3ZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIGlmICgh
c3BhY2VJbmNyZWFzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNwYWNl
VXNhZ2UoKSArIHNwYWNlSW5jcmVhc2UgPiBtX3F1b3RhOworICAgIEFTU0VSVChtX2FjdGl2ZVVz
ZXJzLmNvbnRhaW5zKCZ1c2VyKSB8fCBtX3BlbmRpbmdVc2Vycy5jb250YWlucygmdXNlcikpOwor
ICAgIG1fYWN0aXZlVXNlcnMucmVtb3ZlKCZ1c2VyKTsKKyAgICBpZiAobV9wZW5kaW5nVXNlcnMu
cmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpCisgICAgICAgIHByb2Nl
c3NQZW5kaW5nUmVxdWVzdHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6
Tm8pOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1
b3RhVXNlciYgdXNlcikKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6dXNlck5lZWRTeW5jKFN0
b3JhZ2VRdW90YVVzZXImIHVzZXIpCiB7Ci0gICAgQVNTRVJUKG1fdXNlcnMuY29udGFpbnMoJnVz
ZXIpIHx8IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAg
ICBtX3VzZXJzLnJlbW92ZSgmdXNlcik7Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9u
VXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyBXaGVuIGJlaW5nIGNsZWFyZWQsIHF1b3RhIHVzZXJzIG1heSBy
ZW1vdmUgdGhlbXNlbHZlcyBhbmQgYWRkIHRoZW1zZWx2ZXMgdG8gdHJpZ2dlciByZWluaXRpYWxp
emF0aW9uLgotICAgICAgICAvLyBMZXQncyB3YWl0IGZvciBhZGRVc2VyIHRvIGJlIGNhbGxlZCBi
ZWZvcmUgcHJvY2Vzc2luZyBwZW5kaW5nIHJlcXVlc3RzLgotICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSB7Ci0gICAgICAgICAgICBp
ZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9wZW5kaW5n
VXNlcnMuY29udGFpbnMoJnVzZXIpKSB7CisgICAgICAgIGlmIChtX3BlbmRpbmdVc2Vycy5nZXQo
JnVzZXIpID09IElzU3luY0NhbGxlZDo6Tm8pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgbV9wZW5kaW5nVXNlcnMuc2V0KCZ1c2VyLCBJc1N5bmNDYWxsZWQ6Ok5vKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fYWN0aXZlVXNlcnMucmVtb3ZlKCZ1c2VyKTsKKyAgICBt
X3BlbmRpbmdVc2Vycy5hZGQoJnVzZXIsIElzU3luY0NhbGxlZDo6Tm8pOworICAgIGlmICghbV9w
ZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQorICAgICAgICBhc2tVc2VyVG9TeW5jKHVzZXIpOwor
fQogCi0gICAgICAgICAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgdGhpcy0+cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNo
b3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpObyk7Ci0gICAgICAgIH0pOwordm9pZCBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpzeW5jU2VsZWN0ZWRVc2VycygpCit7CisgICAgZm9yIChhdXRv
KiB1c2VyIDogY29weVRvVmVjdG9yKG1fYWN0aXZlVXNlcnMpKSB7CisgICAgICAgIGlmICh1c2Vy
LT5jYW5TeW5jU3BhY2VNb2RpZmllZE9ubHkoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nVXNl
cnMuYWRkKHVzZXIsIElzU3luY0NhbGxlZDo6Tm8pOworICAgICAgICAgICAgbV9hY3RpdmVVc2Vy
cy5yZW1vdmUodXNlcik7CisgICAgICAgIH0KICAgICB9CisKKyAgICBzeW5jVXNlcnNJZk5lZWRl
ZCgpOwogfQogCiB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRf
dCBzcGFjZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKQEAgLTEzNiwxNSAr
MTU0LDIxIEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90
IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpOworICAgIHN5bmNVc2Vyc0lmTmVlZGVk
KCk7CiAKLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7
CisgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9wZW5kaW5n
UmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNw
YWNlSW5jcmVhc2UpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNl
SW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOworICAgICAgICBzeW5jU2VsZWN0ZWRVc2Vy
cygpOworICAgICAgICBpZiAoIW1fcGVuZGluZ1VzZXJzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxs
YmFjayksIFBlbmRpbmdSZXF1ZXN0OjpTdGF0ZTo6U3luY1JlcXVlc3RlZCB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVu
ZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spLCBQZW5kaW5nUmVxdWVzdDo6U3Rh
dGU6OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQgfSk7CiAgICAgICAgIGFza0Zvck1vcmVTcGFjZShz
cGFjZUluY3JlYXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1Miw2ICsxNzYsMTQg
QEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYKICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQp
OwogfQogCitib29sIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1
aW50NjRfdCBzcGFjZUluY3JlYXNlKSBjb25zdAoreworICAgIGlmICghc3BhY2VJbmNyZWFzZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNl
SW5jcmVhc2UgPiBtX3F1b3RhOworfQorCiB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zv
ck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKQogewogICAgIEFTU0VSVChzaG91bGRB
c2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpOwpAQCAtMTgxLDExICsyMTMsMTMgQEAgdm9p
ZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVp
bnQ2NF90PiBuZXdRdW90YSwgU2gKICAgICBpZiAobV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNl
UmVzcG9uc2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVx
dWVzdCA9PSBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKSB7CiAgICAgICAg
IGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOworICAgICAgICBB
U1NFUlQocmVxdWVzdC5zdGF0ZSA9PSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVh
c2VSZXF1ZXN0ZWQpOworCiAgICAgICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3Vs
ZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpOwogCiAgICAgICAgIFJFTEVB
U0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNpc2lvbiBpcyAlZCIsIHRoaXMsIHNob3VsZEFsbG93
UmVxdWVzdCk7CkBAIC0xOTUsMTEgKzIyOSwxOCBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaAog
CiAgICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0
byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCk7Ci0KICAgICAgICAgaWYgKHNo
b3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpKSB7CisgICAgICAgICAg
ICBpZiAocmVxdWVzdC5zdGF0ZSA9PSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlVuaGFuZGxlZCkg
eworICAgICAgICAgICAgICAgIHN5bmNTZWxlY3RlZFVzZXJzKCk7CisgICAgICAgICAgICAgICAg
aWYgKCFtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdC5zdGF0ZSA9IFBlbmRpbmdSZXF1ZXN0OjpTdGF0ZTo6U3luY1JlcXVlc3RlZDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UgPSAwOwogICAgICAgICAgICAgZm9y
IChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCiAgICAgICAgICAgICAgICAgc3Bh
Y2VJbmNyZWFzZSArPSByZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CisgICAgICAgICAgICByZXF1ZXN0
LnN0YXRlID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkOwog
ICAgICAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3Rh
TWFuYWdlci5oCmluZGV4IDlmNjQ2MzNlZDY2Y2MxMmE5MjgzYzA4OTFiZDI1NWFlOTMwNDJhYjcu
LmI3NjQ4NDQwYmE4OTc3MmE3MjViZWEyNGY4OGM4Y2M4ZTc3NmFjOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC01NCw2ICs1NCw3IEBAIHB1
YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkVXNlcihTdG9yYWdlUXVvdGFVc2Vy
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyKFN0b3JhZ2VRdW90YVVzZXIm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVzZXJOZWVkU3luYyhTdG9yYWdlUXVvdGFVc2Vy
Jik7CiAKICAgICBlbnVtIGNsYXNzIERlY2lzaW9uIHsgRGVueSwgR3JhbnQgfTsKICAgICB1c2lu
ZyBSZXF1ZXN0Q2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY2lzaW9uKT47CkBA
IC02Nyw4ICs2OCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3BhY2Uo
dWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3Q7CiAgICAgdm9pZCBhc2tGb3JNb3JlU3BhY2Uo
dWludDY0X3Qgc3BhY2VJbmNyZWFzZSk7CiAKLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVl
ZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsK
KyAgICB2b2lkIHN5bmNVc2Vyc0lmTmVlZGVkKCk7CisgICAgdm9pZCBhc2tVc2VyVG9TeW5jKFN0
b3JhZ2VRdW90YVVzZXImKTsKKyAgICB2b2lkIHN5bmNTZWxlY3RlZFVzZXJzKCk7CiAKICAgICBl
bnVtIGNsYXNzIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHsgTm8sIFllcyB9Owog
ICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4sIFNob3Vs
ZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0KTsKQEAgLTc4LDEzICs4MCwxNSBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UgeyBmYWxzZSB9
OwogICAgIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyOwog
Ci0gICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07Ci0gICAg
SGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBtX3BlbmRp
bmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hTZXQ8Y29uc3QgU3RvcmFnZVF1b3RhVXNl
cio+IG1fdXNlcnM7CisgICAgZW51bSBjbGFzcyBJc1N5bmNDYWxsZWQgeyBObywgWWVzIH07Cisg
ICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgSXNTeW5jQ2FsbGVkPiBtX3BlbmRpbmdVc2Vy
czsKKyAgICBIYXNoU2V0PFN0b3JhZ2VRdW90YVVzZXIqPiBtX2FjdGl2ZVVzZXJzOwogCiAgICAg
c3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsKICAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZTsK
ICAgICAgICAgUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrOworICAgICAgICBlbnVtIGNsYXNzIFN0
YXRlIHsgVW5oYW5kbGVkLCBTeW5jUmVxdWVzdGVkLCBTcGFjZUluY3JlYXNlUmVxdWVzdGVkIH07
CisgICAgICAgIFN0YXRlIHN0YXRlIHsgU3RhdGU6OlVuaGFuZGxlZCB9OwogICAgIH07CiAgICAg
RGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3RzOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKaW5kZXggYjQyMzBjNWUxMmQwOTRkNjk5ZTFl
Mjk5NzkxNjRhZjViN2M4MzhlMC4uZTM1Mjg0YjdkMjk3YmM5OWRiZmM2NDQ1NTE4ZTQ5OWIzMDhi
ZWZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKQEAgLTM0
LDcgKzM0LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0b3JhZ2VRdW90YVVzZXIoKSA9IGRl
ZmF1bHQ7CiAKICAgICB2aXJ0dWFsIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9CisgICAgdmlydHVhbCB2b2lkIHN5bmNTcGFjZVVz
ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY2FuU3luY1NwYWNlTW9kaWZpZWRPbmx5KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCAwNDc1YjNiY2Fm
NDJiNGVjYWQ0YzhmOTAxZWNmOTViMTA0YTkzY2JiLi42NzNmNTg5YjgxMjJjZjEyOWRhZDY0YjRj
M2QxYWJlZjhjYTZlMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcApAQCAtMjU0OCwxNiArMjU0OCwxNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjpyZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
Q2xpZW50TwogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNl
c3Npb25JRCwgb3JpZ2luLCBxdW90YSwgY3VycmVudFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RG
TW92ZShjYWxsYmFjayksIDApOwogfQogCi1jbGFzcyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5h
bCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2NsYXNzIER1bW15UXVvdGFV
c2VyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFF1b3RhVXNlckluaXRp
YWxpemVyKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCisgICAgZXhwbGljaXQgRHVtbXlR
dW90YVVzZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKICAgICAgICAgOiBtX21hbmFn
ZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCiAgICAgewogICAgICAgICBtYW5hZ2VyLmFkZFVzZXIo
KnRoaXMpOwogICAgIH0KIAotICAgIH5RdW90YVVzZXJJbml0aWFsaXplcigpCisgICAgfkR1bW15
UXVvdGFVc2VyKCkKICAgICB7CiAgICAgICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgICAgICBt
X21hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwpAQCAtMjU3Myw3ICsyNTczLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAorICAgIHZvaWQgc3lu
Y1NwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCiAg
ICAgewogICAgICAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CiAgICAgfQpAQCAt
MjU4NCw3ICsyNTg0LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlh
bGl6ZVF1b3RhVXNlcnMoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNl
c3Npb25JRCwgb3JpZ2luLCB1c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4o
bWFuYWdlcildKCkgbXV0YWJsZSB7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlz
LCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwgdXNlciA9
IG1ha2VVbmlxdWU8RHVtbXlRdW90YVVzZXI+KG1hbmFnZXIpXSgpIG11dGFibGUgewogICAgICAg
ICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLT5pZGJT
ZXJ2ZXIoc2Vzc2lvbklEKS5pbml0aWFsaXplUXVvdGFVc2VyKG9yaWdpbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5jcHAKaW5kZXggMjM4Nzk0MTZmZmRjM2QyMTMwNjdkMWUyNzk1MTdlZTE0
Y2JiNWE2Yy4uYjRiMzU4OWNjNzVhODE2ODUwNGY1NzAxNGQ5MzA4ODI4MjEwM2FlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtNzQsNyArNzQsNyBAQCBDYWNoZXM6On5DYWNo
ZXMoKQogICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7CiB9CiAKLXZv
aWQgQ2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNh
bGxiYWNrKQordm9pZCBDYWNoZXM6OnN5bmNTcGFjZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrKQogewogICAgIGluaXRpYWxpemUoW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikKQEAg
LTYwOCwxMCArNjA4LDggQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29uc3QgTmV0
d29ya0NhY2hlOjpLZXkmIGtleSkKIHZvaWQgQ2FjaGVzOjpyZXNldFNwYWNlVXNlZCgpCiB7CiAg
ICAgbV9zaXplID0gMDsKLSAgICBpZiAobV9xdW90YU1hbmFnZXIpIHsKLSAgICAgICAgbV9xdW90
YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBtX3F1b3RhTWFuYWdlci0+YWRk
VXNlcigqdGhpcyk7Ci0gICAgfQorICAgIGlmIChtX3F1b3RhTWFuYWdlcikKKyAgICAgICAgbV9x
dW90YU1hbmFnZXItPnVzZXJOZWVkU3luYygqdGhpcyk7CiB9CiAKIHZvaWQgQ2FjaGVzOjpjbGVh
ck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IDNj
NDUxYTcyM2UxZTkyZjU1OWY2ZmJjZWY3ZjFmMzMxMTg5MDJmYWUuLmYyZDQ2MGI4ZmY0NDRmNzFl
ZGFiYWQ1YmM1N2RjNzljOGYxY2JjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAt
OTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNrKFdURjo6
RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01DYWNoZUVu
Z2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6
OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLSAgICB2b2lkIHdoZW5J
bml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOworICAgIHZvaWQg
c3luY1NwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwogCiAgICAg
dm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxi
YWNrJiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRPcmlnaW4+IHJlYWRP
cmlnaW4oY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379152</attachid>
            <date>2019-09-19 12:31:03 -0700</date>
            <delta_ts>2019-09-19 21:47:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190919123103.patch</filename>
            <type>text/plain</type>
            <size>55331</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTFlM2I3MGY2NzI1ODdi
MTVmNThiMGUyZjFhNTUzYjIwYjliNzAwYS4uZjYyZmVlODJjOTRjMzNkZmEwOGJlODkxZTczM2E2
ZWNlYjc4YTVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE5LTA5LTE5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ3VycmVudGx5IHdlIHJlYWQgc2l6ZSBvZiBJbmRleGVkREIgZGF0YWJhc2UgZmls
ZXMgd2hlbiBhIGRhdGFiYXNlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuIFRoaXMgY291bGQgYmUg
c2xvdyBpZgorICAgICAgICB0aGVyZSBhcmUgbWFueSBzcGFjZSBpbmNyZWFzZSBvcGVyYXRpb25z
LiAKKyAgICAgICAgQW4gZWZmaWNpZW50IGFsdGVybmF0aXZlIGlzIHRvIGNvbXB1dGUgdGhlIHNw
YWNlIGF2YWlsYWJsZSwgZXN0aW1hdGUgc3BhY2UgaW5jcmVhc2UgZm9yIGVhY2ggb3BlYXJ0aW9u
LCBhbmQgcmVhZAorICAgICAgICB0aGUgZmlsZSBzaXplIG9ubHkgd2hlbiB0aGUgYWNjdW11bGF0
ZWQgZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJlLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRT
cGFjZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3Rh
VXNlcjo6c3luY1NwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6UXVvdGFVc2VyOjpkaWRTeW5jU3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmRpZFN5bmNTcGFjZVVzZWRNb2RpZmllZE9u
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0
aW5nU3BhY2VVc2VkRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3Bh
Y2VVc2VkQ2hhbmdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpjb21wdXRlU3BhY2VVc2VkQ2hhbmdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VG
b3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluY3Jl
YXNlRXN0aW1hdGVkU3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURC
U2VydmVyOjpob2xkU3BhY2VHcmFudGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
SURCU2VydmVyOjpyZWxlYXNlU3BhY2VHcmFudGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6SURCU2VydmVyOjpkYXRhYmFzZVdpbGxCZU9wZW5lZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGF0YWJhc2VJc0Nsb3NlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbmNyZWFzZVNwYWNlVXNlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFV
c2VyOjpkZWNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjp3aGVuSW5pdGlhbGl6ZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlh
bGl6ZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6aW5jcmVhc2VTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNl
VXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZnVs
bERhdGFiYXNlRGlyZWN0b3J5V2l0aFVwZ3JhZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZUZvcklkZW50aWZpZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZpbGVu
YW1lRm9yRGF0YWJhc2VOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpk
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c2NoZWR1bGVTaHV0
ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRp
YXRlQ2xvc2VGb3JVc2VyRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Zm9y
Z2V0RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICog
c3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnNwYWNlVXNhZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6c3luY1VzZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OnJlbW92ZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6dXNlck5lZWRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnN5bmNTZWxlY3RlZFVzZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRv
SW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5h
Z2VyLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjpzeW5jU3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YVVzZXI6OmNhblN5bmNTcGFjZU1vZGlmaWVkT25seSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjp3aGVuSW5pdGlhbGl6ZWQpOiBEZWxl
dGVkLgorCiAyMDE5LTA5LTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBUdXJuIHN0YXRpYyBEb2N1bWVudFJ1bGVTZXRzOjpzX2lzSW52YWxpZGF0aW5nU3R5
bGVXaXRoUnVsZVNldHMgYXNzZXJ0aW9uIGJpdCBpbnRvIGEgbWVtYmVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDA0
OTMyNzFmMWFmYjhkMWEwZGIwNGUzOTBlNzI5YzUzMjUxZTEwNTAuLjY0NDlmNDYyZTc4NGIxOTA4
NjQyMWI0N2JlNjAyNDE1N2ZkMzQ3MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTkt
MDktMTkgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRl
IGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERCIG9ubHkgd2hlbiBlc3RpbWF0ZWQgaW5jcmVhc2UgaXMg
YmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVRdW90YVVzZXJzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6c3luY1NwYWNlVXNl
ZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNl
ZCk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjp3aGVuSW5pdGlhbGl6
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFn
ZUVuZ2luZUNhY2hlcy5oOgorCiAyMDE5LTA5LTE4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaCAvIFBsdWdJbkRp
ZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24gSVBDIHNob3VsZCBub3QgbmVlZCB0byBwYXNzIGEgU2Vz
c2lvbklECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuY3BwCmluZGV4IGI1OWVkN2YyMjQ0NzA0MTQ3ZmQxOTBhMWQxN2ZhODk0ZDM5
ZmNiMGMuLjA4ZTZlMDdiODRhZjU1NzU2N2JiNDI2YWIxYzM1NDA4NDk1OTk0OTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwCkBAIC02OTcsNyArNjk3LDYgQEAgSURCU2VydmVyOjpRdW90YVVzZXI6OlF1b3RhVXNlcihJ
REJTZXJ2ZXImIHNlcnZlciwgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlciwKICAgICA6IG1f
c2VydmVyKHNlcnZlcikKICAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKICAg
ICAsIG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3Nl
cnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogewogICAgIGlmIChtYW5hZ2VyKQogICAg
ICAgICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKQEAgLTcxMSw2MCArNzEwLDQxIEBAIElEQlNl
cnZlcjo6UXVvdGFVc2VyOjp+UXVvdGFVc2VyKCkKIAogdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNl
cjo6cmVzZXRTcGFjZVVzZWQoKQogewotICAgIG1fc3BhY2VVc2VkID0gMDsKLSAgICBtX2VzdGlt
YXRlZFNwYWNlSW5jcmVhc2UgPSAwOwotCi0gICAgaWYgKCFtX21hbmFnZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKCFtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spOwotCi0gICAgbV9pc0lu
aXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICAvLyBEbyBhZGQvcmVtb3ZlIHRvIHRyaWdnZXIgY2Fs
bCB0byB3aGVuSW5pdGlhbGl6ZWQuCi0gICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsK
LSAgICBtX21hbmFnZXItPmFkZFVzZXIoKnRoaXMpOworICAgIG1fc2hvdWxkU3luY1NwYWNlQ29t
cGxldGVseSA9IHRydWU7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT51
c2VyTmVlZFN5bmMoKnRoaXMpOwogfQogCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbmNy
ZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQordm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6
c3luY1NwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCiB7Ci0g
ICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9z
cGFjZVVzZWQgKyBzaXplID4gbV9zcGFjZVVzZWQpOwotICAgIG1fc3BhY2VVc2VkICs9IHNpemU7
Ci19Ci12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRf
dCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7
Ci19CisgICAgbV9zeW5jQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLXZv
aWQgSURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAg
ICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5pdGlhbGl6
YXRpb25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0YXJ0Q29t
cHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKKyAgICBpZiAobV9zaG91bGRTeW5j
U3BhY2VDb21wbGV0ZWx5KSB7CisgICAgICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VV
c2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKKyAgICAgICAgbV9zaG91bGRTeW5jU3BhY2VDb21wbGV0
ZWx5ID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5n
U3BhY2VVc2VkQ2hhbmdlRm9yT3JpZ2luKG1fb3JpZ2luKTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6
OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpCit2b2lk
IElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRTeW5jU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNl
ZCkKIHsKLSAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkIHx8ICFtX2VzdGltYXRlZFNwYWNlSW5j
cmVhc2UpOwogICAgIG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOwotICAgIG1faXNJbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKKyAgICBBU1NFUlQo
IW1fc3luY0NhbGxiYWNrcy5pc0VtcHR5KCkpOworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3N5bmND
YWxsYmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soKTsKK30KIAotICAgIGlmIChhdXRv
IGNhbGxiYWNrID0gV1RGTW92ZShtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spKQotICAgICAgICBj
YWxsYmFjaygpOwordm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6ZGlkU3luY1NwYWNlVXNlZE1v
ZGlmaWVkT25seSh1aW50NjRfdCBpbmNyZWFzZSwgdWludDY0X3QgZGVjcmVhc2UpCit7CisgICAg
aWYgKGluY3JlYXNlKQorICAgICAgICBtX3NwYWNlVXNlZCArPSBpbmNyZWFzZTsKKyAgICBpZiAo
ZGVjcmVhc2UpCisgICAgICAgIG1fc3BhY2VVc2VkIC09IGRlY3JlYXNlOworICAgIG1fZXN0aW1h
dGVkU3BhY2VJbmNyZWFzZSA9IDA7CisgICAgQVNTRVJUKCFtX3N5bmNDYWxsYmFja3MuaXNFbXB0
eSgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9zeW5jQ2FsbGJhY2tzLnRha2VGaXJzdCgpOwor
ICAgIGNhbGxiYWNrKCk7CiB9CiAKIElEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVu
c3VyZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKQEAgLTc3Niw3ICs3NTYs
MTEgQEAgSURCU2VydmVyOjpRdW90YVVzZXImIElEQlNlcnZlcjo6ZW5zdXJlUXVvdGFVc2VyKGNv
bnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogCiB2b2lkIElEQlNlcnZlcjo6c3RhcnRDb21wdXRp
bmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAg
QVNTRVJUKCFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKKyAgICBpZiAobV9zZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSkgeworICAgICAgICBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmln
aW4ob3JpZ2luLCBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5lc3RpbWF0ZWRTcGFjZVVzZWQoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdp
biwgb3JpZ2luKSk7CiB9CiAKQEAgLTc4OSwxMiArNzczLDY0IEBAIHZvaWQgSURCU2VydmVyOjpj
b21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogICAg
IGF1dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6
ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4u
Y2xpZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwogICAgIGF1dG8gc2l6
ZSA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRW
ZXJzaW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2Vz
U2l6ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIAorICAgIFZlY3Rv
cjxJREJEYXRhYmFzZUlkZW50aWZpZXI+IGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nOworICAgIGZv
ciAoYXV0byYgW2lkZW50aWZpZXIsIHZhbHVlXSA6IG1fbW9kaWZpZWREYXRhYmFzZVNpemVNYXAp
IHsKKyAgICAgICAgaWYgKHZhbHVlLnNlY29uZCA9PSBJc0Nsb3NlZDo6Tm8pCisgICAgICAgICAg
ICB2YWx1ZS5maXJzdCA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VTaXplRm9ySWRl
bnRpZmllcihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nLmFwcGVuZChpZGVudGlmaWVy
KTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBkYXRhYmFzZXNUb1N0b3BU
cmFja2luZykKKyAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcC5yZW1vdmUoaWRlbnRp
Zmllcik7CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4sIG9y
aWdpbiwgc2l6ZSkpOwogfQogCiB2b2lkIElEQlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VV
c2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVz
ZWQpCiB7Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5pdGlhbGl6ZVNwYWNlVXNlZChz
cGFjZVVzZWQpOworICAgIGlmIChhdXRvKiB1c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4p
KQorICAgICAgICB1c2VyLT5kaWRTeW5jU3BhY2VVc2VkKHNwYWNlVXNlZCk7Cit9CisKK3ZvaWQg
SURCU2VydmVyOjpzdGFydENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSkgeworICAgICAgICBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4ob3Jp
Z2luLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpjb21wdXRlU3BhY2VV
c2VkQ2hhbmdlRm9yT3JpZ2luLCBvcmlnaW4pKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmNvbXB1
dGVTcGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7
CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBWZWN0b3I8SURCRGF0YWJhc2VJ
ZGVudGlmaWVyPiBkYXRhYmFzZXNUb1N0b3BUcmFja2luZzsKKyAgICB1aW50NjRfdCBpbmNyZWFz
ZSA9IDAsIGRlY3JlYXNlID0gMDsKKyAgICBmb3IgKGF1dG8mIFtpZGVudGlmaWVyLCB2YWx1ZV0g
OiBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwKSB7CisgICAgICAgIGF1dG8gY3VycmVudFNpemUg
PSBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZUZvcklkZW50aWZpZXIoaWRlbnRp
ZmllciwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgICAgICBpZiAoY3VycmVudFNpemUg
PiB2YWx1ZS5maXJzdCkKKyAgICAgICAgICAgIGluY3JlYXNlICs9IGN1cnJlbnRTaXplIC0gdmFs
dWUuZmlyc3Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlY3JlYXNlICs9IHZhbHVlLmZp
cnN0IC0gY3VycmVudFNpemU7CisgICAgICAgIHZhbHVlLmZpcnN0ID0gY3VycmVudFNpemU7CisK
KyAgICAgICAgaWYgKHZhbHVlLnNlY29uZCA9PSBJc0Nsb3NlZDo6WWVzKQorICAgICAgICAgICAg
ZGF0YWJhc2VzVG9TdG9wVHJhY2tpbmcuYXBwZW5kKGlkZW50aWZpZXIpOworICAgIH0KKworICAg
IGZvciAoYXV0byYgaWRlbnRpZmllciA6IGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nKQorICAgICAg
ICBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLnJlbW92ZShpZGVudGlmaWVyKTsKKworICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2
ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbiwgb3JpZ2luLCBpbmNy
ZWFzZSwgZGVjcmVhc2UpKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1Nw
YWNlVXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0
X3QgaW5jcmVhc2UsIHVpbnQ2NF90IGRlY3JlYXNlKQoreworICAgIGlmIChhdXRvKiB1c2VyID0g
bV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQorICAgICAgICB1c2VyLT5kaWRTeW5jU3BhY2VVc2Vk
TW9kaWZpZWRPbmx5KGluY3JlYXNlLCBkZWNyZWFzZSk7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpy
ZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXpl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4m
JiBjYWxsYmFjaykKQEAgLTgwOCwzMCArODQ0LDQ2IEBAIHZvaWQgSURCU2VydmVyOjpyZXF1ZXN0
U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21w
CiAgICAgcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2UodGFza1NpemUsIFdURk1vdmUoY2FsbGJh
Y2spKTsKIH0KIAordm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2VkKGNv
bnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQoreworICAgIGlmIChhdXRv
KiB1c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQorICAgICAgICB1c2VyLT5pbmNyZWFz
ZUVzdGltYXRlZFNwYWNlVXNlZChzaXplKTsKK30KKwogdm9pZCBJREJTZXJ2ZXI6OnJlc2V0U3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewogICAgIGlmIChhdXRvKiB1c2Vy
ID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQogICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNl
ZCgpOwogfQogCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50
T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCit2b2lkIElEQlNlcnZlcjo6aG9sZFNwYWNl
R3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VTaXplKQog
ewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUpOwor
ICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmhvbGRTcGFjZUdyYW50ZWQoc3BhY2VTaXplKTsK
IH0KIAotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQordm9pZCBJREJTZXJ2ZXI6OnJlbGVhc2VTcGFjZUdy
YW50ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlU2l6ZSkKIHsK
LSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVNwYWNlVXNlZChzaXplKTsKKyAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5yZWxlYXNlU3BhY2VHcmFudGVkKHNwYWNlU2l6ZSk7
CiB9CiAKLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBJREJTZXJ2
ZXI6OmRhdGFiYXNlV2lsbEJlT3BlbmVkKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmllcikKIHsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVBvdGVudGlh
bFNwYWNlVXNlZCh0YXNrU2l6ZSk7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBhdXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0
aElzb2xhdGVkQ29weSgpOworICAgIGF1dG8gc2l6ZUJlZm9yZU9wZW4gPSBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlU2l6ZUZvcklkZW50aWZpZXIoaWRlbnRpZmllciwgZGF0YWJhc2VE
aXJlY3RvcnlQYXRoKTsKKyAgICBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLnNldChpZGVudGlm
aWVyLCBzdGQ6Om1ha2VfcGFpcihzaXplQmVmb3JlT3BlbiwgSXNDbG9zZWQ6Ok5vKSk7CisgICAg
cmV0dXJuIHNpemVCZWZvcmVPcGVuOwogfQogCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VQb3Rl
bnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNl
VXNlZCkKK3ZvaWQgSURCU2VydmVyOjpkYXRhYmFzZUlzQ2xvc2VkKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5k
ZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChzcGFjZVVzZWQpOworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworCisgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZVNpemVNYXAuY29udGFpbnMo
aWRlbnRpZmllcikpIHsKKyAgICAgICAgYXV0byBzaXplID0gbV9tb2RpZmllZERhdGFiYXNlU2l6
ZU1hcC5nZXQoaWRlbnRpZmllcikuZmlyc3Q7CisgICAgICAgIG1fbW9kaWZpZWREYXRhYmFzZVNp
emVNYXAuc2V0KGlkZW50aWZpZXIsIHN0ZDo6bWFrZV9wYWlyKHNpemUsIElzQ2xvc2VkOjpZZXMp
KTsKKyAgICB9CiB9CiAKIHZvaWQgSURCU2VydmVyOjp1cGdyYWRlRmlsZXNJZk5lY2Vzc2FyeSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmgKaW5kZXggMTllNjk2MmVkMTlhYmE1NDAzMmNhMDQ0NzI0ZWQxMTE1MzU0YTVhZi4uN2Qy
ZmYzNjMzOTEyZjEzMjJjNGMyNGZlNDdjYzE2YWVjODI1Mzc5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTE0LDEx
ICsxMTQsMTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxl
dGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+Jiwg
RnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKICAgICB2b2lkIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOwotICAgIHZv
aWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgdGFza1NpemUpOwotICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3Qg
Q2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwotICAgIHZvaWQgaW5jcmVhc2VTcGFj
ZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9pZCBkZWNy
ZWFzZVNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKKyAgICB2
b2lkIGhvbGRTcGFjZUdyYW50ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1Np
emUpOworICAgIHZvaWQgcmVsZWFzZVNwYWNlR3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1
aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgdm9pZCBpbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNlZChj
b25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKICAgICB2b2lkIHJlc2V0U3BhY2VV
c2VkKGNvbnN0IENsaWVudE9yaWdpbiYpOworICAgIGVudW0gY2xhc3MgSXNDbG9zZWQgeyBObywg
WWVzIH07CisgICAgdWludDY0X3QgZGF0YWJhc2VXaWxsQmVPcGVuZWQoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBkYXRhYmFzZUlzQ2xvc2VkKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYpOwogCiAgICAgdm9pZCBpbml0aWFsaXplUXVvdGFVc2VyKGNvbnN0IENs
aWVudE9yaWdpbiYgb3JpZ2luKSB7IGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pOyB9CiAKQEAgLTE1
Miw0MSArMTU0LDUxIEBAIHByaXZhdGU6CiAKICAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdlciog
bWFuYWdlcigpIHsgcmV0dXJuIG1fbWFuYWdlci5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgc2V0
U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsg
fQogICAgICAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CiAKLSAgICAgICAgdm9pZCBpbmNyZWFz
ZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBpbmNyZWFzZSkgeyBtX2VzdGltYXRlZFNwYWNl
SW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0KLSAgICAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNw
YWNlVXNlZCh1aW50NjRfdCBkZWNyZWFzZSkKKyAgICAgICAgdm9pZCBob2xkU3BhY2VHcmFudGVk
KHVpbnQ2NF90IHNpemUpIHsgbV9zcGFjZVJlc2VydmVkICs9IHNpemU7IH0KKyAgICAgICAgdm9p
ZCByZWxlYXNlU3BhY2VHcmFudGVkKHVpbnQ2NF90IHNpemUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPj0gZGVjcmVhc2UpOwotICAgICAg
ICAgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlIC09IGRlY3JlYXNlOworICAgICAgICAgICAg
QVNTRVJUKG1fc3BhY2VSZXNlcnZlZCA+PSBzaXplKTsKKyAgICAgICAgICAgIG1fc3BhY2VSZXNl
cnZlZCAtPSBzaXplOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgaW5jcmVhc2VTcGFjZVVzZWQo
dWludDY0X3Qgc2l6ZSk7Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qg
c2l6ZSk7CisgICAgICAgIHZvaWQgaW5jcmVhc2VFc3RpbWF0ZWRTcGFjZVVzZWQodWludDY0X3Qg
c2l6ZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gc2l6ZTsgfQogCi0gICAgICAgIHZv
aWQgaW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpOworICAgICAgICB2b2lk
IHN5bmNTcGFjZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKKyAgICAg
ICAgdm9pZCBkaWRTeW5jU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7CisgICAgICAgIHZv
aWQgZGlkU3luY1NwYWNlVXNlZE1vZGlmaWVkT25seSh1aW50NjRfdCBpbmNyZWFzZSwgdWludDY0
X3QgZGVjcmVhc2UpOworCisgICAgICAgIHVpbnQ2NF90IGVzdGltYXRlZFNwYWNlVXNlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOyB9CiAK
ICAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsgfQotICAgICAg
ICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFs
OworICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Nw
YWNlVXNlZCArIG1fc3BhY2VSZXNlcnZlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsgfQor
ICAgICAgICBib29sIGNhblN5bmNTcGFjZU1vZGlmaWVkT25seSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwogICAgICAgICBXZWFr
UHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKKyAgICAgICAgYm9vbCBtX3Nob3Vs
ZFN5bmNTcGFjZUNvbXBsZXRlbHkgeyB0cnVlIH07CiAgICAgICAgIENsaWVudE9yaWdpbiBtX29y
aWdpbjsKLSAgICAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQgeyBmYWxzZSB9OworICAgICAgICAv
LyBTcGFjZSBpbiB1c2UuCiAgICAgICAgIHVpbnQ2NF90IG1fc3BhY2VVc2VkIHsgMCB9OworICAg
ICAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBvbmdvaW5nIHRhc2tzLgorICAgICAgICB1aW50NjRf
dCBtX3NwYWNlUmVzZXJ2ZWQgeyAwIH07CisgICAgICAgIC8vIEVzdGltYXRlZCBzcGFjZSBpbmNy
ZWFzZSBmb3IgZmluaXNoZWQgdGFza3Mgc2luY2UgbGFzdCBzeW5jLgogICAgICAgICB1aW50NjRf
dCBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgeyAwIH07Ci0gICAgICAgIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4gbV9pbml0aWFsaXphdGlvbkNhbGxiYWNrOworICAgICAgICBEZXF1ZTxDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBtX3N5bmNDYWxsYmFja3M7CiAgICAgfTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIFF1b3RhVXNlciYgZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdp
biYpOwogICAgIHZvaWQgc3RhcnRDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xp
ZW50T3JpZ2luJik7CiAgICAgdm9pZCBjb21wdXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENs
aWVudE9yaWdpbiYpOwogICAgIHZvaWQgZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2lu
KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNwYWNlVXNlZCk7CisgICAgdm9pZCBzdGFy
dENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsK
KyAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3Jp
Z2luJik7CisgICAgdm9pZCBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4o
Y29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgaW5jcmVhc2UsIHVpbnQ2NF90IGRlY3JlYXNl
KTsKIAogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogICAgIEhhc2hNYXA8SURCQ29u
bmVjdGlvbklkZW50aWZpZXIsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5l
Y3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVl
X3B0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CisgICAgSGFz
aE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6cGFpcjx1aW50NjRfdCwgSXNDbG9zZWQ+
PiBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25zOwogICAgIEhh
c2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
Kj4gbV90cmFuc2FjdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4
IDI3OWIzMTU5MTZiZDM5ZDhkNGE4NjA2ZTcwNWRiN2U1NWQxOWFlNzAuLmIzOGQyN2I2NzdjODdl
MTRkMzFmNWU5ZmVkNzAzNzg2Y2MwNDk2NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCkBAIC03MjIsMTQgKzcyMiwxNCBAQCBTdHJpbmcgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpkYXRhYmFzZU5hbWVGcm9tRW5jb2RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZW5jbwogICAg
IHJldHVybiBGaWxlU3lzdGVtOjpkZWNvZGVGcm9tRmlsZW5hbWUocGFydGlhbGx5RGVjb2RlZCk7
CiB9CiAKLVN0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0YWJhc2VO
YW1lKCkgY29uc3QKK1N0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0
YWJhc2VOYW1lKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKQogewotICAgIEFTU0VSVCghbV9p
ZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIWRhdGFiYXNl
TmFtZS5pc051bGwoKSk7CiAKLSAgICBpZiAobV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLmlz
RW1wdHkoKSkKKyAgICBpZiAoZGF0YWJhc2VOYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
ICIlMDAiOwogCi0gICAgU3RyaW5nIGZpbGVuYW1lID0gRmlsZVN5c3RlbTo6ZW5jb2RlRm9yRmls
ZU5hbWUobV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKTsKKyAgICBTdHJpbmcgZmlsZW5hbWUg
PSBGaWxlU3lzdGVtOjplbmNvZGVGb3JGaWxlTmFtZShkYXRhYmFzZU5hbWUpOwogICAgIGZpbGVu
YW1lLnJlcGxhY2UoJy4nLCAiJTJFIik7CiAKICAgICByZXR1cm4gZmlsZW5hbWU7CkBAIC03Njcs
NyArNzY3LDcgQEAgU3RyaW5nIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZnVsbERhdGFiYXNlRGly
ZWN0b3J5V2l0aFVwZ3JhZGUoKQogewogICAgIGF1dG8gZGF0YWJhc2VSb290RGlyZWN0b3J5ID0g
dGhpcy0+ZGF0YWJhc2VSb290RGlyZWN0b3J5SXNvbGF0ZWRDb3B5KCk7CiAgICAgU3RyaW5nIG9s
ZE9yaWdpbkRpcmVjdG9yeSA9IG1faWRlbnRpZmllci5kYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZl
VG9Sb290KGRhdGFiYXNlUm9vdERpcmVjdG9yeSwgInYwIik7Ci0gICAgU3RyaW5nIG9sZERhdGFi
YXNlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9sZE9y
aWdpbkRpcmVjdG9yeSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSk7CisgICAgU3RyaW5nIG9s
ZERhdGFiYXNlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KG9sZE9yaWdpbkRpcmVjdG9yeSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUobV9pZGVudGlmaWVy
LmRhdGFiYXNlTmFtZSgpKSk7CiAgICAgU3RyaW5nIG5ld09yaWdpbkRpcmVjdG9yeSA9IG1faWRl
bnRpZmllci5kYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KGRhdGFiYXNlUm9vdERpcmVj
dG9yeSwgInYxIik7CiAgICAgU3RyaW5nIGZpbGVOYW1lSGFzaCA9IFNRTGl0ZUZpbGVTeXN0ZW06
OmNvbXB1dGVIYXNoRm9yRmlsZU5hbWUobV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKTsKICAg
ICBWZWN0b3I8U3RyaW5nPiBkaXJlY3Rvcmllc1dpdGhTYW1lSGFzaCA9IEZpbGVTeXN0ZW06Omxp
c3REaXJlY3RvcnkobmV3T3JpZ2luRGlyZWN0b3J5LCBmaWxlTmFtZUhhc2ggKyAiKiIpOwpAQCAt
ODYxLDYgKzg2MSwyMCBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNl
U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmls
ZVNpemUoZnVsbERhdGFiYXNlUGF0aCgpKTsKIH0KIAordWludDY0X3QgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpkYXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiByb290RGlyZWN0b3J5KQoreworICAgIGF1
dG8gb2xkT3JpZ2luRGlyZWN0b3J5ID0gaWRlbnRpZmllci5kYXRhYmFzZURpcmVjdG9yeVJlbGF0
aXZlVG9Sb290KHJvb3REaXJlY3RvcnksICJ2MCIpOworICAgIGF1dG8gb2xkRGF0YWJhc2VEaXJl
Y3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob2xkT3JpZ2luRGly
ZWN0b3J5LCBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZShpZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgp
KSk7CisgICAgYXV0byBvbGREYXRhYmFzZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQob2xkRGF0YWJhc2VEaXJlY3RvcnksICJJbmRleGVkREIuc3FsaXRlMyIpOwor
CisgICAgYXV0byBvcmlnaW5EaXJlY3RvcnkgPSBpZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5
UmVsYXRpdmVUb1Jvb3Qocm9vdERpcmVjdG9yeSwgInYxIik7CisgICAgYXV0byBmaWxlTmFtZUhh
c2ggPSBTUUxpdGVGaWxlU3lzdGVtOjpjb21wdXRlSGFzaEZvckZpbGVOYW1lKGlkZW50aWZpZXIu
ZGF0YWJhc2VOYW1lKCkpOworICAgIGF1dG8gZGF0YWJhc2VEaXJlY3RvcnkgPSBGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob3JpZ2luRGlyZWN0b3J5LCBmaWxlTmFtZUhhc2gp
OworICAgIGF1dG8gZGF0YWJhc2VQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGRhdGFiYXNlRGlyZWN0b3J5LCAiSW5kZXhlZERCLnNxbGl0ZTMiKTsKKworICAgIHJl
dHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKG9sZERhdGFiYXNlUGF0
aCkgKyBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGRhdGFiYXNlUGF0aCk7
Cit9CisKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbiAtICVzIiwgaW5mby5pZGVudGlm
aWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5oCmluZGV4IGJmZDYwNmNhNGVlOTdmNjA2ZWU2YmM0Njg1YTllZmM4YTNkMjgwMWUu
LjBhMDMzN2I4ZGU5MmYyMGNlYjlkZGJhYzIzYzE1Y2RiNWI3Yjc4NGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmgKQEAgLTk4LDEyICs5OCwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFN0cmluZyBmdWxsRGF0YWJhc2VQYXRoRm9yRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwogICAg
IHN0YXRpYyBTdHJpbmcgZGF0YWJhc2VOYW1lRnJvbUZpbGUoY29uc3QgU3RyaW5nJik7CiAKKyAg
ICBzdGF0aWMgdWludDY0X3QgZGF0YWJhc2VTaXplRm9ySWRlbnRpZmllcihjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIHJvb3REaXJlY3RvcnkpOworCiAgICAgYm9v
bCBoYXNUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKSBjb25zdCBmaW5h
bDsKIAogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vz
c2lvbklEOyB9CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1l
KCkgY29uc3Q7CisgICAgc3RhdGljIFN0cmluZyBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZShjb25z
dCBTdHJpbmcmKTsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlUGF0aCgpIGNvbnN0OwogICAgIFN0
cmluZyBmdWxsRGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBncmFkZSgpOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKaW5kZXggYzVkN2E5ODJkNzAxNmE2M2ExOGVmZGYxYjhkNTMyNzkxZDg1
M2NkNy4uYTc4NDM0NGI1MjNiZjQ3N2EwYTM1MDQzZWIxN2M3YzYyMDA1MjUxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuY3BwCkBAIC01NSw2ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAogc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRX
cml0ZU9wZXJhdGlvbkNvc3QgPSA0Oworc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRPcGVu
T3BlcmF0aW9uQ29zdCA9IDEwMCAqIEtCOwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGlt
YXRlU2l6ZShjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQogewpAQCAtMjE1LDI0ICsyMTYsMjIg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkK
ICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1ZTsKICAgICAgICAgICAg
IC8vIFdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlzdGluZyBvciBhIG5ldyBk
YXRhYmFzZS4KICAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNvc3Qgc28gdGhhdCBpdCBp
cyBub3QgcG9zc2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGF0YWJhc2UuCi0g
ICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwg
ZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
dGhpcyldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgeworICAgICAgICAgICAgcmVxdWVzdFNwYWNl
KGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdCwgIm9wZW5EYXRhYmFzZSIsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgICAg
ICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgICAgICAgICBpZiAobV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpEZW55OiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IobV9j
dXJyZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0SWRlbnRpZmllcigpLCBJ
REJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgcXVvdGFFcnJvck1lc3NhZ2VOYW1lKCJvcGVu
RGF0YWJhc2UiKSB9KTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBJREJSZXN1bHREYXRhOjplcnJvcihtX2N1cnJlbnRPcGVu
REJSZXF1ZXN0LT5yZXF1ZXN0RGF0YSgpLnJlcXVlc3RJZGVudGlmaWVyKCksICplcnJvcik7CiAg
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPmNvbm5lY3Rpb24oKS5k
aWRPcGVuRGF0YWJhc2UocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50T3Bl
bkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFj
a2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNh
c2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKLSAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIG1fc2VydmVyLT5ob2xkU3BhY2VHcmFu
dGVkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0KTsKKyAg
ICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZp
ZXIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTM0
NCwxNSArMzQzLDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICBpZiAobV9iYWNr
aW5nU3RvcmUpIHsKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgp
OwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNp
emUoKTsKIAogICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgICAgIG1fYmFj
a2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICAg
ICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGF1dG8gYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVu
dGlmaWVyKTsKLSAgICAgICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gYmFja2luZ1N0b3JlLT5k
YXRhYmFzZVNpemUoKTsKIAorICAgICAgICBtX3NlcnZlci0+ZGF0YWJhc2VXaWxsQmVPcGVuZWQo
aWRlbnRpZmllcik7CiAgICAgICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAg
ICAgIGF1dG8gZXJyb3IgPSBiYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZv
KGRhdGFiYXNlSW5mbyk7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCkBAIC0zNjAsMTMg
KzM1OCwxNCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaQogCiAgICAgICAgIGRlbGV0ZWRWZXJz
aW9uID0gZGF0YWJhc2VJbmZvLnZlcnNpb24oKTsKICAgICAgICAgYmFja2luZ1N0b3JlLT5kZWxl
dGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBiYWNraW5nU3Rv
cmUtPmRhdGFiYXNlU2l6ZSgpOwogICAgIH0KIAorICAgIG1fc2VydmVyLT5kYXRhYmFzZUlzQ2xv
c2VkKGlkZW50aWZpZXIpOworCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3Rv
cmUsIGRlbGV0ZWRWZXJzaW9uKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKCkKK3ZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVu
Y29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUiKTsKQEAgLTM3NCw3ICszNzMsNyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9y
ZSgpCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlKQogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlQmFja2luZ1N0b3JlKCk7CiAKLSAgICBzaHV0ZG93bkZvckNsb3NlKCk7CisgICAgc2h1dGRv
d25Gb3JDbG9zZShpZGVudGlmaWVyKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2No
ZWR1bGVTaHV0ZG93bkZvckNsb3NlKCkKQEAgLTM4NiwyNyArMzg1LDI3IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnNjaGVkdWxlU2h1dGRvd25Gb3JDbG9zZSgpCiAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fb3duaW5nUG9pbnRlckZvckNsb3NlKTsKICAgICBtX293bmluZ1BvaW50ZXJGb3JDbG9z
ZSA9IG1fc2VydmVyLT5jbG9zZUFuZFRha2VVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CiAKLSAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKSk7CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JD
bG9zZSwgbV9pZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRk
b3duRm9yQ2xvc2UoKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fb3duaW5nUG9pbnRlckZvckNsb3NlLmdldCgp
ID09IHRoaXMpOwogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnNodXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgIGlm
IChtX2JhY2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAg
ICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwot
ICAgIH0KIAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9y
ZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CiAgICAgbV9iYWNraW5n
U3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogCisgICAgbV9zZXJ2ZXItPmRhdGFiYXNlSXNDbG9z
ZWQoaWRlbnRpZmllcik7CisKICAgICBpZiAoIW1fZGF0YWJhc2VRdWV1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSkpOworICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpz
aHV0ZG93bkZvckNsb3NlLCBpZGVudGlmaWVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgbV9kYXRhYmFzZVF1ZXVlLmtpbGwoKTsKQEAgLTQxOCw4ICs0MTcsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRTaHV0ZG93bkZvckNsb3NlKCkKIHsKICAgICBBU1NFUlQobV9kYXRh
YmFzZVJlcGx5UXVldWUuaXNFbXB0eSgpKTsKICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1ZS5raWxs
KCk7Ci0KLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOwogfQogCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24p
CkBAIC00NTEsOCArNDQ4LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFj
a2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQogICAgICAgICBtX2N1cnJlbnRPcGVu
REJSZXF1ZXN0ID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRl
ZCgpOwotCiAgICAgbV9kZWxldGVCYWNraW5nU3RvcmVJblByb2dyZXNzID0gZmFsc2U7CiAKICAg
ICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKQEAgLTU1Miw3ICs1NDcsNyBAQCB1aW50
NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgdQogICAgIG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIs
IFdURk1vdmUoY2FsbGJhY2spKTsKIAogICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3Nl
cnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0
YXNrU2l6ZSk7CisgICAgICAgIG1fc2VydmVyLT5ob2xkU3BhY2VHcmFudGVkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgdGFza1NpemUpOwogICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdU
YXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwogICAgIH0KIApAQCAtNTcyLDcgKzU2Nyw3
IEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
S2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ssCiAgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChp
ZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKICAgICBpZiAodGFza1NpemUpIHsKLSAg
ICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5v
cmlnaW4oKSwgdGFza1NpemUpOworICAgICAgICBtX3NlcnZlci0+aG9sZFNwYWNlR3JhbnRlZCht
X2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKICAgICAgICAgbV9wZW5kaW5nU3BhY2VJ
bmNyZWFzaW5nVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKICAgICB9CiAKQEAgLTc4
NiwxNyArNzgxLDE1IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUo
Y29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgbV9iYWNraW5nU3Rv
cmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5zdXBw
b3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpOwogICAgIG1fYmFja2luZ1N0b3JlSXNFcGhl
bWVyYWwgPSBtX2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKIAotICAgIC8vIFF1b3RhVXNl
ciBzaG91bGQgaGF2ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0
aGUKLSAgICAvLyBzaXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VT
aXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotCisgICAgYXV0byBkYXRhYmFz
ZVNpemVCZWZvcmVPcGVuID0gbV9zZXJ2ZXItPmRhdGFiYXNlV2lsbEJlT3BlbmVkKGlkZW50aWZp
ZXIpOwogICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8p
OwogCi0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8s
IGVycm9yKSk7CisgICAgYXV0byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUJlZm9yZU9w
ZW4gPyAwIDogZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0OworICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
T3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUpKTsK
IH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBp
bmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSIpOwpAQCAtODA3LDcgKzgwMCw5
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJCiAgICAgQVNTRVJUKG1faXNPcGVuaW5nQmFja2lu
Z1N0b3JlKTsKICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwogCi0gICAgdXBk
YXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKKyAgICBtX3NlcnZlci0+cmVsZWFzZVNwYWNlR3JhbnRl
ZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGFjdHVhbFRhc2tTaXplKTsKKyAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCisgICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNlZCht
X2lkZW50aWZpZXIub3JpZ2luKCksIGFjdHVhbFRhc2tTaXplKTsKIAogICAgIGlmIChtX2hhcmRD
bG9zZWRGb3JVc2VyRGVsZXRlKQogICAgICAgICByZXR1cm47CkBAIC0yMTI5LDkgKzIxMjQsNiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKENyb3NzVGhyZWFkVGFz
ayYmIHRhc2spCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBs
eShDcm9zc1RocmVhZFRhc2smJiB0YXNrKQogewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAg
ICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7
Ci0KICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAg
bV9zZXJ2ZXItPnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSkpOwog
fQpAQCAtMjI3MCwzNSArMjI2MiwyNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlh
dGVDbG9zZUZvclVzZXJEZWxldGUoKQogICAgIC8vIE90aGVyd2lzZSwgdGhpcyBkYXRhYmFzZSBp
cyBzdGlsbCBwb3RlbnRpYWxseSBhY3RpdmUuCiAgICAgLy8gU28gd2UnbGwgaGF2ZSBpdCBvd24g
aXRzZWxmIGFuZCB0aGVuIHBlcmZvcm0gYSBjbGVhbiB1bmNvbmRpdGlvbmFsIGRlbGV0ZSBvbiB0
aGUgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAgbV9vd25pbmdQb2ludGVyRm9yQ2xvc2UgPSBtX3Nl
cnZlci0+Y2xvc2VBbmRUYWtlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwotICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKSk7CisgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUsIG1faWRlbnRpZmllcikpOwog
fQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChPcHRp
b25hbDx1aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjp1cGRhdGVTcGFjZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIElzVGFz
a1N1Y2Nlc3NmdWwgaXNTdWNjZXNzZnVsKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKLSAgICBpZiAob3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpIHsKLSAgICAgICAgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyID0gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIudmFsdWUo
KTsKLSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tz
LmZpbmQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVu
ZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmVuZCgpKSB7Ci0gICAgICAgICAgICBtX3NlcnZlci0+
ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRv
ci0+dmFsdWUpOwotICAgICAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MucmVt
b3ZlKGl0ZXJhdG9yKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9w
ZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuZmluZChjYWxsYmFja0lkZW50aWZpZXIpOworICAg
IGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5lbmQoKSkgewor
ICAgICAgICBtX3NlcnZlci0+cmVsZWFzZVNwYWNlR3JhbnRlZChtX2lkZW50aWZpZXIub3JpZ2lu
KCksIGl0ZXJhdG9yLT52YWx1ZSk7CiAKLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25l
d0RhdGFiYXNlU2l6ZTsKLSAgICBpZiAoZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNl
U2l6ZSkgewotICAgICAgICBpZiAoZGF0YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXpl
KQotICAgICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5v
cmlnaW4oKSwgZGF0YWJhc2VTaXplIC0gbV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgbV9jdXJyZW50RGF0YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAg
ICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gZGF0YWJhc2VTaXplOworICAgICAgICBpZiAoaXNT
dWNjZXNzZnVsID09IElzVGFza1N1Y2Nlc3NmdWw6OlllcykKKyAgICAgICAgICAgIG1fc2VydmVy
LT5pbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJh
dG9yLT52YWx1ZSk7CisgICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92
ZShpdGVyYXRvcik7CiAgICAgfQogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
RXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9y
JiBlcnJvcikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZp
ZXIpOworICAgIGF1dG8gaXNUYXNrU3VjY2Vzc2Z1bCA9IGVycm9yLmlzTnVsbCgpID8gSXNUYXNr
U3VjY2Vzc2Z1bDo6WWVzIDogSXNUYXNrU3VjY2Vzc2Z1bDo6Tm87CisgICAgdXBkYXRlU3BhY2Uo
Y2FsbGJhY2tJZGVudGlmaWVyLCBpc1Rhc2tTdWNjZXNzZnVsKTsKIAogICAgIGF1dG8gY2FsbGJh
Y2sgPSBtX2Vycm9yQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NF
UlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CkBAIC0yMzExLDcgKzIy
OTUsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKIHsKLSAgICB1
cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOworICAgIGF1dG8gaXNU
YXNrU3VjY2Vzc2Z1bCA9IGVycm9yLmlzTnVsbCgpID8gSXNUYXNrU3VjY2Vzc2Z1bDo6WWVzIDog
SXNUYXNrU3VjY2Vzc2Z1bDo6Tm87CisgICAgdXBkYXRlU3BhY2UoY2FsbGJhY2tJZGVudGlmaWVy
LCBpc1Rhc2tTdWNjZXNzZnVsKTsKIAogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxs
YmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBt
X2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKQEAgLTIzNTcsNyArMjM0Miw3IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2Vk
SWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKKyAgICB1cGRhdGVTcGFjZShjYWxsYmFja0lk
ZW50aWZpZXIsIElzVGFza1N1Y2Nlc3NmdWw6Ok5vKTsKIAogICAgIEFTU0VSVChtX2Vycm9yQ2Fs
bGJhY2tzLmNvbnRhaW5zKGNhbGxiYWNrSWRlbnRpZmllcikpOwogICAgIEFTU0VSVChtX2NhbGxi
YWNrUXVldWUubGFzdCgpID09IGNhbGxiYWNrSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCmluZGV4IDY4YTVjZWE1NjQzMTNiNTZjMDY0ZjVkM2MzMzI0OWQ1YzgzZjljZmEuLmJhNmU1
YzllYzNkMDAzNjNhYjcyZDVlMDczYjM5ZDNlMmJjYTM5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCkBAIC0xMTYsOCArMTE2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkQ2xvc2VkRm9y
VXNlckRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGU7IH0K
IAotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0OwotCiAgICAgdm9pZCBmaW5pc2hBY3Rp
dmVUcmFuc2FjdGlvbnMoKTsKIAogcHJpdmF0ZToKQEAgLTE4MywxMiArMTgxLDEyIEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjb25z
dCBJREJUcmFuc2FjdGlvbkluZm8mKTsKICAgICB2b2lkIHBlcmZvcm1BY3RpdmF0ZVRyYW5zYWN0
aW9uSW5CYWNraW5nU3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJU
cmFuc2FjdGlvbkluZm8mKTsKLSAgICB2b2lkIHBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFj
a2luZ1N0b3JlKCk7Ci0gICAgdm9pZCBzaHV0ZG93bkZvckNsb3NlKCk7CisgICAgdm9pZCBwZXJm
b3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50
aWZpZXImKTsKKyAgICB2b2lkIHNodXRkb3duRm9yQ2xvc2UoY29uc3QgSURCRGF0YWJhc2VJZGVu
dGlmaWVyJik7CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFja3MKICAgICB2b2lkIGRpZERl
bGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbik7Ci0gICAgdm9pZCBkaWRP
cGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7
CisgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNv
bnN0IElEQkVycm9yJiwgdWludDY0X3QgYWN0dWFsVGFza1NpemUpOwogICAgIHZvaWQgZGlkUGVy
Zm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2b2lkIGRpZFBlcmZv
cm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZFBl
cmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IG5ld05hbWUpOwpAQCAtMjQ5LDcgKzI0Nyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlcXVl
c3RTcGFjZSh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3
YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlv
bmFsPElEQkVycm9yPiYmKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChP
cHRpb25hbDx1aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIgPSBXVEY6Om51bGxv
cHQpOworICAgIGVudW0gY2xhc3MgSXNUYXNrU3VjY2Vzc2Z1bCB7IE5vLCBZZXMgfTsKKyAgICB2
b2lkIHVwZGF0ZVNwYWNlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgSXNUYXNrU3VjY2Vz
c2Z1bCk7CiAKICAgICBSZWY8SURCU2VydmVyPiBtX3NlcnZlcjsKICAgICBJREJEYXRhYmFzZUlk
ZW50aWZpZXIgbV9pZGVudGlmaWVyOwpAQCAtMzAzLDggKzMwMiw2IEBAIHByaXZhdGU6CiAgICAg
SGFzaFNldDxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsKIAogICAg
IEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNr
czsKLSAgICB1aW50NjRfdCBtX2N1cnJlbnREYXRhYmFzZVNpemUgeyAwIH07Ci0gICAgdWludDY0
X3QgbV9uZXdEYXRhYmFzZVNpemUgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmlu
ZGV4IDc2N2FkMmVhZjRhY2NiODMxOTA0NDIyODk3MDY5NDliNzBiMzQzMGUuLmE1MjJlY2IyOTkz
YTI1ZTk1OTcxNWZiZjk1NmE4YWJiMTg0OTI0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApAQCAtNDAsNyArNDAsNyBAQCBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcigpCiB1aW50NjRfdCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpzcGFjZVVzYWdlKCkgY29uc3QKIHsKICAgICB1aW50NjRfdCB1c2FnZSA9IDA7Ci0g
ICAgZm9yIChhdXRvJiB1c2VyIDogbV91c2VycykKKyAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX2Fj
dGl2ZVVzZXJzKQogICAgICAgICB1c2FnZSArPSB1c2VyLT5zcGFjZVVzZWQoKTsKICAgICByZXR1
cm4gdXNhZ2U7CiB9CkBAIC01NCw3NCArNTQsOTIgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCkKICAgICBtX3F1b3RhID0gc3RkOjptYXgo
bV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgoc3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3Rh
U3RlcCkgKyAxKSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVz
ZXJzSWZOZWVkZWQoKQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzeW5jVXNlcnNJZk5lZWRl
ZCgpCiB7Ci0gICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQor
ICAgIGlmIChtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFZlY3RvcjxTdG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb0luaXRpYWxpemU7Ci0gICAgZm9yIChh
dXRvJiBrZXlWYWx1ZSA6IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMpIHsKLSAgICAgICAg
aWYgKGtleVZhbHVlLnZhbHVlID09IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6Tm8pIHsKLSAgICAg
ICAgICAgIGtleVZhbHVlLnZhbHVlID0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpZZXM7Ci0gICAg
ICAgICAgICB1c2Vyc1RvSW5pdGlhbGl6ZS5hcHBlbmQoa2V5VmFsdWUua2V5KTsKLSAgICAgICAg
fQorICAgIFZlY3RvcjxTdG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb1N5bmM7CisgICAgZm9yIChh
dXRvJiBrZXlWYWx1ZSA6IG1fcGVuZGluZ1VzZXJzKSB7CisgICAgICAgIGlmIChrZXlWYWx1ZS52
YWx1ZSA9PSBJc1N5bmNDYWxsZWQ6Ok5vKQorICAgICAgICAgICAgdXNlcnNUb1N5bmMuYXBwZW5k
KGtleVZhbHVlLmtleSk7CiAgICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0
aWFsaXplKSB7Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRh
aW5zKHVzZXIpKQotICAgICAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7CisgICAg
Zm9yIChhdXRvKiB1c2VyIDogdXNlcnNUb1N5bmMpIHsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1Vz
ZXJzLmNvbnRhaW5zKHVzZXIpKQorICAgICAgICAgICAgYXNrVXNlclRvU3luYygqdXNlcik7CiAg
ICAgfQogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUo
U3RvcmFnZVF1b3RhVXNlciYgdXNlcikKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNl
clRvU3luYyhTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIHVzZXIud2hlbkluaXRpYWxp
emVkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7CisgICAg
bV9wZW5kaW5nVXNlcnMuc2V0KCZ1c2VyLCBJc1N5bmNDYWxsZWQ6Olllcyk7CisgICAgdXNlci5z
eW5jU3BhY2VVc2VkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0o
KSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSkKLSAgICAg
ICAgICAgIG1fdXNlcnMuYWRkKCZ1c2VyKTsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmNv
bnRhaW5zKCZ1c2VyKSkgeworICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmdldCgmdXNl
cikgPT0gSXNTeW5jQ2FsbGVkOjpZZXMpIHsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdVc2Vy
cy5yZW1vdmUoJnVzZXIpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlVXNlcnMuYWRkKCZ1c2Vy
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQW5vdGhlciBzeW5j
IHJlcXVlc3QgaXMgcmVjZWl2ZWQgZHVyaW5nIHRoZSBzeW5jaW5nIG9mIHRoZSB1c2VyLgorICAg
ICAgICAgICAgICAgIGFza1VzZXJUb1N5bmModXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0
aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5p
c0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdXBkYXRlUXVvdGFCYXNl
ZE9uU3BhY2VVc2FnZSgpOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSwgU2hv
dWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Ok5vKTsKKyAgICAgICAgcHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0cyh7IH0pOwogICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OmFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKIHsKLSAgICBBU1NFUlQoIW1fcGVuZGlu
Z0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBBU1NFUlQoIW1fdXNl
cnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmFk
ZCgmdXNlciwgV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7CisgICAgQVNTRVJUKCFtX3BlbmRp
bmdVc2Vycy5jb250YWlucygmdXNlcikpOworICAgIEFTU0VSVCghbV9hY3RpdmVVc2Vycy5jb250
YWlucygmdXNlcikpOworICAgIG1fcGVuZGluZ1VzZXJzLmFkZCgmdXNlciwgSXNTeW5jQ2FsbGVk
OjpObyk7CiAKICAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAg
YXNrVXNlclRvSW5pdGlhbGl6ZSh1c2VyKTsKKyAgICAgICAgYXNrVXNlclRvU3luYyh1c2VyKTsK
IH0KIAotYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWlu
dDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVt
b3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIGlmICghc3BhY2VJbmNyZWFz
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNw
YWNlSW5jcmVhc2UgPiBtX3F1b3RhOworICAgIEFTU0VSVChtX2FjdGl2ZVVzZXJzLmNvbnRhaW5z
KCZ1c2VyKSB8fCBtX3BlbmRpbmdVc2Vycy5jb250YWlucygmdXNlcikpOworICAgIG1fYWN0aXZl
VXNlcnMucmVtb3ZlKCZ1c2VyKTsKKyAgICBpZiAobV9wZW5kaW5nVXNlcnMucmVtb3ZlKCZ1c2Vy
KSAmJiBtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpCisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVx
dWVzdHMoeyB9KTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0
b3JhZ2VRdW90YVVzZXImIHVzZXIpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnVzZXJOZWVk
U3luYyhTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIEFTU0VSVChtX3VzZXJzLmNvbnRh
aW5zKCZ1c2VyKSB8fCBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKCZ1c2Vy
KSk7Ci0gICAgbV91c2Vycy5yZW1vdmUoJnVzZXIpOwotICAgIGlmIChtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLnJlbW92ZSgmdXNlcikgJiYgbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vy
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gV2hlbiBiZWluZyBjbGVhcmVkLCBxdW90YSB1c2Vy
cyBtYXkgcmVtb3ZlIHRoZW1zZWx2ZXMgYW5kIGFkZCB0aGVtc2VsdmVzIHRvIHRyaWdnZXIgcmVp
bml0aWFsaXphdGlvbi4KLSAgICAgICAgLy8gTGV0J3Mgd2FpdCBmb3IgYWRkVXNlciB0byBiZSBj
YWxsZWQgYmVmb3JlIHByb2Nlc3NpbmcgcGVuZGluZyByZXF1ZXN0cy4KLSAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
cGVuZGluZ1VzZXJzLmNvbnRhaW5zKCZ1c2VyKSkgeworICAgICAgICBpZiAobV9wZW5kaW5nVXNl
cnMuZ2V0KCZ1c2VyKSA9PSBJc1N5bmNDYWxsZWQ6Ok5vKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIG1fcGVuZGluZ1VzZXJzLnNldCgmdXNlciwgSXNTeW5jQ2FsbGVkOjpObyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2FjdGl2ZVVzZXJzLnJlbW92ZSgmdXNlcik7
CisgICAgbV9wZW5kaW5nVXNlcnMuYWRkKCZ1c2VyLCBJc1N5bmNDYWxsZWQ6Ok5vKTsKKyAgICBp
ZiAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgYXNrVXNlclRvU3luYyh1
c2VyKTsKK30KIAotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
eyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOwotICAgICAgICB9KTsK
K3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6c3luY1NlbGVjdGVkVXNlcnMoKQoreworICAgIGZv
ciAoYXV0byogdXNlciA6IGNvcHlUb1ZlY3RvcihtX2FjdGl2ZVVzZXJzKSkgeworICAgICAgICBp
ZiAodXNlci0+Y2FuU3luY1NwYWNlTW9kaWZpZWRPbmx5KCkpIHsKKyAgICAgICAgICAgIG1fcGVu
ZGluZ1VzZXJzLmFkZCh1c2VyLCBJc1N5bmNDYWxsZWQ6Ok5vKTsKKyAgICAgICAgICAgIG1fYWN0
aXZlVXNlcnMucmVtb3ZlKHVzZXIpOworICAgICAgICB9CiAgICAgfQorCisgICAgc3luY1VzZXJz
SWZOZWVkZWQoKTsKIH0KIAogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2Uo
dWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC0x
MzYsMTUgKzE1NCwyMSBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1
aW50NjRfdCBzcGFjZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKTsKKyAgICBzeW5jVXNlcnNJ
Zk5lZWRlZCgpOwogCi0gICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1w
dHkoKSkgeworICAgIGlmICghbV9wZW5kaW5nVXNlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1f
cGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2sp
IH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHNob3VsZEFza0Zvck1vcmVT
cGFjZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQo
eyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKKyAgICAgICAgc3luY1NlbGVj
dGVkVXNlcnMoKTsKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1v
dmUoY2FsbGJhY2spLCBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlN5bmNSZXF1ZXN0ZWQgfSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0
cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgUGVuZGluZ1JlcXVl
c3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkIH0pOwogICAgICAgICBhc2tGb3JNb3Jl
U3BhY2Uoc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTIsNiAr
MTc2LDE0IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90
IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmCiAgICAgY2FsbGJhY2soRGVjaXNpb246
OkdyYW50KTsKIH0KIAorYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3Jl
U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKK3sKKyAgICBpZiAoIXNwYWNlSW5j
cmVhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzcGFjZVVzYWdlKCkg
KyBzcGFjZUluY3JlYXNlID4gbV9xdW90YTsKK30KKwogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkKIHsKICAgICBBU1NFUlQo
c2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKTsKQEAgLTE2NiwxMSArMTk4LDEx
IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNw
YWNlSW5jcmVhc2UpCiAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1NjQs
IHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7CiAKICAgICAgICAgbV9pc1dhaXRpbmdG
b3JTcGFjZUluY3JlYXNlUmVzcG9uc2UgPSBmYWxzZTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdS
ZXF1ZXN0cyhuZXdRdW90YSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Olllcyk7
CisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEpOwogICAgIH0pOwogfQog
Ci12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9u
YWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCBz
aG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCkKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpCiB7
CiAgICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTgxLDEzICsyMTMsMTMgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSwgU2gKICAgICBpZiAobV9p
c1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCisgICAgaWYgKCFt
X3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzaG91
bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCA9PSBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5n
UmVxdWVzdDo6WWVzKSB7CisgICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkgJiYg
bV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKS5zdGF0ZSA9PSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6
OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQpIHsKICAgICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5k
aW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1ZXN0
ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpOwogCisgICAg
ICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1
ZXN0LnNwYWNlSW5jcmVhc2UpOwogICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3Qg
ZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwogCiAgICAgICAgIHJl
cXVlc3QuY2FsbGJhY2soc2hvdWxkQWxsb3dSZXF1ZXN0ID8gRGVjaXNpb246OkdyYW50IDogRGVj
aXNpb246OkRlbnkpOwpAQCAtMTk1LDExICsyMjcsMTggQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSwg
U2gKIAogICAgIHdoaWxlICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGF1dG8mIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwotCiAgICAgICAgIGlm
IChzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgeworICAgICAg
ICAgICAgaWYgKHJlcXVlc3Quc3RhdGUgPT0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVbmhhbmRs
ZWQpIHsKKyAgICAgICAgICAgICAgICBzeW5jU2VsZWN0ZWRVc2VycygpOworICAgICAgICAgICAg
ICAgIGlmICghbV9wZW5kaW5nVXNlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3Quc3RhdGUgPSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlN5bmNSZXF1ZXN0ZWQ7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlID0gMDsKICAgICAgICAgICAg
IGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ1JlcXVlc3RzKQogICAgICAgICAgICAgICAg
IHNwYWNlSW5jcmVhc2UgKz0gcmVxdWVzdC5zcGFjZUluY3JlYXNlOworICAgICAgICAgICAgcmVx
dWVzdC5zdGF0ZSA9IFBlbmRpbmdSZXF1ZXN0OjpTdGF0ZTo6U3BhY2VJbmNyZWFzZVJlcXVlc3Rl
ZDsKICAgICAgICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaAppbmRleCA5ZjY0NjMzZWQ2NmNjMTJhOTI4M2MwODkxYmQyNTVhZTkzMDQy
YWI3Li4yMjQyMGRhYmVjYzJlN2MwMjhmMGUzNWQ4OWU1YzRkNTMwOWY5ZjhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtNTQsNiArNTQsNyBA
QCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXIoU3RvcmFnZVF1b3Rh
VXNlciYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFV
c2VyJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1c2VyTmVlZFN5bmMoU3RvcmFnZVF1b3Rh
VXNlciYpOwogCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAg
dXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+
OwpAQCAtNjcsMjQgKzY4LDI2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBc2tGb3JNb3Jl
U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3Q7CiAgICAgdm9pZCBhc2tGb3JNb3Jl
U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSk7CiAKLSAgICB2b2lkIGluaXRpYWxpemVVc2Vy
c0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVz
ZXImKTsKKyAgICB2b2lkIHN5bmNVc2Vyc0lmTmVlZGVkKCk7CisgICAgdm9pZCBhc2tVc2VyVG9T
eW5jKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAgICB2b2lkIHN5bmNTZWxlY3RlZFVzZXJzKCk7CiAK
LSAgICBlbnVtIGNsYXNzIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHsgTm8sIFll
cyB9OwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4s
IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0KTsKKyAgICB2b2lkIHByb2Nlc3NQZW5k
aW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+KTsKIAogICAgIHVpbnQ2NF90IG1fcXVvdGEg
eyAwIH07CiAKICAgICBib29sIG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlIHsg
ZmFsc2UgfTsKICAgICBTcGFjZUluY3JlYXNlUmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVl
c3RlcjsKIAotICAgIGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9
OwotICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4g
bV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PGNvbnN0IFN0b3JhZ2VR
dW90YVVzZXIqPiBtX3VzZXJzOworICAgIGVudW0gY2xhc3MgSXNTeW5jQ2FsbGVkIHsgTm8sIFll
cyB9OworICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIElzU3luY0NhbGxlZD4gbV9wZW5k
aW5nVXNlcnM7CisgICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV9hY3RpdmVVc2VyczsK
IAogICAgIHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7CiAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5j
cmVhc2U7CiAgICAgICAgIFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKKyAgICAgICAgZW51bSBj
bGFzcyBTdGF0ZSB7IFVuaGFuZGxlZCwgU3luY1JlcXVlc3RlZCwgU3BhY2VJbmNyZWFzZVJlcXVl
c3RlZCB9OworICAgICAgICBTdGF0ZSBzdGF0ZSB7IFN0YXRlOjpVbmhhbmRsZWQgfTsKICAgICB9
OwogICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3BlbmRpbmdSZXF1ZXN0czsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmluZGV4IGI0MjMwYzVlMTJkMDk0
ZDY5OWUxZTI5OTc5MTY0YWY1YjdjODM4ZTAuLmUzNTI4NGI3ZDI5N2JjOTlkYmZjNjQ0NTUxOGU0
OTliMzA4YmVmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5o
CkBAIC0zNCw3ICszNCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdG9yYWdlUXVvdGFVc2Vy
KCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzeW5j
U3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFj
aygpOyB9CisgICAgdmlydHVhbCBib29sIGNhblN5bmNTcGFjZU1vZGlmaWVkT25seSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggZWIz
MDM1YzA1NzI1NzA1YWFkNWIwNWIwMmMwMWE1ODA2ZDQ0MjBlMi4uODBhN2Y2MTg5NjJkZDI0M2Fh
MWYyNzZmMTlkNmU1YTU0NTUxZDQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTI0NDYsMTYgKzI0NDYsMTYgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6cmVxdWVzdFN0b3JhZ2VTcGFjZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IENsaWVudE8KICAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OlJlcXVlc3RTdG9yYWdlU3Bh
Y2UgeyBzZXNzaW9uSUQsIG9yaWdpbiwgcXVvdGEsIGN1cnJlbnRTaXplLCBzcGFjZVJlcXVpcmVk
IH0sIFdURk1vdmUoY2FsbGJhY2spLCAwKTsKIH0KIAotY2xhc3MgUXVvdGFVc2VySW5pdGlhbGl6
ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlciB7CitjbGFzcyBEdW1t
eVF1b3RhVXNlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBRdW90YVVz
ZXJJbml0aWFsaXplcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQorICAgIGV4cGxpY2l0
IER1bW15UXVvdGFVc2VyKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCiAgICAgICAgIDog
bV9tYW5hZ2VyKG1ha2VXZWFrUHRyKG1hbmFnZXIpKQogICAgIHsKICAgICAgICAgbWFuYWdlci5h
ZGRVc2VyKCp0aGlzKTsKICAgICB9CiAKLSAgICB+UXVvdGFVc2VySW5pdGlhbGl6ZXIoKQorICAg
IH5EdW1teVF1b3RhVXNlcigpCiAgICAgewogICAgICAgICBpZiAobV9tYW5hZ2VyKQogICAgICAg
ICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKQEAgLTI0NzEsNyArMjQ3MSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHZvaWQgd2hlbkluaXRp
YWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgZmluYWwKKyAgICB2
b2lkIHN5bmNTcGFjZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBm
aW5hbAogICAgIHsKICAgICAgICAgbV9jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwogICAg
IH0KQEAgLTI0ODIsNyArMjQ4Miw3IEBAIHByaXZhdGU6CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OmluaXRpYWxpemVRdW90YVVzZXJzKFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIsIFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRo
aXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwgdXNlciA9IG1ha2VVbmlxdWU8UXVvdGFVc2VySW5pdGlh
bGl6ZXI+KG1hbmFnZXIpXSgpIG11dGFibGUgeworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2Vzc2lvbklELCBvcmlnaW4s
IHVzZXIgPSBtYWtlVW5pcXVlPER1bW15UXVvdGFVc2VyPihtYW5hZ2VyKV0oKSBtdXRhYmxlIHsK
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdGhp
cy0+aWRiU2VydmVyKHNlc3Npb25JRCkuaW5pdGlhbGl6ZVF1b3RhVXNlcihvcmlnaW4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IDIzODc5NDE2ZmZkYzNkMjEzMDY3ZDFlMjc5
NTE3ZWUxNGNiYjVhNmMuLmI0YjM1ODljYzc1YTgxNjg1MDRmNTcwMTRkOTMwODgyODIxMDNhZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgQ2FjaGVz
Ojp+Q2FjaGVzKCkKICAgICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwog
fQogCi12b2lkIENhY2hlczo6d2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjYWxsYmFjaykKK3ZvaWQgQ2FjaGVzOjpzeW5jU3BhY2VVc2VkKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKIHsKICAgICBpbml0aWFsaXplKFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgewogICAgICAgICBpZiAoZXJy
b3IpCkBAIC02MDgsMTAgKzYwOCw4IEBAIHZvaWQgQ2FjaGVzOjpyZW1vdmVDYWNoZUVudHJ5KGNv
bnN0IE5ldHdvcmtDYWNoZTo6S2V5JiBrZXkpCiB2b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQo
KQogewogICAgIG1fc2l6ZSA9IDA7Ci0gICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7Ci0gICAgICAg
IG1fcXVvdGFNYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAgICAgICAgbV9xdW90YU1hbmFn
ZXItPmFkZFVzZXIoKnRoaXMpOwotICAgIH0KKyAgICBpZiAobV9xdW90YU1hbmFnZXIpCisgICAg
ICAgIG1fcXVvdGFNYW5hZ2VyLT51c2VyTmVlZFN5bmMoKnRoaXMpOwogfQogCiB2b2lkIENhY2hl
czo6Y2xlYXJNZW1vcnlSZXByZXNlbnRhdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApp
bmRleCAzYzQ1MWE3MjNlMWU5MmY1NTlmNmZiY2VmN2YxZjMzMTE4OTAyZmFlLi5mMmQ0NjBiOGZm
NDQ0ZjcxZWRhYmFkNWJjNTdkYzc5YzhmMWNiYzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlz
ayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9N
Q2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhX
ZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogCi0gICAgdm9p
ZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKKyAg
ICB2b2lkIHN5bmNTcGFjZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsK
IAogICAgIHZvaWQgc3RvcmVPcmlnaW4oV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRp
b25DYWxsYmFjayYmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6Q2xpZW50T3JpZ2lu
PiByZWFkT3JpZ2luKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0YSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379204</attachid>
            <date>2019-09-19 21:47:07 -0700</date>
            <delta_ts>2019-09-24 18:42:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190919214706.patch</filename>
            <type>text/plain</type>
            <size>80190</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzNhN2JkYjIyM2IyODhl
NmFhNjU2ZWU1MDgzNGExOWI0NDEwMzFhNi4uOWM5MzU5YjRhODc2ZDU4MTMzZmM3NjUzMDAyNzI5
ODMxM2NhNTdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxOS0wOS0xOSAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgZGlzayB1c2Fn
ZSBvZiBJbmRleGVkREIgb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBpcyBiaWdnZXIgdGhh
biBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEN1cnJlbnRseSB3ZSByZWFkIHNpemUgb2YgSW5kZXhlZERCIGRhdGFiYXNlIGZp
bGVzIHdoZW4gYSBkYXRhYmFzZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLiBUaGlzIGNvdWxkIGJl
IHNsb3cgaWYKKyAgICAgICAgdGhlcmUgYXJlIG1hbnkgc3BhY2UgaW5jcmVhc2Ugb3BlcmF0aW9u
cy4gCisgICAgICAgIEFuIGVmZmljaWVudCBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRlIHRoZSBz
cGFjZSBhdmFpbGFibGUsIGVzdGltYXRlIHNwYWNlIGluY3JlYXNlIGZvciBlYWNoIG9wZWFydGlv
biwgYW5kIHJlYWQKKyAgICAgICAgdGhlIGZpbGUgc2l6ZSBvbmx5IHdoZW4gdGhlIGFjY3VtdWxh
dGVkIGVzdGltYXRlZCBpbmNyZWFzZSBpcyBiaWdnZXIgdGhhbiBzcGFjZSBhdmFpbGFiZS4KKwor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6UXVvdGFVc2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0
U3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90
YVVzZXI6OnN5bmNTcGFjZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6ZGlkU3luY1NwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRTeW5jU3BhY2VVc2VkTW9kaWZpZWRP
bmx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpzdGFydENvbXB1
dGluZ1NwYWNlVXNlZEZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpzdGFydENvbXB1dGluZ1Nw
YWNlVXNlZENoYW5nZUZvck9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZENoYW5nZUZvck9yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkQ2hhbmdl
Rm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjppbmNy
ZWFzZUVzdGltYXRlZFNwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6aG9sZFNwYWNlR3JhbnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OklEQlNlcnZlcjo6cmVsZWFzZVNwYWNlR3JhbnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6ZGF0YWJhc2VXaWxsQmVPcGVuZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRhdGFiYXNlSXNDbG9zZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5jcmVhc2VTcGFjZVVzZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3Rh
VXNlcjo6ZGVjcmVhc2VTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmluaXRp
YWxpemVTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJ
REJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6aW5jcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZ1
bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtl
eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
OjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6ZXN0aW1hdGVTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzaW5n
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpj
b21wbGV0ZVNwYWNlSW5jcmVhc2luZ1Rhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzY2hlZHVsZVNodXRkb3duRm9yQ2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRv
d25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRTaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNr
SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1l
SW5kZXhBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZEFmdGVy
UXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9z
ZUZvclVzZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFj
a0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJFcnJvcjo6SURCRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6Omlz
b2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QkVycm9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6SURCRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRXJyb3I6OnNpemUgY29uc3QpOgorICAgICAgICAqIHN0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpzcGFjZVVzYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6c3luY1VzZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvU3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphZGRVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6dXNlck5lZWRTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OnN5bmNTZWxlY3RlZFVzZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNl
clRvSW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjpzeW5jU3BhY2VVc2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VRdW90YVVzZXI6OmNhblN5bmNTcGFjZU1vZGlmaWVkT25seSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjp3aGVuSW5pdGlhbGl6ZWQpOiBE
ZWxldGVkLgorCiAyMDE5LTA5LTE5ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAK
ICAgICAgICAgSFRNTFZpZGVvRWxlbWVudCB3aXRoIGEgYnJva2VuIHBvc3RlciBpbWFnZSB3aWxs
IHRha2Ugc3F1YXJlIGRpbWVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxY2ViMWQzNWRjZDMzZWYxMDlmOGNm
MmQ4MjNmMWFkOTk2MTA4NTMxLi45NmI0OTY2NGE0Mzk3MzA4Y2Y3MjQzNWQ1YmNjMTZlYmZjNGY0
YWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5LTA5LTE5ICBTaWh1aSBMaXUgIDxz
aWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdlIG9mIEluZGV4
ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2
YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjppbml0aWFsaXplUXVvdGFVc2Vycyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnN5bmNTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6cmVzZXRTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0
OjpDYWNoZVN0b3JhZ2U6OkNhY2hlczo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaDoKKwog
MjAxOS0wOS0xOSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBDcmVhdGUgSW5qZWN0ZWRCdW5kbGUgU1BJIHRvIGJldHRlciBzdXBwb3J0IE5TU2VjdXJlQ29k
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwCmluZGV4IGI1OWVkN2YyMjQ0NzA0MTQ3ZmQxOTBhMWQxN2ZhODk0ZDM5ZmNi
MGMuLmViNjJhNjdlNWNjMTE5YjUyNGY1ZmQ0NmQ5MGE0OGE4MjM4MmY5YjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
CkBAIC02OTcsNyArNjk3LDYgQEAgSURCU2VydmVyOjpRdW90YVVzZXI6OlF1b3RhVXNlcihJREJT
ZXJ2ZXImIHNlcnZlciwgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlciwKICAgICA6IG1fc2Vy
dmVyKHNlcnZlcikKICAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKICAgICAs
IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAsIG1faXNJbml0aWFsaXplZChtX3NlcnZl
ci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogewogICAgIGlmIChtYW5hZ2VyKQogICAgICAg
ICBtYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKQEAgLTcxMSw2MCArNzEwLDQxIEBAIElEQlNlcnZl
cjo6UXVvdGFVc2VyOjp+UXVvdGFVc2VyKCkKIAogdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6
cmVzZXRTcGFjZVVzZWQoKQogewotICAgIG1fc3BhY2VVc2VkID0gMDsKLSAgICBtX2VzdGltYXRl
ZFNwYWNlSW5jcmVhc2UgPSAwOwotCi0gICAgaWYgKCFtX21hbmFnZXIpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3NlcnZlci5tX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spOwotCi0gICAgbV9pc0luaXRp
YWxpemVkID0gZmFsc2U7Ci0KLSAgICAvLyBEbyBhZGQvcmVtb3ZlIHRvIHRyaWdnZXIgY2FsbCB0
byB3aGVuSW5pdGlhbGl6ZWQuCi0gICAgbV9tYW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKLSAg
ICBtX21hbmFnZXItPmFkZFVzZXIoKnRoaXMpOworICAgIG1fc2hvdWxkU3luY1NwYWNlQ29tcGxl
dGVseSA9IHRydWU7CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9tYW5hZ2VyLT51c2Vy
TmVlZFN5bmMoKnRoaXMpOwogfQogCi12b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbmNyZWFz
ZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQotewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fc3BhY2VVc2VkICsgc2l6ZSA+IG1fc3BhY2VV
c2VkKTsKLSAgICBtX3NwYWNlVXNlZCArPSBzaXplOwotfQotdm9pZCBJREJTZXJ2ZXI6OlF1b3Rh
VXNlcjo6ZGVjcmVhc2VTcGFjZVVzZWQodWludDY0X3Qgc2l6ZSkKK3ZvaWQgSURCU2VydmVyOjpR
dW90YVVzZXI6OnN5bmNTcGFjZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrKQogewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAg
QVNTRVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7Ci19
CisgICAgbV9zeW5jQ2FsbGJhY2tzLmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLXZvaWQg
SURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spCi17Ci0gICAgaWYgKG1faXNJbml0aWFsaXplZCkgewotICAgICAg
ICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1faW5pdGlhbGl6YXRp
b25DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0
aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKKyAgICBpZiAobV9zaG91bGRTeW5jU3Bh
Y2VDb21wbGV0ZWx5KSB7CisgICAgICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKG1fb3JpZ2luKTsKKyAgICAgICAgbV9zaG91bGRTeW5jU3BhY2VDb21wbGV0ZWx5
ID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2VydmVyLnN0YXJ0Q29tcHV0aW5nU3Bh
Y2VVc2VkQ2hhbmdlRm9yT3JpZ2luKG1fb3JpZ2luKTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OlF1
b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpCit2b2lkIElE
QlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRTeW5jU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkK
IHsKLSAgICBBU1NFUlQobV9pc0luaXRpYWxpemVkIHx8ICFtX2VzdGltYXRlZFNwYWNlSW5jcmVh
c2UpOwogICAgIG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOwotICAgIG1faXNJbml0aWFsaXplZCA9
IHRydWU7CisgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKKyAgICBBU1NFUlQoIW1f
c3luY0NhbGxiYWNrcy5pc0VtcHR5KCkpOworICAgIGF1dG8gY2FsbGJhY2sgPSBtX3N5bmNDYWxs
YmFja3MudGFrZUZpcnN0KCk7CisgICAgY2FsbGJhY2soKTsKK30KIAotICAgIGlmIChhdXRvIGNh
bGxiYWNrID0gV1RGTW92ZShtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spKQotICAgICAgICBjYWxs
YmFjaygpOwordm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6ZGlkU3luY1NwYWNlVXNlZE1vZGlm
aWVkT25seSh1aW50NjRfdCBpbmNyZWFzZSwgdWludDY0X3QgZGVjcmVhc2UpCit7CisgICAgaWYg
KGluY3JlYXNlKQorICAgICAgICBtX3NwYWNlVXNlZCArPSBpbmNyZWFzZTsKKyAgICBpZiAoZGVj
cmVhc2UpCisgICAgICAgIG1fc3BhY2VVc2VkIC09IGRlY3JlYXNlOworICAgIG1fZXN0aW1hdGVk
U3BhY2VJbmNyZWFzZSA9IDA7CisgICAgQVNTRVJUKCFtX3N5bmNDYWxsYmFja3MuaXNFbXB0eSgp
KTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9zeW5jQ2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAg
IGNhbGxiYWNrKCk7CiB9CiAKIElEQlNlcnZlcjo6UXVvdGFVc2VyJiBJREJTZXJ2ZXI6OmVuc3Vy
ZVF1b3RhVXNlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKQEAgLTc3Niw3ICs3NTYsMTEg
QEAgSURCU2VydmVyOjpRdW90YVVzZXImIElEQlNlcnZlcjo6ZW5zdXJlUXVvdGFVc2VyKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luKQogCiB2b2lkIElEQlNlcnZlcjo6c3RhcnRDb21wdXRpbmdT
cGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgQVNT
RVJUKCFtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKKyAgICBpZiAobV9zZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkgeworICAgICAgICBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4o
b3JpZ2luLCBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5lc3RpbWF0ZWRTcGFjZVVzZWQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9yaWdpbiwg
b3JpZ2luKSk7CiB9CiAKQEAgLTc4OSwxMiArNzczLDY0IEBAIHZvaWQgSURCU2VydmVyOjpjb21w
dXRlU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogICAgIGF1
dG8gbmV3VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSA9IElEQkRhdGFiYXNlSWRlbnRpZmllcjo6ZGF0
YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChvcmlnaW4udG9wT3JpZ2luLCBvcmlnaW4uY2xp
ZW50T3JpZ2luLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgsICJ2MSIpOwogICAgIGF1dG8gc2l6ZSA9
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckRpcmVjdG9yeShvbGRWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5KSArIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6
ZUZvckRpcmVjdG9yeShuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIAorICAgIFZlY3RvcjxJ
REJEYXRhYmFzZUlkZW50aWZpZXI+IGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nOworICAgIGZvciAo
YXV0byYgW2lkZW50aWZpZXIsIHZhbHVlXSA6IG1fbW9kaWZpZWREYXRhYmFzZVNpemVNYXApIHsK
KyAgICAgICAgaWYgKHZhbHVlLnNlY29uZCA9PSBJc0Nsb3NlZDo6Tm8pCisgICAgICAgICAgICB2
YWx1ZS5maXJzdCA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VTaXplRm9ySWRlbnRp
ZmllcihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nLmFwcGVuZChpZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBkYXRhYmFzZXNUb1N0b3BUcmFj
a2luZykKKyAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcC5yZW1vdmUoaWRlbnRpZmll
cik7CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdp
biwgc2l6ZSkpOwogfQogCiB2b2lkIElEQlNlcnZlcjo6ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVzZWQp
CiB7Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5pdGlhbGl6ZVNwYWNlVXNlZChzcGFj
ZVVzZWQpOworICAgIGlmIChhdXRvKiB1c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQor
ICAgICAgICB1c2VyLT5kaWRTeW5jU3BhY2VVc2VkKHNwYWNlVXNlZCk7Cit9CisKK3ZvaWQgSURC
U2VydmVyOjpzdGFydENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbikKK3sKKyAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkg
eworICAgICAgICBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4ob3JpZ2lu
LCAwLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2Vk
Q2hhbmdlRm9yT3JpZ2luLCBvcmlnaW4pKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmNvbXB1dGVT
cGFjZVVzZWRDaGFuZ2VGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCit7Cisg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBWZWN0b3I8SURCRGF0YWJhc2VJZGVu
dGlmaWVyPiBkYXRhYmFzZXNUb1N0b3BUcmFja2luZzsKKyAgICB1aW50NjRfdCBpbmNyZWFzZSA9
IDAsIGRlY3JlYXNlID0gMDsKKyAgICBmb3IgKGF1dG8mIFtpZGVudGlmaWVyLCB2YWx1ZV0gOiBt
X21vZGlmaWVkRGF0YWJhc2VTaXplTWFwKSB7CisgICAgICAgIGF1dG8gY3VycmVudFNpemUgPSBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZUZvcklkZW50aWZpZXIoaWRlbnRpZmll
ciwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgICAgICBpZiAoY3VycmVudFNpemUgPiB2
YWx1ZS5maXJzdCkKKyAgICAgICAgICAgIGluY3JlYXNlICs9IGN1cnJlbnRTaXplIC0gdmFsdWUu
Zmlyc3Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlY3JlYXNlICs9IHZhbHVlLmZpcnN0
IC0gY3VycmVudFNpemU7CisgICAgICAgIHZhbHVlLmZpcnN0ID0gY3VycmVudFNpemU7CisKKyAg
ICAgICAgaWYgKHZhbHVlLnNlY29uZCA9PSBJc0Nsb3NlZDo6WWVzKQorICAgICAgICAgICAgZGF0
YWJhc2VzVG9TdG9wVHJhY2tpbmcuYXBwZW5kKGlkZW50aWZpZXIpOworICAgIH0KKworICAgIGZv
ciAoYXV0byYgaWRlbnRpZmllciA6IGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nKQorICAgICAgICBt
X21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLnJlbW92ZShpZGVudGlmaWVyKTsKKworICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6
OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbiwgb3JpZ2luLCBpbmNyZWFz
ZSwgZGVjcmVhc2UpKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNl
VXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
aW5jcmVhc2UsIHVpbnQ2NF90IGRlY3JlYXNlKQoreworICAgIGlmIChhdXRvKiB1c2VyID0gbV9x
dW90YVVzZXJzLmdldChvcmlnaW4pKQorICAgICAgICB1c2VyLT5kaWRTeW5jU3BhY2VVc2VkTW9k
aWZpZWRPbmx5KGluY3JlYXNlLCBkZWNyZWFzZSk7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpyZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBj
YWxsYmFjaykKQEAgLTgwOCwzMCArODQ0LDUwIEBAIHZvaWQgSURCU2VydmVyOjpyZXF1ZXN0U3Bh
Y2UoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wCiAg
ICAgcXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2UodGFza1NpemUsIFdURk1vdmUoY2FsbGJhY2sp
KTsKIH0KIAordm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzaXplKQoreworICAgIGlmIChhdXRvKiB1
c2VyID0gbV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQorICAgICAgICB1c2VyLT5pbmNyZWFzZUVz
dGltYXRlZFNwYWNlVXNlZChzaXplKTsKK30KKwogdm9pZCBJREJTZXJ2ZXI6OnJlc2V0U3BhY2VV
c2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewogICAgIGlmIChhdXRvKiB1c2VyID0g
bV9xdW90YVVzZXJzLmdldChvcmlnaW4pKQogICAgICAgICB1c2VyLT5yZXNldFNwYWNlVXNlZCgp
OwogfQogCi12b2lkIElEQlNlcnZlcjo6aW5jcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3Jp
Z2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCit2b2lkIElEQlNlcnZlcjo6aG9sZFNwYWNlR3Jh
bnRlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VTaXplKQogewot
ICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNlU3BhY2VVc2VkKHNpemUpOworICAg
IGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmhvbGRTcGFjZUdyYW50ZWQoc3BhY2VTaXplKTsKIH0K
IAotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYg
b3JpZ2luLCB1aW50NjRfdCBzaXplKQordm9pZCBJREJTZXJ2ZXI6OnJlbGVhc2VTcGFjZUdyYW50
ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlU2l6ZSkKIHsKLSAg
ICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5kZWNyZWFzZVNwYWNlVXNlZChzaXplKTsKKyAgICBl
bnN1cmVRdW90YVVzZXIob3JpZ2luKS5yZWxlYXNlU3BhY2VHcmFudGVkKHNwYWNlU2l6ZSk7CiB9
CiAKLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBJREJTZXJ2ZXI6
OmRhdGFiYXNlV2lsbEJlT3BlbmVkKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRp
ZmllcikKIHsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbmNyZWFzZVBvdGVudGlhbFNw
YWNlVXNlZCh0YXNrU2l6ZSk7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBp
ZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBh
dXRvIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCA9IHRoaXMtPmRhdGFiYXNlRGlyZWN0b3J5UGF0aElz
b2xhdGVkQ29weSgpOworICAgIEFTU0VSVCghZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHko
KSk7CisgICAgYXV0byBzaXplQmVmb3JlT3BlbiA9IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0
YWJhc2VTaXplRm9ySWRlbnRpZmllcihpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgp
OworICAgIG1fbW9kaWZpZWREYXRhYmFzZVNpemVNYXAuc2V0KGlkZW50aWZpZXIsIHN0ZDo6bWFr
ZV9wYWlyKHNpemVCZWZvcmVPcGVuLCBJc0Nsb3NlZDo6Tm8pKTsKKyAgICByZXR1cm4gc2l6ZUJl
Zm9yZU9wZW47CiB9CiAKLXZvaWQgSURCU2VydmVyOjpkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNl
ZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQordm9pZCBJ
REJTZXJ2ZXI6OmRhdGFiYXNlSXNDbG9zZWQoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQogewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmRlY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKHNwYWNlVXNlZCk7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcC5jb250YWlucyhpZGVudGlmaWVyKSkg
eworICAgICAgICBhdXRvIHNpemUgPSBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLmdldChpZGVu
dGlmaWVyKS5maXJzdDsKKyAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcC5zZXQoaWRl
bnRpZmllciwgc3RkOjptYWtlX3BhaXIoc2l6ZSwgSXNDbG9zZWQ6OlllcykpOworICAgIH0KIH0K
IAogdm9pZCBJREJTZXJ2ZXI6OnVwZ3JhZGVGaWxlc0lmTmVjZXNzYXJ5KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAx
OWU2OTYyZWQxOWFiYTU0MDMyY2EwNDQ3MjRlZDExMTUzNTRhNWFmLi43ZDJmZjM2MzM5MTJmMTMy
MmM0YzI0ZmU0N2NjMTZhZWM4MjUzNzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMTQsMTEgKzExNCwxMyBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zv
ck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjx2b2lk
ICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAogICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7Ci0gICAgdm9pZCBpbmNyZWFzZVBv
dGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7
Ci0gICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4m
LCB1aW50NjRfdCB0YXNrU2l6ZSk7Ci0gICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZChjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlU3BhY2VVc2Vk
KGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOworICAgIHZvaWQgaG9sZFNwYWNl
R3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgdm9p
ZCByZWxlYXNlU3BhY2VHcmFudGVkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tT
aXplKTsKKyAgICB2b2lkIGluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2VkKGNvbnN0IENsaWVudE9y
aWdpbiYsIHVpbnQ2NF90IHNpemUpOwogICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoY29uc3QgQ2xp
ZW50T3JpZ2luJik7CisgICAgZW51bSBjbGFzcyBJc0Nsb3NlZCB7IE5vLCBZZXMgfTsKKyAgICB1
aW50NjRfdCBkYXRhYmFzZVdpbGxCZU9wZW5lZChjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXIm
KTsKKyAgICB2b2lkIGRhdGFiYXNlSXNDbG9zZWQoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVy
Jik7CiAKICAgICB2b2lkIGluaXRpYWxpemVRdW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBv
cmlnaW4pIHsgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbik7IH0KIApAQCAtMTUyLDQxICsxNTQsNTEg
QEAgcHJpdmF0ZToKIAogICAgICAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2VyKCkgeyBy
ZXR1cm4gbV9tYW5hZ2VyLmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTcGFjZVVzZWQodWlu
dDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9CiAgICAgICAgIHZv
aWQgcmVzZXRTcGFjZVVzZWQoKTsKIAotICAgICAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKHVpbnQ2NF90IGluY3JlYXNlKSB7IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSArPSBp
bmNyZWFzZTsgfQotICAgICAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2
NF90IGRlY3JlYXNlKQorICAgICAgICB2b2lkIGhvbGRTcGFjZUdyYW50ZWQodWludDY0X3Qgc2l6
ZSkgeyBtX3NwYWNlUmVzZXJ2ZWQgKz0gc2l6ZTsgfQorICAgICAgICB2b2lkIHJlbGVhc2VTcGFj
ZUdyYW50ZWQodWludDY0X3Qgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1f
ZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA+PSBkZWNyZWFzZSk7Ci0gICAgICAgICAgICBtX2VzdGlt
YXRlZFNwYWNlSW5jcmVhc2UgLT0gZGVjcmVhc2U7CisgICAgICAgICAgICBBU1NFUlQobV9zcGFj
ZVJlc2VydmVkID49IHNpemUpOworICAgICAgICAgICAgbV9zcGFjZVJlc2VydmVkIC09IHNpemU7
CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBpbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXpl
KTsKLSAgICAgICAgdm9pZCBkZWNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKTsKKyAgICAg
ICAgdm9pZCBpbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNlZCh1aW50NjRfdCBzaXplKSB7IG1fZXN0
aW1hdGVkU3BhY2VJbmNyZWFzZSArPSBzaXplOyB9CiAKLSAgICAgICAgdm9pZCBpbml0aWFsaXpl
U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7CisgICAgICAgIHZvaWQgc3luY1NwYWNlVXNl
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOworICAgICAgICB2b2lkIGRpZFN5
bmNTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKKyAgICAgICAgdm9pZCBkaWRTeW5jU3Bh
Y2VVc2VkTW9kaWZpZWRPbmx5KHVpbnQ2NF90IGluY3JlYXNlLCB1aW50NjRfdCBkZWNyZWFzZSk7
CisKKyAgICAgICAgdWludDY0X3QgZXN0aW1hdGVkU3BhY2VVc2VkKCkgY29uc3QgeyByZXR1cm4g
bV9zcGFjZVVzZWQgKyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2U7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Bh
Y2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOyB9Ci0gICAgICAgIHZvaWQgd2hlbklu
aXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CisgICAgICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9z
cGFjZVJlc2VydmVkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOyB9CisgICAgICAgIGJvb2wg
Y2FuU3luY1NwYWNlTW9kaWZpZWRPbmx5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgICAgIElEQlNlcnZlciYgbV9zZXJ2ZXI7CiAgICAgICAgIFdlYWtQdHI8U3RvcmFnZVF1
b3RhTWFuYWdlcj4gbV9tYW5hZ2VyOworICAgICAgICBib29sIG1fc2hvdWxkU3luY1NwYWNlQ29t
cGxldGVseSB7IHRydWUgfTsKICAgICAgICAgQ2xpZW50T3JpZ2luIG1fb3JpZ2luOwotICAgICAg
ICBib29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07CisgICAgICAgIC8vIFNwYWNlIGluIHVz
ZS4KICAgICAgICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAwIH07CisgICAgICAgIC8vIFJlc2Vy
dmUgc3BhY2UgZm9yIG9uZ29pbmcgdGFza3MuCisgICAgICAgIHVpbnQ2NF90IG1fc3BhY2VSZXNl
cnZlZCB7IDAgfTsKKyAgICAgICAgLy8gRXN0aW1hdGVkIHNwYWNlIGluY3JlYXNlIGZvciBmaW5p
c2hlZCB0YXNrcyBzaW5jZSBsYXN0IHN5bmMuCiAgICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVk
U3BhY2VJbmNyZWFzZSB7IDAgfTsKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBt
X2luaXRpYWxpemF0aW9uQ2FsbGJhY2s7CisgICAgICAgIERlcXVlPENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4+IG1fc3luY0NhbGxiYWNrczsKICAgICB9OwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
UXVvdGFVc2VyJiBlbnN1cmVRdW90YVVzZXIoY29uc3QgQ2xpZW50T3JpZ2luJik7CiAgICAgdm9p
ZCBzdGFydENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsK
ICAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJik7
CiAgICAgdm9pZCBmaW5pc2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50
T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VVc2VkKTsKKyAgICB2b2lkIHN0YXJ0Q29tcHV0aW5nU3Bh
Y2VVc2VkQ2hhbmdlRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOworICAgIHZvaWQgY29t
cHV0ZVNwYWNlVXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICB2
b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZENoYW5nZUZvck9yaWdpbihjb25zdCBDbGllbnRP
cmlnaW4mLCB1aW50NjRfdCBpbmNyZWFzZSwgdWludDY0X3QgZGVjcmVhc2UpOwogCiAgICAgUEFM
OjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAgICAgSGFzaE1hcDxJREJDb25uZWN0aW9uSWRlbnRp
ZmllciwgUmVmUHRyPElEQkNvbm5lY3Rpb25Ub0NsaWVudD4+IG1fY29ubmVjdGlvbk1hcDsKICAg
ICBIYXNoTWFwPElEQkRhdGFiYXNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFVuaXF1ZUlE
QkRhdGFiYXNlPj4gbV91bmlxdWVJREJEYXRhYmFzZU1hcDsKKyAgICBIYXNoTWFwPElEQkRhdGFi
YXNlSWRlbnRpZmllciwgc3RkOjpwYWlyPHVpbnQ2NF90LCBJc0Nsb3NlZD4+IG1fbW9kaWZpZWRE
YXRhYmFzZVNpemVNYXA7CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBVbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24qPiBtX2RhdGFiYXNlQ29ubmVjdGlvbnM7CiAgICAgSGFzaE1hcDxJREJSZXNv
dXJjZUlkZW50aWZpZXIsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24qPiBtX3RyYW5zYWN0
aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMjc5YjMxNTkxNmJk
MzlkOGQ0YTg2MDZlNzA1ZGI3ZTU1ZDE5YWU3MC4uMjk5NDRiMWRmZTkxODQ1NWJkNzg4YzhhNjQ3
YzU2ZTM2NGE3NDUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTcy
MiwxNCArNzIyLDE0IEBAIFN0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlTmFt
ZUZyb21FbmNvZGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBlbmNvCiAgICAgcmV0dXJuIEZpbGVT
eXN0ZW06OmRlY29kZUZyb21GaWxlbmFtZShwYXJ0aWFsbHlEZWNvZGVkKTsKIH0KIAotU3RyaW5n
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSBjb25zdAor
U3RyaW5nIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCiB7Ci0gICAgQVNTRVJUKCFtX2lkZW50aWZpZXIuZGF0
YWJhc2VOYW1lKCkuaXNOdWxsKCkpOworICAgIEFTU0VSVCghZGF0YWJhc2VOYW1lLmlzTnVsbCgp
KTsKIAotICAgIGlmIChtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkuaXNFbXB0eSgpKQorICAg
IGlmIChkYXRhYmFzZU5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gIiUwMCI7CiAKLSAg
ICBTdHJpbmcgZmlsZW5hbWUgPSBGaWxlU3lzdGVtOjplbmNvZGVGb3JGaWxlTmFtZShtX2lkZW50
aWZpZXIuZGF0YWJhc2VOYW1lKCkpOworICAgIFN0cmluZyBmaWxlbmFtZSA9IEZpbGVTeXN0ZW06
OmVuY29kZUZvckZpbGVOYW1lKGRhdGFiYXNlTmFtZSk7CiAgICAgZmlsZW5hbWUucmVwbGFjZSgn
LicsICIlMkUiKTsKIAogICAgIHJldHVybiBmaWxlbmFtZTsKQEAgLTc2Nyw3ICs3NjcsNyBAQCBT
dHJpbmcgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpmdWxsRGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBn
cmFkZSgpCiB7CiAgICAgYXV0byBkYXRhYmFzZVJvb3REaXJlY3RvcnkgPSB0aGlzLT5kYXRhYmFz
ZVJvb3REaXJlY3RvcnlJc29sYXRlZENvcHkoKTsKICAgICBTdHJpbmcgb2xkT3JpZ2luRGlyZWN0
b3J5ID0gbV9pZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3QoZGF0YWJh
c2VSb290RGlyZWN0b3J5LCAidjAiKTsKLSAgICBTdHJpbmcgb2xkRGF0YWJhc2VEaXJlY3Rvcnkg
PSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob2xkT3JpZ2luRGlyZWN0b3J5
LCBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpKTsKKyAgICBTdHJpbmcgb2xkRGF0YWJhc2VEaXJl
Y3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQob2xkT3JpZ2luRGly
ZWN0b3J5LCBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZShtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1l
KCkpKTsKICAgICBTdHJpbmcgbmV3T3JpZ2luRGlyZWN0b3J5ID0gbV9pZGVudGlmaWVyLmRhdGFi
YXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3QoZGF0YWJhc2VSb290RGlyZWN0b3J5LCAidjEiKTsK
ICAgICBTdHJpbmcgZmlsZU5hbWVIYXNoID0gU1FMaXRlRmlsZVN5c3RlbTo6Y29tcHV0ZUhhc2hG
b3JGaWxlTmFtZShtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkpOwogICAgIFZlY3RvcjxTdHJp
bmc+IGRpcmVjdG9yaWVzV2l0aFNhbWVIYXNoID0gRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeShu
ZXdPcmlnaW5EaXJlY3RvcnksIGZpbGVOYW1lSGFzaCArICIqIik7CkBAIC04NjEsNiArODYxLDIw
IEBAIHVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VTaXplKCkgY29uc3QK
ICAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShmdWxsRGF0
YWJhc2VQYXRoKCkpOwogfQogCit1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFi
YXNlU2l6ZUZvcklkZW50aWZpZXIoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHJvb3REaXJlY3RvcnkpCit7CisgICAgYXV0byBvbGRPcmlnaW5E
aXJlY3RvcnkgPSBpZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3Qocm9v
dERpcmVjdG9yeSwgInYwIik7CisgICAgYXV0byBvbGREYXRhYmFzZURpcmVjdG9yeSA9IEZpbGVT
eXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChvbGRPcmlnaW5EaXJlY3RvcnksIGZpbGVu
YW1lRm9yRGF0YWJhc2VOYW1lKGlkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCkpKTsKKyAgICBhdXRv
IG9sZERhdGFiYXNlUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChv
bGREYXRhYmFzZURpcmVjdG9yeSwgIkluZGV4ZWREQi5zcWxpdGUzIik7CisKKyAgICBhdXRvIG9y
aWdpbkRpcmVjdG9yeSA9IGlkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9v
dChyb290RGlyZWN0b3J5LCAidjEiKTsKKyAgICBhdXRvIGZpbGVOYW1lSGFzaCA9IFNRTGl0ZUZp
bGVTeXN0ZW06OmNvbXB1dGVIYXNoRm9yRmlsZU5hbWUoaWRlbnRpZmllci5kYXRhYmFzZU5hbWUo
KSk7CisgICAgYXV0byBkYXRhYmFzZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChvcmlnaW5EaXJlY3RvcnksIGZpbGVOYW1lSGFzaCk7CisgICAgYXV0byBk
YXRhYmFzZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJh
c2VEaXJlY3RvcnksICJJbmRleGVkREIuc3FsaXRlMyIpOworCisgICAgcmV0dXJuIFNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUob2xkRGF0YWJhc2VQYXRoKSArIFNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZGF0YWJhc2VQYXRoKTsKK30KKwogSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uIC0gJXMiLCBpbmZvLmlkZW50aWZpZXIoKS5sb2dnaW5n
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkBAIC05ODQsNyArOTk4LDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHQKIAogICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3Jl
KGluZm8pOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICByZXR1cm4gSURCRXJyb3Ig
eyBXVEY6Om51bGxvcHQsIHsgfSwga2V5UGF0aEJsb2ItPnNpemUoKSB9OwogfQogCiBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIpCkBAIC0xMTA1LDkgKzExMTksMTMgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHQKICAgICAgICAgfQogICAgIH0KIAorICAgIFN0cmluZyBvbGROYW1lOworICAgIGlmIChhdXRv
KiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0
U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKSkKKyAgICAgICAgb2xkTmFtZSA9IG9iamVjdFN0
b3JlSW5mby0+bmFtZSgpOwogICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5hbWVPYmplY3RTdG9yZShv
YmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsg
fTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBv
bGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgLSBvbGROYW1lLnNp
emVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9
LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpj
bGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlEKQpAQCAtMTE4NCw2ICsxMjAyLDcgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWRk
IGluZGV4ICclcycgdG8gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIGluZm8ubmFtZSgpLnV0
ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIlVuYWJs
ZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UiX3MgfTsKICAgICB9CisgICAgdWludDY0X3Qg
c2l6ZUluY3JlYXNlID0gaW5mby5uYW1lKCkuc2l6ZUluQnl0ZXMoKSArIGtleVBhdGhCbG9iLT5z
aXplKCk7CiAKICAgICAvLyBXcml0ZSBpbmRleCByZWNvcmRzIGZvciBhbnkgcmVjb3JkcyB0aGF0
IGFscmVhZHkgZXhpc3QgaW4gdGhpcyBvYmplY3Qgc3RvcmUuCiAKQEAgLTEyMTQsNiArMTIzMyw3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsK
ICAgICAgICAgfQorICAgICAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iuc2l6ZSgpOwogCiAgICAg
ICAgIGlmICghY3Vyc29yLT5hZHZhbmNlKDEpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVy
cm9yIGFkdmFuY2luZyBjdXJzb3Igd2hpbGUgaW5kZXhpbmcgZXhpc3RpbmcgcmVjb3JkcyBmb3Ig
bmV3IGluZGV4LiIpOwpAQCAtMTIzMSw3ICsxMjUxLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWMKICAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwogICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGlu
Z0luZGV4KGluZm8pOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICByZXR1cm4gSURC
RXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoY29uc3QgSURC
SW5kZXhJbmZvJiBpbmZvLCBjb25zdCBJREJLZXlEYXRhJiBpbmRleEtleSwgYm9vbCYgaGFzUmVj
b3JkKQpAQCAtMTI5MSw2ICsxMzExLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
Ojp1bmNoZWNrZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGMKICAgICAg
ICAgfQogICAgIH0KIAorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IDA7CiAgICAgZm9yIChh
dXRvJiBpbmRleEtleSA6IGluZGV4S2V5cykgewogICAgICAgICBpZiAoIWluZGV4S2V5LmlzVmFs
aWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI5OSw5ICsxMzIwLDEwIEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURC
SW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwdXQg
aW5kZXggcmVjb3JkIGZvciBuZXdseSBjcmVhdGVkIGluZGV4Iik7CiAgICAgICAgICAgICByZXR1
cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNlICs9IGVycm9yLnNpemUo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHJldHVybiBJREJFcnJv
ciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYga2V5
VmFsdWUsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGluZGV4S2V5LCBpbnQ2NF90IHJlY29y
ZElEKQpAQCAtMTMzNCw3ICsxMzU2LDggQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
Ojp1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6
ZUluY3JlYXNlID0gaW5kZXhLZXlCdWZmZXItPnNpemUoKSArIHZhbHVlQnVmZmVyLT5zaXplKCk7
CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9
OwogfQogCiAKQEAgLTE0MTksOSArMTQ0MiwxMSBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwog
ICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byBvbGROYW1lID0gaW5kZXhJbmZvLT5uYW1lKCk7
CiAgICAgaW5kZXhJbmZvLT5yZW5hbWUobmV3TmFtZSk7CiAKLSAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IG5ld05hbWUuc2l6ZUluQnl0ZXMoKSA+
IG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA/IG5ld05hbWUuc2l6ZUluQnl0ZXMoKSAtIG9sZE5hbWUu
c2l6ZUluQnl0ZXMoKSA6IDA7CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7
IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleURh
dGEmIGtleURhdGEsIGJvb2wmIGtleUV4aXN0cykKQEAgLTE2ODgsNiArMTcxMyw3IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChj
b25zdCBJREJPYmplY3RTdG9yCiAKICAgICBJREJFcnJvciBlcnJvcjsKICAgICBib29sIGFueVJl
Y29yZHNTdWNjZWVkZWQgPSBmYWxzZTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSAwOwog
ICAgIGZvciAoYXV0byYgaW5kZXggOiBpbmZvLmluZGV4TWFwKCkudmFsdWVzKCkpIHsKICAgICAg
ICAgSW5kZXhLZXkgaW5kZXhLZXk7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSht
X3NlcmlhbGl6YXRpb25Db250ZXh0LT5leGVjU3RhdGUoKSwgaW5kZXgsIGpzVmFsdWUsIGluZGV4
S2V5LCBpbmZvLmtleVBhdGgoKSwga2V5KTsKQEAgLTE2OTgsNiArMTcyNCw3IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25z
dCBJREJPYmplY3RTdG9yCiAgICAgICAgIGVycm9yID0gdW5jaGVja2VkUHV0SW5kZXhLZXkoaW5k
ZXgsIGtleSwgaW5kZXhLZXksIHJlY29yZElEKTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwo
KSkKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iuc2l6
ZSgpOwogCiAgICAgICAgIGFueVJlY29yZHNTdWNjZWVkZWQgPSB0cnVlOwogICAgIH0KQEAgLTE3
MTYsNyArMTc0MywxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgICAgICB9CiAgICAg
fQogCi0gICAgcmV0dXJuIGVycm9yOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBlcnJvcjsKKyAgICAKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQs
IHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAtMTc1Nyw2ICsx
Nzg3LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICByZWNvcmRJRCA9IG1f
c3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0KKyAgICB1aW50NjRfdCBzaXplSW5j
cmVhc2UgPSBrZXlCdWZmZXItPnNpemUoKSArIHZhbHVlLmRhdGEoKS5kYXRhKCktPnNpemUoKTsK
IAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKG9iamVjdFN0
b3JlSW5mbywga2V5RGF0YSwgdmFsdWUuZGF0YSgpLCByZWNvcmRJRCk7CiAKQEAgLTE3NzIsNiAr
MTgwMyw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICAgICAgcmV0dXJuIGVycm9y
OwogICAgIH0KKyAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iuc2l6ZSgpOwogCiAgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzID0gdmFsdWUuYmxvYlVSTHMoKTsKICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVzID0gdmFsdWUuYmxvYkZpbGVQYXRocygpOwpAQCAtMTgy
Niw3ICsxODU4LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgIHRyYW5zYWN0aW9u
LT5ub3RpZnlDdXJzb3JzT2ZDaGFuZ2VzKG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCkpOwog
Ci0gICAgcmV0dXJuIGVycm9yOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwg
eyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpnZXRCbG9iUmVjb3Jkc0Zvck9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVS
ZWNvcmQsIFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxl
UGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXggYmZkNjA2Y2E0ZWU5N2Y2
MDZlZTZiYzQ2ODVhOWVmYzhhM2QyODAxZS4uMGEwMzM3YjhkZTkyZjIwY2ViOWRkYmFjMjNjMTVj
ZGI1YjdiNzg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApAQCAtOTgsMTIgKzk4
LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIGZ1bGxEYXRhYmFzZVBhdGhGb3JEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBkYXRhYmFzZU5hbWVGcm9t
RmlsZShjb25zdCBTdHJpbmcmKTsKIAorICAgIHN0YXRpYyB1aW50NjRfdCBkYXRhYmFzZVNpemVG
b3JJZGVudGlmaWVyKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYg
cm9vdERpcmVjdG9yeSk7CisKICAgICBib29sIGhhc1RyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYpIGNvbnN0IGZpbmFsOwogCiAgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KIAogcHJpdmF0ZToKLSAgICBTdHJp
bmcgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSBjb25zdDsKKyAgICBzdGF0aWMgU3RyaW5nIGZp
bGVuYW1lRm9yRGF0YWJhc2VOYW1lKGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBmdWxsRGF0
YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhV
cGdyYWRlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBjNWQ3YTk4MmQ3
MDE2YTYzYTE4ZWZkZjFiOGQ1MzI3OTFkODUzY2Q3Li42ZTIzYWQ3OTI3OTU2MTc0MjcyZGQ1Zjc5
OGQxNGY1OTFlNzliZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTU1LDYgKzU1
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCiBzdGF0
aWMgY29uc3QgdWludDY0X3QgZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCA9IDQ7CitzdGF0aWMg
Y29uc3QgdWludDY0X3QgZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0ID0gMTAgKiBLQjsKIAogc3Rh
dGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURCS2V5RGF0YSYga2V5RGF0
YSkKIHsKQEAgLTg4LDEwICs4OSwyMyBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRl
U2l6ZShjb25zdCBJREJWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJuIHNpemU7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgp
Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oa2V5UGF0aCwgW10oY29uc3QgU3RyaW5nJiBw
YXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnNpemVJbkJ5dGVzKCk7CisgICAgfSwgW10oY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7CisgICAgICAgIHVpbnQ2NF90IHNpemUgPSAwOwor
ICAgICAgICBmb3IgKGF1dG8gcGF0aCA6IHBhdGhzKQorICAgICAgICAgICAgc2l6ZSArPSBwYXRo
LnNpemVJbkJ5dGVzKCk7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0pOworfQorCiBzdGF0
aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJJbmRleEluZm8mIGluZm8p
CiB7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6ZSArPSBpbmZvLm5hbWUoKS5zaXpl
SW5CeXRlcygpOworICAgIHNpemUgKz0gZXN0aW1hdGVTaXplKGluZm8ua2V5UGF0aCgpKTsKICAg
ICByZXR1cm4gc2l6ZTsKIH0KIApAQCAtOTksOSArMTEzLDggQEAgc3RhdGljIGlubGluZSB1aW50
NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQogewogICAg
IHVpbnQ2NF90IHNpemUgPSA0OwogICAgIHNpemUgKz0gaW5mby5uYW1lKCkuc2l6ZUluQnl0ZXMo
KTsKLSAgICAvLyBGSVhNRTogZXN0aW1hdGUga2V5UGF0aC4KLSAgICBmb3IgKGF1dG8mIGluZGV4
SW5mbyA6IGluZm8uaW5kZXhNYXAoKS52YWx1ZXMoKSkKLSAgICAgICAgc2l6ZSArPSBlc3RpbWF0
ZVNpemUoaW5kZXhJbmZvKTsKKyAgICBpZiAoYXV0byBrZXlQYXRoID0gaW5mby5rZXlQYXRoKCkp
CisgICAgICAgIHNpemUgKz0gZXN0aW1hdGVTaXplKCprZXlQYXRoKTsKICAgICByZXR1cm4gc2l6
ZTsKIH0KIApAQCAtMjAzLDYgKzIxNiwyMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp3YWl0
Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdAogICAg
IHJlcXVlc3RTcGFjZSgwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2luZ1Rhc2sodWludDY0X3QgaWRlbnRpZmll
ciwgdWludDY0X3QgdGFza1NpemUpCit7CisgICAgbV9zZXJ2ZXItPmhvbGRTcGFjZUdyYW50ZWQo
bV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7CisgICAgbV9wZW5kaW5nU3BhY2VJbmNy
ZWFzaW5nVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y29tcGxldGVTcGFjZUluY3JlYXNpbmdUYXNrKHVpbnQ2NF90IGlkZW50aWZp
ZXIsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Bl
bmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVy
YXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5lbmQoKSkgeworICAgICAgICBt
X3NlcnZlci0+cmVsZWFzZVNwYWNlR3JhbnRlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJh
dG9yLT52YWx1ZSk7CisgICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNl
ZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGFjdHVhbFRhc2tTaXplKTsKKyAgICAgICAgbV9wZW5k
aW5nU3BhY2VJbmNyZWFzaW5nVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJl
bnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAgLTIxNSwyNCArMjQ0LDI0IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgICAg
ICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IHRydWU7CiAgICAgICAgICAgICAvLyBXZSBk
byBub3Qga25vdyB3aGV0aGVyIHRoaXMgaXMgYW4gZXhpc3Rpbmcgb3IgYSBuZXcgZGF0YWJhc2Uu
CiAgICAgICAgICAgICAvLyBXZSBzZXQgYSBzbWFsbCBjb3N0IHNvIHRoYXQgaXQgaXMgbm90IHBv
c3NpYmxlIHRvIG9wZW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGRhdGFiYXNlLgotICAgICAgICAg
ICAgbV9zZXJ2ZXItPnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRX
cml0ZU9wZXJhdGlvbkNvc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShh
dXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJlcXVlc3RTcGFjZShkZWZhdWx0
T3Blbk9wZXJhdGlvbkNvc3QsICJvcGVuRGF0YWJhc2UiLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cih0aGlzKSwgc2l6ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdF0oYXV0byBlcnJv
cikgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZv
ckNsb3NlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKGRlY2lzaW9uKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpEZWNpc2lvbjo6RGVueTogewotICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IElEQlJlc3VsdERhdGE6OmVycm9yKG1fY3VycmVudE9wZW5EQlJlcXVlc3QtPnJlcXVlc3REYXRh
KCkucmVxdWVzdElkZW50aWZpZXIoKSwgSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsIHF1
b3RhRXJyb3JNZXNzYWdlTmFtZSgib3BlbkRhdGFiYXNlIikgfSk7CisgICAgICAgICAgICAgICAg
aWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSURCUmVzdWx0
RGF0YTo6ZXJyb3IobV9jdXJyZW50T3BlbkRCUmVxdWVzdC0+cmVxdWVzdERhdGEoKS5yZXF1ZXN0
SWRlbnRpZmllcigpLCAqZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcGVu
REJSZXF1ZXN0LT5jb25uZWN0aW9uKCkuZGlkT3BlbkRhdGFiYXNlKHJlc3VsdCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwogICAgICAgICAg
ICAgICAgICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9u
OjpHcmFudDoKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdT
dG9yZSwgbV9pZGVudGlmaWVyKSk7Ci0gICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg
ICAgIGF1dG8gY2FsbGJhY2tJZGVudGlmaWVyID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFj
a0lkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBzdGFydFNwYWNlSW5jcmVhc2luZ1Rhc2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBzaXplKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSWRlbnRpZmllcikpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMzQ0LDE1ICsz
NzMsMTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9y
ZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAg
ICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwog
CiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3Rv
cmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwogICAgICAgICBtX2Jh
Y2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0
byBiYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50aWZpZXIp
OwotICAgICAgICBtX2N1cnJlbnREYXRhYmFzZVNpemUgPSBiYWNraW5nU3RvcmUtPmRhdGFiYXNl
U2l6ZSgpOwogCisgICAgICAgIG1fc2VydmVyLT5kYXRhYmFzZVdpbGxCZU9wZW5lZChpZGVudGlm
aWVyKTsKICAgICAgICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICAgICAgYXV0
byBlcnJvciA9IGJhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJh
c2VJbmZvKTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKQEAgLTM2MCwxMyArMzg4LDE0
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBk
YXRhYmFzZUluZm8udmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tp
bmdTdG9yZSgpOwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0
YWJhc2VTaXplKCk7CiAgICAgfQogCisgICAgbV9zZXJ2ZXItPmRhdGFiYXNlSXNDbG9zZWQoaWRl
bnRpZmllcik7CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSwgZGVs
ZXRlZFZlcnNpb24pKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29u
ZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRp
b25hbERlbGV0ZUJhY2tpbmdTdG9yZSIpOwpAQCAtMzc0LDcgKzQwMyw3IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKCkKICAg
ICBpZiAobV9iYWNraW5nU3RvcmUpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVCYWNr
aW5nU3RvcmUoKTsKIAotICAgIHNodXRkb3duRm9yQ2xvc2UoKTsKKyAgICBzaHV0ZG93bkZvckNs
b3NlKGlkZW50aWZpZXIpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzY2hlZHVsZVNo
dXRkb3duRm9yQ2xvc2UoKQpAQCAtMzg2LDI3ICs0MTUsMjcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6c2NoZWR1bGVTaHV0ZG93bkZvckNsb3NlKCkKICAgICBSRUxFQVNFX0FTU0VSVCghbV9v
d25pbmdQb2ludGVyRm9yQ2xvc2UpOwogICAgIG1fb3duaW5nUG9pbnRlckZvckNsb3NlID0gbV9z
ZXJ2ZXItPmNsb3NlQW5kVGFrZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKIAotICAgIHBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OnNodXRkb3duRm9yQ2xvc2UpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlLCBt
X2lkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JD
bG9zZSgpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBBU1NFUlQobV9vd25pbmdQb2ludGVyRm9yQ2xvc2UuZ2V0KCkgPT0gdGhp
cyk7CiAKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRv
d25Gb3JDbG9zZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7CisgICAgaWYgKG1fYmFj
a2luZ1N0b3JlKQogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xvc2UoKTsKLSAgICAgICAgbV9u
ZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0gICAgfQog
CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9y
dHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICBtX2JhY2tpbmdTdG9yZUlz
RXBoZW1lcmFsID0gZmFsc2U7CiAKKyAgICBtX3NlcnZlci0+ZGF0YWJhc2VJc0Nsb3NlZChpZGVu
dGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRhYmFzZVF1ZXVlLmlzRW1wdHkoKSkgewotICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKSk7CisgICAgICAgIHBvc3REYXRhYmFzZVRhc2so
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3du
Rm9yQ2xvc2UsIGlkZW50aWZpZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2Rh
dGFiYXNlUXVldWUua2lsbCgpOwpAQCAtNDE4LDggKzQ0Nyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xvc2UoKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlUmVw
bHlRdWV1ZS5pc0VtcHR5KCkpOwogICAgIG1fZGF0YWJhc2VSZXBseVF1ZXVlLmtpbGwoKTsKLQot
ICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKQEAgLTQ1
MSw4ICs0NzgsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3Rv
cmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCiAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVl
c3QgPSBudWxscHRyOwogICAgIH0KIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7Ci0K
ICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAogICAgIGlmICht
X2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKQpAQCAtNTMzLDE0ICs1NTgsMTQgQEAgYm9vbCBVbmlx
dWVJREJEYXRhYmFzZTo6YWxsQ29ubmVjdGlvbnNBcmVDbG9zZWRPckNsb3NpbmcoKSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVDYWxs
YmFja0lkZW50aWZpZXIoKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OmdlbmVyYXRlVW5p
cXVlQ2FsbGJhY2tJZGVudGlmaWVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIHN0YXRpYyB1aW50NjRfdCBjdXJyZW50SUQgPSAwOwogICAgIHJldHVybiArK2N1cnJlbnRJ
RDsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXplKQordWludDY0
X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxi
YWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsK
ICAgICAgICAgY2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpKTsKQEAgLTU1MSwx
NiArNTc2LDExIEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmIGNhbGxiYWNrLCB1CiAgICAgQVNTRVJUKCFtX2Vycm9y
Q2FsbGJhY2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2Vycm9yQ2FsbGJhY2tzLmFk
ZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUpIHsK
LSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdU
YXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0KLQogICAgIG1fY2FsbGJhY2tR
dWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXVp
bnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0
YUNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXplKQordWludDY0X3QgVW5pcXVl
SURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBj
YWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAg
ICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCksIHsgfSk7CkBAIC01NzEsMTEg
KzU5MSw2IEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ssCiAgICAgQVNTRVJUKCFtX2tleURhdGFD
YWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fa2V5RGF0YUNhbGxiYWNrcy5h
ZGQoaWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwogCi0gICAgaWYgKHRhc2tTaXplKSB7
Ci0gICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZp
ZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5n
VGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLSAgICB9Ci0KICAgICBtX2NhbGxiYWNr
UXVldWUuYXBwZW5kKGlkZW50aWZpZXIpOwogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQpAQCAt
Nzc2LDcgKzc5MSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFkZE9wZW5EYXRhYmFzZUNv
bm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvCiAgICAgbV9vcGVuRGF0YWJh
c2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5sZWFrUmVmKCkpKTsKIH0KIAot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFj
a2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0
b3JlICglcCkiLCB0aGlzKTsKQEAgLTc4NiwxNyArODAxLDE1IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyCiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9u
cyA9IG1fYmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpOwog
ICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVy
YWwoKTsKIAotICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2ZSBpbml0aWxpYXplZCBzdG9yYWdl
IHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUKLSAgICAvLyBzaXplIG9mIHRoaXMgZGF0YWJhc2Uu
Ci0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6
ZSgpOwotCisgICAgYXV0byBkYXRhYmFzZVNpemVCZWZvcmVPcGVuID0gbV9zZXJ2ZXItPmRhdGFi
YXNlV2lsbEJlT3BlbmVkKGlkZW50aWZpZXIpOwogICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFz
ZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERh
dGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFj
a2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAgYXV0byBhY3R1YWxUYXNrU2l6
ZSA9IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAwIDogZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0
OworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBl
cnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRlbnRpZmllcikpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5m
byYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElE
QkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUsIHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsK
QEAgLTgwNyw3ICs4MjAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFTU0VSVCht
X2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBm
YWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CisgICAgY29tcGxldGVTcGFj
ZUluY3JlYXNpbmdUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgYWN0dWFsVGFza1NpemUpOwogCiAg
ICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAgIHJldHVybjsKQEAgLTgz
NiwxMCArODQ5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3Jl
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tT
aXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzaW5nVGFzayhjYWxsYmFja0lE
LCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAg
LTg0OSw5ICs4NjMsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsK
IAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmNyZWF0
ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CisgICAgYXV0byBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8p
KTsKIH0KIApAQCAtODYwLDEwICs4NzMsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYg
KGVycm9yLmlzTnVsbCgpKQorICAgIGNvbXBsZXRlU3BhY2VJbmNyZWFzaW5nVGFzayhjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLnNpemUoKSk7CisKKyAgICBJREJFcnJvciBjcmVhdGVFcnJvcjsK
KyAgICBpZiAoY3JlYXRlRXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5h
ZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCi0gICAgcGVyZm9ybUVycm9yQ2FsbGJhY2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2Fs
bGJhY2tJZGVudGlmaWVyLCBjcmVhdGVFcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaykKQEAgLTk0MywxNiArOTU5LDE2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVp
bnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUs
IEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwotCiAgICAg
YXV0byogaW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShv
YmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIGlmICghaW5mbykgewogICAgICAgICBwZXJmb3Jt
RXJyb3JDYWxsYmFjayhjYWxsYmFja0lELCBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkF0dGVt
cHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBvYmplY3Qgc3RvcmUiX3MgfSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBzdGFydFNwYWNlSW5jcmVhc2luZ1Rhc2soY2FsbGJhY2tJRCwg
dGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk2Miw5ICs5NzgsOCBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0g
ICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVycm9yIGVycm9yOwogICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAt
OTczLDEwICs5ODgsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVs
bCgpKQorICAgIGNvbXBsZXRlU3BhY2VJbmNyZWFzaW5nVGFzayhjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLnNpemUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVFcnJvcjsKKyAgICBpZiAocmVu
YW1lRXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5yZW5hbWVPYmplY3RT
dG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCi0gICAgcGVyZm9ybUVycm9y
Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9yQ2Fs
bGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCByZW5hbWVFcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaykKQEAgLTEwNDYsOSArMTA2NCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgYwogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVj
ayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykK
IHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdU
Rk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxs
YmFja0lEKQogICAgICAgICByZXR1cm47CisKKyAgICBzdGFydFNwYWNlSW5jcmVhc2luZ1Rhc2so
Y2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwg
Y2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQog
CkBAIC0xMDgyLDYgKzExMDIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
Q3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAgICBv
YmplY3RTdG9yZUluZm8tPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiAgICAgfQogCisgICAgY29t
cGxldGVTcGFjZUluY3JlYXNpbmdUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgp
KTsKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsK
IH0KIApAQCAtMTE3MSw3ICsxMTkyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1l
SW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3Qg
dGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
ayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTE4Nyw2ICsxMjA4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlE
QkQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzaW5nVGFz
ayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4
LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC0xMTk2LDkg
KzEyMTgsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVkREIsICIo
ZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAogICAgIEFTU0VS
VChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIs
IG5ld05hbWUpOworICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lSW5kZXgo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgbmV3TmFtZSk7CiAKLSAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtMTIw
Nyw3ICsxMjI4LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJ
bmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAgIGlmIChlcnJvci5pc051bGwoKSkgewor
ICAgIGNvbXBsZXRlU3BhY2VJbmNyZWFzaW5nVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LnNpemUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVFcnJvcjsKKyAgICBpZiAocmVuYW1lRXJy
b3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFz
ZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8pOwogICAgICAgICBpZiAob2JqZWN0U3Rv
cmVJbmZvKSB7CkBAIC0xMjE3LDcgKzEyNDEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAog
ICAgICAgICB9CiAgICAgfQogCi0gICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlm
aWVyLCByZW5hbWVFcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zlcndy
aXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCkBAIC0xMjM3
LDkgKzEyNjEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXkKIAogdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0
IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwg
Y29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0
X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNr
KSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAg
ICAgcmV0dXJuOworCisgICAgc3RhcnRTcGFjZUluY3JlYXNpbmdUYXNrKGNhbGxiYWNrSUQsIHRh
c2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVl
c3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlk
ZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApAQCAtMTMx
NSw4ICsxMzQxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3Jl
T3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0
b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVt
YmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVy
YXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
a2V5RGF0YS5udW1iZXIoKSk7CisgICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9y
ZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVkREI6Oktl
eVR5cGU6Ok51bWJlcikgeworICAgICAgICBhdXRvIHVwZGF0ZUVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgaWYgKCF1
cGRhdGVFcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIGVycm9yID0gdXBkYXRlRXJyb3I7Cisg
ICAgfQogCiAgICAgZ2VuZXJhdGVkS2V5UmVzZXR0ZXIucmVsZWFzZSgpOwogICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2Vk
S2V5KSk7CkBAIC0xMzI3LDYgKzEzNTYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKKyAgICBjb21wbGV0ZVNwYWNl
SW5jcmVhc2luZ1Rhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5zaXplKCkpOwogICAgIHBl
cmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5
KTsKIH0KIApAQCAtMjEyOSw5ICsyMTU5LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9z
dERhdGFiYXNlVGFzayhDcm9zc1RocmVhZFRhc2smJiB0YXNrKQogCiB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkoQ3Jvc3NUaHJlYWRUYXNrJiYgdGFzaykKIHsK
LSAgICBpZiAobV9iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9i
YWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotCiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUu
YXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgIG1fc2VydmVyLT5wb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1
dGVOZXh0RGF0YWJhc2VUYXNrUmVwbHkpKTsKIH0KQEAgLTIxOTYsNiArMjIyMyw4IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgZm9yIChhdXRvIHNpemUgOiBtX3BlbmRpbmdT
cGFjZUluY3JlYXNpbmdUYXNrcy52YWx1ZXMoKSkKKyAgICAgICAgbV9zZXJ2ZXItPnJlbGVhc2VT
cGFjZUdyYW50ZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBzaXplKTsKICAgICBtX3BlbmRpbmdT
cGFjZUluY3JlYXNpbmdUYXNrcy5jbGVhcigpOwogICAgIG1fc2VydmVyLT5yZXNldFNwYWNlVXNl
ZChtX2lkZW50aWZpZXIub3JpZ2luKCkpOwogCkBAIC0yMjcwLDM2ICsyMjk5LDExIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAgICAgLy8g
T3RoZXJ3aXNlLCB0aGlzIGRhdGFiYXNlIGlzIHN0aWxsIHBvdGVudGlhbGx5IGFjdGl2ZS4KICAg
ICAvLyBTbyB3ZSdsbCBoYXZlIGl0IG93biBpdHNlbGYgYW5kIHRoZW4gcGVyZm9ybSBhIGNsZWFu
IHVuY29uZGl0aW9uYWwgZGVsZXRlIG9uIHRoZSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICBtX293
bmluZ1BvaW50ZXJGb3JDbG9zZSA9IG1fc2VydmVyLT5jbG9zZUFuZFRha2VVbmlxdWVJREJEYXRh
YmFzZSgqdGhpcyk7Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNr
aW5nU3RvcmUpKTsKLX0KLQotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2Vk
SWZOZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAob3B0aW9uYWxDYWxsYmFj
a0lkZW50aWZpZXIpIHsKLSAgICAgICAgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyID0gb3B0
aW9uYWxDYWxsYmFja0lkZW50aWZpZXIudmFsdWUoKTsKLSAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmZpbmQoY2FsbGJhY2tJZGVudGlmaWVyKTsK
LSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQo
bV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgICAgICAgICAgbV9w
ZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHVpbnQ2NF90IGRhdGFiYXNlU2l6ZSA9IG1fbmV3RGF0YWJhc2VTaXplOwot
ICAgIGlmIChkYXRhYmFzZVNpemUgIT0gbV9jdXJyZW50RGF0YWJhc2VTaXplKSB7Ci0gICAgICAg
IGlmIChkYXRhYmFzZVNpemUgPiBtX2N1cnJlbnREYXRhYmFzZVNpemUpCi0gICAgICAgICAgICBt
X3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkYXRhYmFz
ZVNpemUgLSBtX2N1cnJlbnREYXRhYmFzZVNpemUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX3NlcnZlci0+ZGVjcmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBtX2N1
cnJlbnREYXRhYmFzZVNpemUgLSBkYXRhYmFzZVNpemUpOwotICAgICAgICBtX2N1cnJlbnREYXRh
YmFzZVNpemUgPSBkYXRhYmFzZVNpemU7Ci0gICAgfQorICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNv
bmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKIH0KIAogdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2Vk
SWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vy
cm9yQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJh
Y2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBA
IC0yMzExLDggKzIzMTUsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JD
YWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtl
eSkKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwot
CiAgICAgYXV0byBjYWxsYmFjayA9IG1fa2V5RGF0YUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRl
bnRpZmllcik7CiAgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxl
dGUpOwogICAgIGlmIChjYWxsYmFjaykgewpAQCAtMjM1Nyw4ICsyMzU5LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvdW50Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxi
YWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJ
Zk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgQVNTRVJUKG1fZXJyb3JDYWxsYmFj
a3MuY29udGFpbnMoY2FsbGJhY2tJZGVudGlmaWVyKSk7CiAgICAgQVNTRVJUKG1fY2FsbGJhY2tR
dWV1ZS5sYXN0KCkgPT0gY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBtX2NhbGxiYWNrUXVldWUu
cmVtb3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCA2OGE1Y2VhNTY0MzEzYjU2
YzA2NGY1ZDNjMzMyNDlkNWM4M2Y5Y2ZhLi4xNjRkM2I0YTY3ODdlNTgwMzVhOWQ4MjRhYWQ1NGZh
ZmIyYjkwOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTE2LDggKzExNiw2IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaGFyZENsb3NlZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVy
biBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlOyB9CiAKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQo
KSBjb25zdDsKLQogICAgIHZvaWQgZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CiAKIHByaXZh
dGU6CkBAIC0xNjAsNyArMTU4LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIERhdGFiYXNlIHRocmVh
ZCBvcGVyYXRpb25zCiAgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJik7Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYpOworICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZvaWQg
cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZv
aWQgcGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAg
dm9pZCBiZWdpblRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUoY29uc3QgSURCVHJhbnNhY3Rpb25J
bmZvJik7CkBAIC0xODMsMTIgKzE4MSwxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwZXJmb3Jt
U3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7
CiAgICAgdm9pZCBwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7Ci0gICAg
dm9pZCBwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgIHZvaWQg
c2h1dGRvd25Gb3JDbG9zZSgpOworICAgIHZvaWQgcGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVC
YWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBzaHV0
ZG93bkZvckNsb3NlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogCiAgICAgLy8gTWFp
biB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0
X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgZGlkT3BlbkJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90
IGFjdHVhbFRhc2tTaXplLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZvaWQg
ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2b2lkIGRp
ZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lk
IGRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUpOwpAQCAtMjExLDggKzIwOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
aWRQZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgZGlk
U2h1dGRvd25Gb3JDbG9zZSgpOwogCi0gICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKEVycm9yQ2FsbGJhY2smJiwgdWludDY0X3QgdGFza1NpemUgPSAwKTsKLSAgICB1aW50NjRf
dCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYsIHVpbnQ2NF90IHRh
c2tTaXplID0gMCk7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9y
Q2FsbGJhY2smJik7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURh
dGFDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0
QWxsUmVzdWx0c0NhbGxiYWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihHZXRSZXN1bHRDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoQ291bnRDYWxsYmFjayYmKTsKQEAgLTI0OSw3ICsyNDcsMTAgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcmVxdWVzdFNwYWNlKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYp
PiYmKTsKICAgICB2b2lkIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNw
YWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRp
ZmllciA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2luZ1Rhc2so
dWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpOworICAgIHZvaWQgY29tcGxl
dGVTcGFjZUluY3JlYXNpbmdUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IGFjdHVh
bFRhc2tTaXplKTsKKworICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNr
SWRlbnRpZmllcigpOwogCiAgICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURCRGF0
YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKQEAgLTMwMyw4ICszMDQsNiBAQCBwcml2YXRl
OgogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnNvclByZWZldGNoZXM7
CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFz
aW5nVGFza3M7Ci0gICAgdWludDY0X3QgbV9jdXJyZW50RGF0YWJhc2VTaXplIHsgMCB9OwotICAg
IHVpbnQ2NF90IG1fbmV3RGF0YWJhc2VTaXplIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRXJyb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkVycm9yLmNwcAppbmRleCA2NTJkMGE4MTdmNWM1M2M3MDM4M2YwMTRlMWVlYmExODBh
MjY4ZDRjLi43MTE4NGNmNzgyYmFlMjQ1OTYwMWNiYmJkODdhZDE3YzNiZDA4ODM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5j
cHAKQEAgLTMyLDE1ICszMiwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkVycm9y
OjpJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCitJREJFcnJvcjo6SURCRXJyb3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gY29kZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1aW50NjRfdCBzaXplKQogICAgIDogbV9jb2RlKGNvZGUp
CiAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKKyAgICAsIG1fc2l6ZShzaXplKQogewogfQogCiBJ
REJFcnJvciBJREJFcnJvcjo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gSURC
RXJyb3IgeyBtX2NvZGUsIG1fbWVzc2FnZS5pc29sYXRlZENvcHkoKSB9OworICAgIHJldHVybiBJ
REJFcnJvciB7IG1fY29kZSwgbV9tZXNzYWdlLmlzb2xhdGVkQ29weSgpLCBtX3NpemUgfTsKIH0K
IAogU3RyaW5nIElEQkVycm9yOjpuYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKaW5kZXggM2E5NWJiMzgwNTBkZWFi
MjhjMmRjMWE3YWU2NWZlMjdmNmFmODg1Ni4uZjBlNTc1MWZjNDg0YTAxNjNkYjhkOTkxMjFmNzI4
ODFlNmFkMTlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkVycm9yLmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJREJFcnJvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
SURCRXJyb3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gPSBXVEY6Om51bGxvcHQsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgSURCRXJy
b3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gPSBXVEY6Om51bGxvcHQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSA9IHsgfSwgdWludDY0X3Qgc2l6ZSA9IDApOwogCiAgICAgc3RhdGljIElEQkVycm9y
IHVzZXJEZWxldGVFcnJvcigpCiAgICAgewpAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIG1lc3NhZ2UoKSBjb25zdDsKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fY29kZTsgfQorICAgIHVpbnQ2NF90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KIAogICAgIElEQkVycm9yIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCkBAIC02Myw2ICs2NCw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gbV9jb2Rl
OwogICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgdWludDY0X3QgbV9zaXplOwogfTsKIAogdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuY3BwCmluZGV4IDc2N2FkMmVhZjRhY2NiODMxOTA0NDIyODk3MDY5NDliNzBi
MzQzMGUuLjEzNDg2OTMzMDM5NTFjMGE2MDI1N2NmNzQwODllMDQ5ODdjM2FmOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApAQCAtNDAsODgg
KzQwLDEwNCBAQCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp+U3RvcmFnZVF1b3RhTWFuYWdlcigpCiB1
aW50NjRfdCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzcGFjZVVzYWdlKCkgY29uc3QKIHsKICAgICB1
aW50NjRfdCB1c2FnZSA9IDA7Ci0gICAgZm9yIChhdXRvJiB1c2VyIDogbV91c2VycykKKyAgICBm
b3IgKGF1dG8mIHVzZXIgOiBtX2FjdGl2ZVVzZXJzKQogICAgICAgICB1c2FnZSArPSB1c2VyLT5z
cGFjZVVzZWQoKTsKICAgICByZXR1cm4gdXNhZ2U7CiB9CiAKIHZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpCiB7Ci0gICAgaWYgKCFtX3F1b3Rh
KQotICAgICAgICByZXR1cm47CisgICAgV1RGTG9nQWx3YXlzKCJTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCkiKTsKIAogICAgIGF1dG8gZGVmYXVsdFF1
b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKICAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwg
ZGVmYXVsdFF1b3RhU3RlcCAqICgoc3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkgKyAx
KSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVk
ZWQoKQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzeW5jVXNlcnNJZk5lZWRlZCgpCiB7Ci0g
ICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQorICAgIGlmICht
X3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxT
dG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb0luaXRpYWxpemU7Ci0gICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMpIHsKLSAgICAgICAgaWYgKGtleVZh
bHVlLnZhbHVlID09IFdoZW5Jbml0aWFsaXplZENhbGxlZDo6Tm8pIHsKLSAgICAgICAgICAgIGtl
eVZhbHVlLnZhbHVlID0gV2hlbkluaXRpYWxpemVkQ2FsbGVkOjpZZXM7Ci0gICAgICAgICAgICB1
c2Vyc1RvSW5pdGlhbGl6ZS5hcHBlbmQoa2V5VmFsdWUua2V5KTsKLSAgICAgICAgfQorICAgIFZl
Y3RvcjxTdG9yYWdlUXVvdGFVc2VyKj4gdXNlcnNUb1N5bmM7CisgICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IG1fcGVuZGluZ1VzZXJzKSB7CisgICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBJ
c1N5bmNDYWxsZWQ6Ok5vKQorICAgICAgICAgICAgdXNlcnNUb1N5bmMuYXBwZW5kKGtleVZhbHVl
LmtleSk7CiAgICAgfQotICAgIGZvciAoYXV0byogdXNlciA6IHVzZXJzVG9Jbml0aWFsaXplKSB7
Ci0gICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKHVzZXIp
KQotICAgICAgICAgICAgYXNrVXNlclRvSW5pdGlhbGl6ZSgqdXNlcik7CisgICAgZm9yIChhdXRv
KiB1c2VyIDogdXNlcnNUb1N5bmMpIHsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmNvbnRh
aW5zKHVzZXIpKQorICAgICAgICAgICAgYXNrVXNlclRvU3luYygqdXNlcik7CiAgICAgfQogfQog
Ci12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1
b3RhVXNlciYgdXNlcikKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvU3luYyhT
dG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIHVzZXIud2hlbkluaXRpYWxpemVkKFt0aGlz
LCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7CisgICAgbV9wZW5kaW5n
VXNlcnMuc2V0KCZ1c2VyLCBJc1N5bmNDYWxsZWQ6Olllcyk7CisgICAgdXNlci5zeW5jU3BhY2VV
c2VkKFt0aGlzLCAmdXNlciwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oKSB7CiAgICAg
ICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKG1f
cGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMucmVtb3ZlKCZ1c2VyKSkKLSAgICAgICAgICAgIG1f
dXNlcnMuYWRkKCZ1c2VyKTsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmNvbnRhaW5zKCZ1
c2VyKSkgeworICAgICAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmdldCgmdXNlcikgPT0gSXNT
eW5jQ2FsbGVkOjpZZXMpIHsKKyAgICAgICAgICAgICAgICBtX3BlbmRpbmdVc2Vycy5yZW1vdmUo
JnVzZXIpOworICAgICAgICAgICAgICAgIG1fYWN0aXZlVXNlcnMuYWRkKCZ1c2VyKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQW5vdGhlciBzeW5jIHJlcXVlc3Qg
aXMgcmVjZWl2ZWQgZHVyaW5nIHRoZSBzeW5jaW5nIG9mIHRoZSB1c2VyLgorICAgICAgICAgICAg
ICAgIGFza1VzZXJUb1N5bmModXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VV
c2FnZSgpOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1
ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Ok5vKTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0
cyh7IH0pOwogICAgIH0pOwogfQogCiB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFkZFVzZXIo
U3RvcmFnZVF1b3RhVXNlciYgdXNlcikKIHsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0luaXRpYWxp
emF0aW9uVXNlcnMuY29udGFpbnMoJnVzZXIpKTsKLSAgICBBU1NFUlQoIW1fdXNlcnMuY29udGFp
bnMoJnVzZXIpKTsKLSAgICBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmFkZCgmdXNlciwg
V2hlbkluaXRpYWxpemVkQ2FsbGVkOjpObyk7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdVc2Vycy5j
b250YWlucygmdXNlcikpOworICAgIEFTU0VSVCghbV9hY3RpdmVVc2Vycy5jb250YWlucygmdXNl
cikpOworICAgIG1fcGVuZGluZ1VzZXJzLmFkZCgmdXNlciwgSXNTeW5jQ2FsbGVkOjpObyk7CiAK
ICAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgYXNrVXNlclRv
SW5pdGlhbGl6ZSh1c2VyKTsKKyAgICAgICAgYXNrVXNlclRvU3luYyh1c2VyKTsKIH0KIAotYm9v
bCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSkgY29uc3QKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcihT
dG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVh
c2UgPiBtX3F1b3RhOworICAgIEFTU0VSVChtX2FjdGl2ZVVzZXJzLmNvbnRhaW5zKCZ1c2VyKSB8
fCBtX3BlbmRpbmdVc2Vycy5jb250YWlucygmdXNlcikpOworICAgIG1fYWN0aXZlVXNlcnMucmVt
b3ZlKCZ1c2VyKTsKKyAgICBpZiAobV9wZW5kaW5nVXNlcnMucmVtb3ZlKCZ1c2VyKSAmJiBtX3Bl
bmRpbmdVc2Vycy5pc0VtcHR5KCkpCisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9
KTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKFN0b3JhZ2VRdW90
YVVzZXImIHVzZXIpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnVzZXJOZWVkU3luYyhTdG9y
YWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIEFTU0VSVChtX3VzZXJzLmNvbnRhaW5zKCZ1c2Vy
KSB8fCBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7Ci0gICAg
bV91c2Vycy5yZW1vdmUoJnVzZXIpOwotICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlvblVz
ZXJzLnJlbW92ZSgmdXNlcikgJiYgbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gV2hlbiBiZWluZyBjbGVhcmVkLCBxdW90YSB1c2VycyBtYXkgcmVt
b3ZlIHRoZW1zZWx2ZXMgYW5kIGFkZCB0aGVtc2VsdmVzIHRvIHRyaWdnZXIgcmVpbml0aWFsaXph
dGlvbi4KLSAgICAgICAgLy8gTGV0J3Mgd2FpdCBmb3IgYWRkVXNlciB0byBiZSBjYWxsZWQgYmVm
b3JlIHByb2Nlc3NpbmcgcGVuZGluZyByZXF1ZXN0cy4KLSAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0gewotICAgICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgaWYgKG1fcGVuZGluZ1Vz
ZXJzLmNvbnRhaW5zKCZ1c2VyKSkgeworICAgICAgICBpZiAobV9wZW5kaW5nVXNlcnMuZ2V0KCZ1
c2VyKSA9PSBJc1N5bmNDYWxsZWQ6Ok5vKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
ICAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgdGhpcy0+cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNob3VsZERlcXVldWVG
aXJzdFBlbmRpbmdSZXF1ZXN0OjpObyk7Ci0gICAgICAgIH0pOworICAgICAgICBtX3BlbmRpbmdV
c2Vycy5zZXQoJnVzZXIsIElzU3luY0NhbGxlZDo6Tm8pOworICAgICAgICByZXR1cm47CiAgICAg
fQorCisgICAgbV9hY3RpdmVVc2Vycy5yZW1vdmUoJnVzZXIpOworICAgIG1fcGVuZGluZ1VzZXJz
LmFkZCgmdXNlciwgSXNTeW5jQ2FsbGVkOjpObyk7CisgICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0
cy5pc0VtcHR5KCkpCisgICAgICAgIGFza1VzZXJUb1N5bmModXNlcik7Cit9CisKK3ZvaWQgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6c3luY1NlbGVjdGVkVXNlcnMoKQoreworICAgIGZvciAoYXV0byog
dXNlciA6IGNvcHlUb1ZlY3RvcihtX2FjdGl2ZVVzZXJzKSkgeworICAgICAgICBpZiAodXNlci0+
Y2FuU3luY1NwYWNlTW9kaWZpZWRPbmx5KCkpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1VzZXJz
LmFkZCh1c2VyLCBJc1N5bmNDYWxsZWQ6Ok5vKTsKKyAgICAgICAgICAgIG1fYWN0aXZlVXNlcnMu
cmVtb3ZlKHVzZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgc3luY1VzZXJzSWZOZWVkZWQo
KTsKIH0KIAogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qg
c3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCkBAIC0xMzYsMTUgKzE1
MiwyNiBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBz
cGFjZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKTsKKyAgICBzeW5jVXNlcnNJZk5lZWRlZCgp
OwogCi0gICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewor
ICAgIGlmICghbV9wZW5kaW5nVXNlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fcGVuZGluZ1Jl
cXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKCFtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVl
c3RzKSB7CisgICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICAgICAg
bV9oYXNTdGFydGVkSGFuZGxpbmdSZXF1ZXN0cyA9IHRydWU7CisgICAgfQorCiAgICAgaWYgKHNo
b3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRpbmdS
ZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsKKyAg
ICAgICAgc3luY1NlbGVjdGVkVXNlcnMoKTsKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNl
SW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spLCBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlN5bmNS
ZXF1ZXN0ZWQgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBt
X3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNr
KSwgUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkIH0pOwogICAg
ICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0xNTIsNiArMTc5LDE0IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVz
dFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmCiAgICAgY2Fs
bGJhY2soRGVjaXNpb246OkdyYW50KTsKIH0KIAorYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpz
aG91bGRBc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKK3sKKyAg
ICBpZiAoIXNwYWNlSW5jcmVhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBzcGFjZVVzYWdlKCkgKyBzcGFjZUluY3JlYXNlID4gbV9xdW90YTsKK30KKwogdm9pZCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkK
IHsKICAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKTsKQEAg
LTE2NiwxMSArMjAxLDExIEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNw
YWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCiAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2Us
ICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNw
b25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7CiAKICAgICAg
ICAgbV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UgPSBmYWxzZTsKLSAgICAgICAg
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGlu
Z1JlcXVlc3Q6Olllcyk7CisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEp
OwogICAgIH0pOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaG91bGREZXF1ZXVlRmlyc3RQ
ZW5kaW5nUmVxdWVzdCBzaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCkKK3ZvaWQgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRf
dD4gbmV3UXVvdGEpCiB7CiAgICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTgxLDI1ICsyMTYsMzcgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSwg
U2gKICAgICBpZiAobV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5
KCkpCisgICAgaWYgKCFtX3BlbmRpbmdVc2Vycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChzaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCA9PSBTaG91bGREZXF1
ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKSB7CisgICAgaWYgKCFtX2hhc1N0YXJ0ZWRIYW5k
bGluZ1JlcXVlc3RzKSB7CisgICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsK
KyAgICAgICAgbV9oYXNTdGFydGVkSGFuZGxpbmdSZXF1ZXN0cyA9IHRydWU7CisgICAgfQorCisg
ICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nUmVxdWVzdHMu
Zmlyc3QoKS5zdGF0ZSA9PSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVhc2VSZXF1
ZXN0ZWQpIHsKICAgICAgICAgYXV0byByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZp
cnN0KCk7Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1v
cmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpOwogCisgICAgICAgIGJvb2wgc2hvdWxkQWxs
b3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2Up
OwogICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0
aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwotCisgICAgICAgIAogICAgICAgICByZXF1ZXN0LmNh
bGxiYWNrKHNob3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpE
ZW55KTsKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkg
ewogICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKTsKLQog
ICAgICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSkp
IHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXRlID09IFBlbmRpbmdSZXF1ZXN0OjpTdGF0
ZTo6VW5oYW5kbGVkKSB7CisgICAgICAgICAgICAgICAgc3luY1NlbGVjdGVkVXNlcnMoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fcGVuZGluZ1VzZXJzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0LnN0YXRlID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpTeW5jUmVx
dWVzdGVkOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKICAgICAg
ICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHJlcXVlc3Quc3BhY2VJbmNyZWFzZTsKKyAgICAg
ICAgICAgIHJlcXVlc3Quc3RhdGUgPSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVh
c2VSZXF1ZXN0ZWQ7CiAgICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXggOWY2NDYzM2VkNjZjYzEyYTkyODNjMDg5MWJk
MjU1YWU5MzA0MmFiNy4uNjIwNDlkZDNkMWJkZDdlMDE4Y2VlNWNiYTQ3YjdmYzljYmU0YzljMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKQEAgLTU0
LDYgKzU0LDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyKFN0
b3JhZ2VRdW90YVVzZXImKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXIoU3Rv
cmFnZVF1b3RhVXNlciYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXNlck5lZWRTeW5jKFN0
b3JhZ2VRdW90YVVzZXImKTsKIAogICAgIGVudW0gY2xhc3MgRGVjaXNpb24geyBEZW55LCBHcmFu
dCB9OwogICAgIHVzaW5nIFJlcXVlc3RDYWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
RGVjaXNpb24pPjsKQEAgLTY3LDI0ICs2OCwyOCBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxk
QXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpIGNvbnN0OwogICAgIHZvaWQg
YXNrRm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpOwogCi0gICAgdm9pZCBpbml0
aWFsaXplVXNlcnNJZk5lZWRlZCgpOwotICAgIHZvaWQgYXNrVXNlclRvSW5pdGlhbGl6ZShTdG9y
YWdlUXVvdGFVc2VyJik7CisgICAgdm9pZCBzeW5jVXNlcnNJZk5lZWRlZCgpOworICAgIHZvaWQg
YXNrVXNlclRvU3luYyhTdG9yYWdlUXVvdGFVc2VyJik7CisgICAgdm9pZCBzeW5jU2VsZWN0ZWRV
c2VycygpOwogCi0gICAgZW51bSBjbGFzcyBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVz
dCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8
dWludDY0X3Q+LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCk7CisgICAgdm9pZCBw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90Pik7CiAKICAgICB1aW50NjRf
dCBtX3F1b3RhIHsgMCB9OwogCiAgICAgYm9vbCBtX2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VS
ZXNwb25zZSB7IGZhbHNlIH07CiAgICAgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciBtX3NwYWNlSW5j
cmVhc2VSZXF1ZXN0ZXI7CisgICAgCisgICAgYm9vbCBtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVl
c3RzIHsgZmFsc2UgfTsKIAotICAgIGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsg
Tm8sIFllcyB9OwotICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXpl
ZENhbGxlZD4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PGNvbnN0
IFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOworICAgIGVudW0gY2xhc3MgSXNTeW5jQ2FsbGVk
IHsgTm8sIFllcyB9OworICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIElzU3luY0NhbGxl
ZD4gbV9wZW5kaW5nVXNlcnM7CisgICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV9hY3Rp
dmVVc2VyczsKIAogICAgIHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7CiAgICAgICAgIHVpbnQ2NF90
IHNwYWNlSW5jcmVhc2U7CiAgICAgICAgIFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKKyAgICAg
ICAgZW51bSBjbGFzcyBTdGF0ZSB7IFVuaGFuZGxlZCwgU3luY1JlcXVlc3RlZCwgU3BhY2VJbmNy
ZWFzZVJlcXVlc3RlZCB9OworICAgICAgICBTdGF0ZSBzdGF0ZSB7IFN0YXRlOjpVbmhhbmRsZWQg
fTsKICAgICB9OwogICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3BlbmRpbmdSZXF1ZXN0czsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmluZGV4IGI0MjMw
YzVlMTJkMDk0ZDY5OWUxZTI5OTc5MTY0YWY1YjdjODM4ZTAuLjM2MjFjMGViYWI3Nzk2Mjg5ZTg0
Y2FkYmIwMGJkY2NiNTQ1MzRkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhVXNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oCkBAIC0zNCw3ICszNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdG9yYWdl
UXVvdGFVc2VyKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBzcGFjZVVzZWQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQorICAgIHZpcnR1YWwg
dm9pZCBzeW5jU3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykg
eyBjYWxsYmFjaygpOyB9CisgICAgdmlydHVhbCBib29sIGNhblN5bmNTcGFjZU1vZGlmaWVkT25s
eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmlu
ZGV4IGViMzAzNWMwNTcyNTcwNWFhZDViMDViMDJjMDFhNTgwNmQ0NDIwZTIuLjgwYTdmNjE4OTYy
ZGQyNDNhYTFmMjc2ZjE5ZDZlNWE1NDU1MWQ0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yNDQ2LDE2ICsyNDQ2LDE2IEBAIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnJlcXVlc3RTdG9yYWdlU3BhY2UoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBjb25zdCBDbGllbnRPCiAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpSZXF1ZXN0U3Rv
cmFnZVNwYWNlIHsgc2Vzc2lvbklELCBvcmlnaW4sIHF1b3RhLCBjdXJyZW50U2l6ZSwgc3BhY2VS
ZXF1aXJlZCB9LCBXVEZNb3ZlKGNhbGxiYWNrKSwgMCk7CiB9CiAKLWNsYXNzIFF1b3RhVXNlcklu
aXRpYWxpemVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgeworY2xh
c3MgRHVtbXlRdW90YVVzZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNl
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
UXVvdGFVc2VySW5pdGlhbGl6ZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKKyAgICBl
eHBsaWNpdCBEdW1teVF1b3RhVXNlcihTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2VyKQogICAg
ICAgICA6IG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKICAgICB7CiAgICAgICAgIG1h
bmFnZXIuYWRkVXNlcigqdGhpcyk7CiAgICAgfQogCi0gICAgflF1b3RhVXNlckluaXRpYWxpemVy
KCkKKyAgICB+RHVtbXlRdW90YVVzZXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fbWFuYWdlcikK
ICAgICAgICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7CkBAIC0yNDcxLDcgKzI0
NzEsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICB2b2lkIHdo
ZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFs
CisgICAgdm9pZCBzeW5jU3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFjaykgZmluYWwKICAgICB7CiAgICAgICAgIG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KTsKICAgICB9CkBAIC0yNDgyLDcgKzI0ODIsNyBAQCBwcml2YXRlOgogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplUXVvdGFVc2VycyhTdG9yYWdlUXVvdGFNYW5hZ2VyJiBtYW5hZ2Vy
LCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQog
ewotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cih0aGlzKSwgc2Vzc2lvbklELCBvcmlnaW4sIHVzZXIgPSBtYWtlVW5pcXVlPFF1b3RhVXNl
ckluaXRpYWxpemVyPihtYW5hZ2VyKV0oKSBtdXRhYmxlIHsKKyAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwg
b3JpZ2luLCB1c2VyID0gbWFrZVVuaXF1ZTxEdW1teVF1b3RhVXNlcj4obWFuYWdlcildKCkgbXV0
YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHRoaXMtPmlkYlNlcnZlcihzZXNzaW9uSUQpLmluaXRpYWxpemVRdW90YVVzZXIob3JpZ2lu
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCAyMzg3OTQxNmZmZGMzZDIxMzA2
N2QxZTI3OTUxN2VlMTRjYmI1YTZjLi5iNGIzNTg5Y2M3NWE4MTY4NTA0ZjU3MDE0ZDkzMDg4Mjgy
MTAzYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC03NCw3ICs3NCw3IEBA
IENhY2hlczo6fkNhY2hlcygpCiAgICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5yZW1vdmVVc2VyKCp0
aGlzKTsKIH0KIAotdm9pZCBDYWNoZXM6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY2FsbGJhY2spCit2b2lkIENhY2hlczo6c3luY1NwYWNlVXNlZChDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCiB7CiAgICAgaW5pdGlhbGl6ZShbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAg
aWYgKGVycm9yKQpAQCAtNjA4LDEwICs2MDgsOCBAQCB2b2lkIENhY2hlczo6cmVtb3ZlQ2FjaGVF
bnRyeShjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5KQogdm9pZCBDYWNoZXM6OnJlc2V0U3Bh
Y2VVc2VkKCkKIHsKICAgICBtX3NpemUgPSAwOwotICAgIGlmIChtX3F1b3RhTWFuYWdlcikgewot
ICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7Ci0gICAgICAgIG1fcXVv
dGFNYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKLSAgICB9CisgICAgaWYgKG1fcXVvdGFNYW5hZ2Vy
KQorICAgICAgICBtX3F1b3RhTWFuYWdlci0+dXNlck5lZWRTeW5jKCp0aGlzKTsKIH0KIAogdm9p
ZCBDYWNoZXM6OmNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaCBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmgKaW5kZXggM2M0NTFhNzIzZTFlOTJmNTU5ZjZmYmNlZjdmMWYzMzExODkwMmZhZS4uZjJk
NDYwYjhmZjQ0NGY3MWVkYWJhZDViYzU3ZGM3OWM4ZjFjYmM3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5oCkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWFkQ2FjaGVz
RnJvbURpc2soV1RGOjpGdW5jdGlvbjx2b2lkKEV4cGVjdGVkPFZlY3RvcjxDYWNoZT4sIFdlYkNv
cmU6OkRPTUNhY2hlRW5naW5lOjpFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd3JpdGVDYWNoZXNU
b0Rpc2soV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmKTsKIAot
ICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgZmlu
YWw7CisgICAgdm9pZCBzeW5jU3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikg
ZmluYWw7CiAKICAgICB2b2lkIHN0b3JlT3JpZ2luKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpD
b21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OkNsaWVu
dE9yaWdpbj4gcmVhZE9yaWdpbihjb25zdCBOZXR3b3JrQ2FjaGU6OkRhdGEmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379521</attachid>
            <date>2019-09-24 18:42:45 -0700</date>
            <delta_ts>2019-09-25 11:43:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190924184245.patch</filename>
            <type>text/plain</type>
            <size>81898</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NmNzhjNWVjM2VkOWE0
OGNmYTIyYjg3YTEwMzc2YmU3YTNiMGE2Yi4uYmRmMmMzOTU3MGNmYWI0ZDc5YjRjYjIwYmNlOGQw
NGQ3MmIxZWJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxOS0wOS0yNCAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgZGlzayB1c2Fn
ZSBvZiBJbmRleGVkREIgb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBpcyBiaWdnZXIgdGhh
biBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEN1cnJlbnRseSB3ZSByZWFkIHNpemUgb2YgSW5kZXhlZERCIGRhdGFiYXNlIGZp
bGVzIHdoZW4gYSBkYXRhYmFzZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLiBUaGlzIGZpbGUgc3lz
dGVtCisgICAgICAgIG9wZXJhdGlvbiBjb3VsZCBzbG93LgorCisgICAgICAgIEFuIGVmZmljaWVu
dCBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRlIHRoZSBzcGFjZSBhdmFpbGFibGUsIGVzdGltYXRl
IHNwYWNlIGluY3JlYXNlIGZvciBlYWNoIG9wZWFydGlvbiwgYW5kIGdldAorICAgICAgICB0aGUg
YWNjdXJhdGUgZmlsZSBzaXplIG9ubHkgd2hlbiB0aGUgYWNjdW11bGF0ZWQgZXN0aW1hdGVkIGlu
Y3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJsZS4KKworICAgICAgICBDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
UXVvdGFVc2VyOjpRdW90YVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRDb21wdXRlU3Bh
Y2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVz
ZXI6OnVwZGF0ZVNwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6UXVvdGFVc2VyOjpkaWRVcGRhdGVTcGFjZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2Vk
Rm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5p
c2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OnN0YXJ0VXBkYXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnVwZGF0ZVNwYWNlVXNlZEZvck9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZmluaXNoVXBkYXRp
bmdTcGFjZVVzZWRGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OmluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpob2xkU3BhY2VHcmFudGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZWxlYXNlU3BhY2VHcmFudGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkYXRhYmFzZVdpbGxCZU9wZW5lZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGF0YWJhc2VJc0Nsb3NlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbmNyZWFz
ZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjp3aGVuSW5pdGlhbGl6ZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3Rh
VXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6cmVzZXRTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVNwYWNl
VXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Zmls
ZW5hbWVGb3JEYXRhYmFzZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFz
ZVNpemVGb3JJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
Ojp1bmNoZWNrZWRQdXRJbmRleEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRh
dGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6ZXN0aW1h
dGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzY2hlZHVsZVNo
dXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRTaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZW5lcmF0
ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQ3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5h
bWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwdXRPckFkZEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRh
c2tSZXBseSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpm
b3JnZXRFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Z2VuZXJh
dGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6SURCRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRXJyb3I6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQkVycm9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6SURC
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OnNpemUgY29uc3QpOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnNwYWNlVXNhZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpoYW5kbGVQZW5kaW5nVXNl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aGFuZGxlUGVuZGlu
Z1VzZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcik6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVzZXJOZWVkc1RvQ29tcHV0ZVNw
YWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVV
c2Vyc1NwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpy
ZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6c2hv
dWxkQXNrRm9yTW9yZVNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjppbnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5l
ZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjph
c2tVc2VyVG9Jbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0
b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlcjo6Y29tcHV0ZVNw
YWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjp1cGRhdGVTcGFj
ZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlcjo6Y2FuVXBkYXRlU3Bh
Y2VVc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXI6OndoZW5J
bml0aWFsaXplZCk6IERlbGV0ZWQuCisKIDIwMTktMDktMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHNhbXBsaW5nIFBhZ2VDYWNoZS1yZWxhdGVkIEFn
Z0QgZGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBkNzI4YmZjN2Q3MjAxNWJiYTg1ZjcyZjE1NTI2OWRhYzE1ZDAz
MjBkLi44NDBlYzJhNWEzYmVhMjZiNWNlNzFmYmM1Y2MzMzc4MWNjZjlmOTViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDE5LTA5LTI0ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUu
Y29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdlIG9mIEluZGV4ZWREQiBvbmx5IHdoZW4g
ZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJsZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplUXVvdGFVc2Vycyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZXM6OmNvbXB1dGVTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6cmVzZXRTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaDoKKwogMjAxOS0wOS0yNCAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpUGFkT3NdIFRoZSBz
ZWNvbmQgY2xpY2sgZXZlbnQgaXMgbWlzc2luZyBvbiBkb3VibGUgdGFwIHdoZW4gZGJsY2xpY2sg
aGFuZGxlciBpcyBub3QgcHJlc2VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBiNTllZDdmMjI0NDcwNDE0N2Zk
MTkwYTFkMTdmYTg5NGQzOWZjYjBjLi45NjI5ODA3MjE0OTE5ODA4NGZmZWQxMzAzMzlkYzBhOTZl
MzY0YTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNjk3LDcgKzY5Nyw2IEBAIElEQlNlcnZlcjo6UXVvdGFV
c2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1h
bmFnZXIsCiAgICAgOiBtX3NlcnZlcihzZXJ2ZXIpCiAgICAgLCBtX21hbmFnZXIobWFrZVdlYWtQ
dHIobWFuYWdlcikpCiAgICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgLCBtX2lz
SW5pdGlhbGl6ZWQobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKIHsKICAgICBp
ZiAobWFuYWdlcikKICAgICAgICAgbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7CkBAIC03MTEsNjAg
KzcxMCw0MSBAQCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcigpCiAKIHZvaWQgSURC
U2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKIHsKLSAgICBtX3NwYWNlVXNlZCA9
IDA7Ci0gICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKLQotICAgIGlmICghbV9tYW5h
Z2VyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvbkNhbGxiYWNr
KTsKLQotICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgLy8gRG8gYWRkL3JlbW92
ZSB0byB0cmlnZ2VyIGNhbGwgdG8gd2hlbkluaXRpYWxpemVkLgotICAgIG1fbWFuYWdlci0+cmVt
b3ZlVXNlcigqdGhpcyk7Ci0gICAgbV9tYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnVzZXJOZWVkc1RvQ29tcHV0ZVNwYWNlVXNl
ZCgqdGhpcyk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3Bh
Y2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKIHsKLSAgICBpZiAo
IW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX3NwYWNlVXNl
ZCArIHNpemUgPiBtX3NwYWNlVXNlZCk7Ci0gICAgbV9zcGFjZVVzZWQgKz0gc2l6ZTsKKyAgICBt
X2NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworICAgIG1fc2VydmVyLnN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKIH0KLXZvaWQgSURCU2VydmVy
OjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCisKK3ZvaWQgSURC
U2VydmVyOjpRdW90YVVzZXI6OmRpZENvbXB1dGVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2Vk
KQogewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7CisgICAg
bV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7CisgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0g
MDsKKyAgICBBU1NFUlQoIW1fY2FsbGJhY2tzLmlzRW1wdHkoKSk7CisgICAgYXV0byBjYWxsYmFj
ayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7CiB9CiAKLXZvaWQg
SURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjp1cGRhdGVTcGFj
ZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQogewotICAgIGlmICht
X2lzSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsK
LSAgICBtX3NlcnZlci5zdGFydENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihtX29yaWdpbik7
CisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBtX3NlcnZl
ci5zdGFydFVwZGF0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKIH0KIAotdm9pZCBJ
REJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVz
ZWQpCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRVcGRhdGVTcGFjZVVzZWQodWludDY0
X3QgaW5jcmVhc2UsIHVpbnQ2NF90IGRlY3JlYXNlKQogewotICAgIEFTU0VSVChtX2lzSW5pdGlh
bGl6ZWQgfHwgIW1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSk7Ci0gICAgbV9zcGFjZVVzZWQgPSBz
cGFjZVVzZWQ7Ci0gICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGlmIChhdXRvIGNh
bGxiYWNrID0gV1RGTW92ZShtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spKQotICAgICAgICBjYWxs
YmFjaygpOworICAgIGlmIChpbmNyZWFzZSkKKyAgICAgICAgbV9zcGFjZVVzZWQgKz0gaW5jcmVh
c2U7CisgICAgaWYgKGRlY3JlYXNlKQorICAgICAgICBtX3NwYWNlVXNlZCAtPSBkZWNyZWFzZTsK
KyAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPSAwOworICAgIEFTU0VSVCghbV9jYWxsYmFj
a3MuaXNFbXB0eSgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0
KCk7CisgICAgY2FsbGJhY2soKTsKIH0KIAogSURCU2VydmVyOjpRdW90YVVzZXImIElEQlNlcnZl
cjo6ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQpAQCAtNzc2LDcg
Kzc1NiwxMyBAQCBJREJTZXJ2ZXI6OlF1b3RhVXNlciYgSURCU2VydmVyOjplbnN1cmVRdW90YVVz
ZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiAKIHZvaWQgSURCU2VydmVyOjpzdGFydENv
bXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsK
LSAgICBBU1NFUlQoIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOworICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsKKyAg
ICAgICAgZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG9yaWdpbiwgZW5zdXJlUXVv
dGFVc2VyKG9yaWdpbikuZXN0aW1hdGVkU3BhY2VVc2VkKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZJREJTZXJ2ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4sIG9yaWdpbikpOwogfQogCkBA
IC03ODksMTIgKzc3NSw2NSBAQCB2b2lkIElEQlNlcnZlcjo6Y29tcHV0ZVNwYWNlVXNlZEZvck9y
aWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKICAgICBhdXRvIG5ld1ZlcnNpb25Pcmln
aW5EaXJlY3RvcnkgPSBJREJEYXRhYmFzZUlkZW50aWZpZXI6OmRhdGFiYXNlRGlyZWN0b3J5UmVs
YXRpdmVUb1Jvb3Qob3JpZ2luLnRvcE9yaWdpbiwgb3JpZ2luLmNsaWVudE9yaWdpbiwgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoLCAidjEiKTsKICAgICBhdXRvIHNpemUgPSBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3Rvcnkob2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9y
eSkgKyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3RvcnkobmV3
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSk7CiAKKyAgICBWZWN0b3I8SURCRGF0YWJhc2VJZGVudGlm
aWVyPiBkYXRhYmFzZXNUb1N0b3BUcmFja2luZzsKKyAgICBmb3IgKGF1dG8mIFtpZGVudGlmaWVy
LCB2YWx1ZV0gOiBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwKSB7CisgICAgICAgIGlmICh2YWx1
ZS5zZWNvbmQgPT0gSXNDbG9zZWQ6Ok5vKQorICAgICAgICAgICAgdmFsdWUuZmlyc3QgPSBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZUZvcklkZW50aWZpZXIoaWRlbnRpZmllciwg
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRh
YmFzZXNUb1N0b3BUcmFja2luZy5hcHBlbmQoaWRlbnRpZmllcik7CisgICAgfQorCisgICAgZm9y
IChhdXRvJiBpZGVudGlmaWVyIDogZGF0YWJhc2VzVG9TdG9wVHJhY2tpbmcpCisgICAgICAgIG1f
bW9kaWZpZWREYXRhYmFzZVNpemVNYXAucmVtb3ZlKGlkZW50aWZpZXIpOworCiAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6
ZmluaXNoQ29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luLCBvcmlnaW4sIHNpemUpKTsKIH0KIAog
dm9pZCBJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VVc2VkKQogewotICAgIGVuc3VyZVF1
b3RhVXNlcihvcmlnaW4pLmluaXRpYWxpemVTcGFjZVVzZWQoc3BhY2VVc2VkKTsKKyAgICBpZiAo
YXV0byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKKyAgICAgICAgdXNlci0+ZGlk
Q29tcHV0ZVNwYWNlVXNlZChzcGFjZVVzZWQpOworfQorCit2b2lkIElEQlNlcnZlcjo6c3RhcnRV
cGRhdGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3sK
KyAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkgeworICAgICAgICBmaW5pc2hVcGRh
dGluZ1NwYWNlVXNlZEZvck9yaWdpbihvcmlnaW4sIDAsIDApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMs
ICZJREJTZXJ2ZXI6OnVwZGF0ZVNwYWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luKSk7Cit9CisKK3Zv
aWQgSURCU2VydmVyOjp1cGRhdGVTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2lu
JiBvcmlnaW4pCit7CisgICAgV1RGTG9nQWx3YXlzKCJzaWh1aWw6IFslcF1JREJTZXJ2ZXI6OnVw
ZGF0ZVNwYWNlVXNlZEZvck9yaWdpbiIsIHRoaXMpOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOworCisgICAgVmVjdG9yPElEQkRhdGFiYXNlSWRlbnRpZmllcj4gZGF0YWJhc2VzVG9TdG9w
VHJhY2tpbmc7CisgICAgdWludDY0X3QgaW5jcmVhc2UgPSAwLCBkZWNyZWFzZSA9IDA7CisgICAg
Zm9yIChhdXRvJiBbaWRlbnRpZmllciwgdmFsdWVdIDogbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1h
cCkgeworICAgICAgICBhdXRvIGN1cnJlbnRTaXplID0gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
YXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRTaXplID4gdmFsdWUuZmlyc3QpCisgICAgICAgICAg
ICBpbmNyZWFzZSArPSBjdXJyZW50U2l6ZSAtIHZhbHVlLmZpcnN0OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBkZWNyZWFzZSArPSB2YWx1ZS5maXJzdCAtIGN1cnJlbnRTaXplOworICAgICAg
ICB2YWx1ZS5maXJzdCA9IGN1cnJlbnRTaXplOworCisgICAgICAgIGlmICh2YWx1ZS5zZWNvbmQg
PT0gSXNDbG9zZWQ6OlllcykKKyAgICAgICAgICAgIGRhdGFiYXNlc1RvU3RvcFRyYWNraW5nLmFw
cGVuZChpZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBk
YXRhYmFzZXNUb1N0b3BUcmFja2luZykKKyAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1h
cC5yZW1vdmUoaWRlbnRpZmllcik7CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpmaW5pc2hVcGRhdGluZ1NwYWNlVXNl
ZEZvck9yaWdpbiwgb3JpZ2luLCBpbmNyZWFzZSwgZGVjcmVhc2UpKTsKK30KKwordm9pZCBJREJT
ZXJ2ZXI6OmZpbmlzaFVwZGF0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdp
biYgb3JpZ2luLCB1aW50NjRfdCBpbmNyZWFzZSwgdWludDY0X3QgZGVjcmVhc2UpCit7CisgICAg
aWYgKGF1dG8qIHVzZXIgPSBtX3F1b3RhVXNlcnMuZ2V0KG9yaWdpbikpCisgICAgICAgIHVzZXIt
PmRpZFVwZGF0ZVNwYWNlVXNlZChpbmNyZWFzZSwgZGVjcmVhc2UpOwogfQogCiB2b2lkIElEQlNl
cnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0
YXNrU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNp
c2lvbik+JiYgY2FsbGJhY2spCkBAIC04MDgsMzAgKzg0Nyw0NCBAQCB2b2lkIElEQlNlcnZlcjo6
cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6
ZSwgQ29tcAogICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHRhc2tTaXplLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXNldFNwYWNlVXNlZChjb25zdCBD
bGllbnRPcmlnaW4mIG9yaWdpbikKK3ZvaWQgSURCU2VydmVyOjppbmNyZWFzZUVzdGltYXRlZFNw
YWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKIHsKICAg
ICBpZiAoYXV0byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKLSAgICAgICAgdXNl
ci0+cmVzZXRTcGFjZVVzZWQoKTsKKyAgICAgICAgdXNlci0+aW5jcmVhc2VFc3RpbWF0ZWRTcGFj
ZVVzZWQoc2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKK3ZvaWQgSURCU2VydmVyOjpo
b2xkU3BhY2VHcmFudGVkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFj
ZVNpemUpCiB7Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VTcGFjZVVzZWQo
c2l6ZSk7CisgICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaG9sZFNwYWNlR3JhbnRlZChzcGFj
ZVNpemUpOwogfQogCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCit2b2lkIElEQlNlcnZlcjo6cmVsZWFz
ZVNwYWNlR3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc3BhY2VT
aXplKQogewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmRlY3JlYXNlU3BhY2VVc2VkKHNp
emUpOworICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLnJlbGVhc2VTcGFjZUdyYW50ZWQoc3Bh
Y2VTaXplKTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2Vk
KGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkKK3VpbnQ2NF90
IElEQlNlcnZlcjo6ZGF0YWJhc2VXaWxsQmVPcGVuZWQoY29uc3QgSURCRGF0YWJhc2VJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQogewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmluY3JlYXNl
UG90ZW50aWFsU3BhY2VVc2VkKHRhc2tTaXplKTsKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKworICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGF1dG8gZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gdGhpcy0+ZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoSXNvbGF0ZWRDb3B5KCk7CisgICAgQVNTRVJUKCFkYXRhYmFzZURpcmVjdG9yeVBh
dGguaXNFbXB0eSgpKTsKKyAgICBhdXRvIHNpemVCZWZvcmVPcGVuID0gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpkYXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIsIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCk7CisgICAgbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcC5zZXQoaWRlbnRpZmll
ciwgc3RkOjptYWtlX3BhaXIoc2l6ZUJlZm9yZU9wZW4sIElzQ2xvc2VkOjpObykpOworICAgIHJl
dHVybiBzaXplQmVmb3JlT3BlbjsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBzcGFjZVVz
ZWQpCit2b2lkIElEQlNlcnZlcjo6ZGF0YWJhc2VJc0Nsb3NlZChjb25zdCBJREJEYXRhYmFzZUlk
ZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoc3BhY2VVc2VkKTsKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLmNvbnRhaW5zKGlk
ZW50aWZpZXIpKSB7CisgICAgICAgIGF1dG8gc2l6ZSA9IG1fbW9kaWZpZWREYXRhYmFzZVNpemVN
YXAuZ2V0KGlkZW50aWZpZXIpLmZpcnN0OworICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2VTaXpl
TWFwLnNldChpZGVudGlmaWVyLCBzdGQ6Om1ha2VfcGFpcihzaXplLCBJc0Nsb3NlZDo6WWVzKSk7
CisgICAgfQogfQogCiB2b2lkIElEQlNlcnZlcjo6dXBncmFkZUZpbGVzSWZOZWNlc3NhcnkoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCmluZGV4IDE5ZTY5NjJlZDE5YWJhNTQwMzJjYTA0NDcyNGVkMTExNTM1NGE1YWYuLmRhNTZi
NWRhNTBmNjIxNDVjODc5MmYxZWFiNDkyMTBlMTZlYjk0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTExNCwxMSAr
MTE0LDEyIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRl
RGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1
bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCiAgICAgdm9pZCByZXF1ZXN0
U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAgICB2b2lk
IGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90
IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENs
aWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNlU3BhY2VV
c2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQgZGVjcmVh
c2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0gICAgdm9p
ZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIGhvbGRTcGFj
ZUdyYW50ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOworICAgIHZv
aWQgcmVsZWFzZVNwYWNlR3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNr
U2l6ZSk7CisgICAgdm9pZCBpbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNlZChjb25zdCBDbGllbnRP
cmlnaW4mLCB1aW50NjRfdCBzaXplKTsKKyAgICBlbnVtIGNsYXNzIElzQ2xvc2VkIHsgTm8sIFll
cyB9OworICAgIHVpbnQ2NF90IGRhdGFiYXNlV2lsbEJlT3BlbmVkKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYpOworICAgIHZvaWQgZGF0YWJhc2VJc0Nsb3NlZChjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihjb25zdCBDbGll
bnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90YVVzZXIob3JpZ2luKTsgfQogCkBAIC0xNTIs
NDEgKzE1Myw1MSBAQCBwcml2YXRlOgogCiAgICAgICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1h
bmFnZXIoKSB7IHJldHVybiBtX21hbmFnZXIuZ2V0KCk7IH0KIAotICAgICAgICB2b2lkIHNldFNw
YWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0K
ICAgICAgICAgdm9pZCByZXNldFNwYWNlVXNlZCgpOwogCi0gICAgICAgIHZvaWQgaW5jcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUlu
Y3JlYXNlICs9IGluY3JlYXNlOyB9Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQodWludDY0X3QgZGVjcmVhc2UpCisgICAgICAgIHZvaWQgaG9sZFNwYWNlR3JhbnRlZCh1
aW50NjRfdCBzaXplKSB7IG1fc3BhY2VSZXNlcnZlZCArPSBzaXplOyB9CisgICAgICAgIHZvaWQg
cmVsZWFzZVNwYWNlR3JhbnRlZCh1aW50NjRfdCBzaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID49IGRlY3JlYXNlKTsKLSAgICAgICAg
ICAgIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSAtPSBkZWNyZWFzZTsKKyAgICAgICAgICAgIEFT
U0VSVChtX3NwYWNlUmVzZXJ2ZWQgPj0gc2l6ZSk7CisgICAgICAgICAgICBtX3NwYWNlUmVzZXJ2
ZWQgLT0gc2l6ZTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGluY3JlYXNlU3BhY2VVc2VkKHVp
bnQ2NF90IHNpemUpOwotICAgICAgICB2b2lkIGRlY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNp
emUpOworICAgICAgICB2b2lkIGluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2VkKHVpbnQ2NF90IHNp
emUpIHsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IHNpemU7IH0KIAotICAgICAgICB2b2lk
IGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKKyAgICAgICAgdm9pZCBj
b21wdXRlU3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CisgICAg
ICAgIHZvaWQgZGlkQ29tcHV0ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpOworICAgICAg
ICB2b2lkIHVwZGF0ZVNwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFs
OworICAgICAgICB2b2lkIGRpZFVwZGF0ZVNwYWNlVXNlZCh1aW50NjRfdCBpbmNyZWFzZSwgdWlu
dDY0X3QgZGVjcmVhc2UpOworCisgICAgICAgIHVpbnQ2NF90IGVzdGltYXRlZFNwYWNlVXNlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOyB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsgfQotICAg
ICAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZp
bmFsOworICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3NwYWNlVXNlZCArIG1fc3BhY2VSZXNlcnZlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsg
fQorICAgICAgICBib29sIGNhblVwZGF0ZVNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwogICAgICAgICBXZWFrUHRy
PFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKICAgICAgICAgQ2xpZW50T3JpZ2luIG1f
b3JpZ2luOwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07CisgICAgICAg
IC8vIFNwYWNlIGluIHVzZS4KICAgICAgICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAwIH07Cisg
ICAgICAgIC8vIFJlc2VydmVkIHNwYWNlIGZvciBvbmdvaW5nIHRhc2tzLgorICAgICAgICB1aW50
NjRfdCBtX3NwYWNlUmVzZXJ2ZWQgeyAwIH07CisgICAgICAgIC8vIEVzdGltYXRlZCBzcGFjZSBp
bmNyZWFzZSBmb3IgZmluaXNoZWQgdGFza3Mgc2luY2UgbGFzdCB1cGRhdGUvY29tcHV0YXRpb24u
CiAgICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSB7IDAgfTsKLSAgICAg
ICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2s7Cisg
ICAgICAgIERlcXVlPENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fY2FsbGJhY2tzOwogICAg
IH07CiAKICAgICBXRUJDT1JFX0VYUE9SVCBRdW90YVVzZXImIGVuc3VyZVF1b3RhVXNlcihjb25z
dCBDbGllbnRPcmlnaW4mKTsKICAgICB2b2lkIHN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3Jp
Z2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwogICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZEZvck9y
aWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKICAgICB2b2lkIGZpbmlzaENvbXB1dGluZ1NwYWNl
VXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVVzZWQpOwor
ICAgIHZvaWQgc3RhcnRVcGRhdGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmln
aW4mKTsKKyAgICB2b2lkIHVwZGF0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmln
aW4mKTsKKyAgICB2b2lkIGZpbmlzaFVwZGF0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENs
aWVudE9yaWdpbiYsIHVpbnQ2NF90IGluY3JlYXNlLCB1aW50NjRfdCBkZWNyZWFzZSk7CiAKICAg
ICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKICAgICBIYXNoTWFwPElEQkNvbm5lY3Rpb25J
ZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlvblRvQ2xpZW50Pj4gbV9jb25uZWN0aW9uTWFw
OwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8VW5p
cXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwOworICAgIEhhc2hNYXA8SURC
RGF0YWJhc2VJZGVudGlmaWVyLCBzdGQ6OnBhaXI8dWludDY0X3QsIElzQ2xvc2VkPj4gbV9tb2Rp
ZmllZERhdGFiYXNlU2l6ZU1hcDsKIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFVuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbio+IG1fZGF0YWJhc2VDb25uZWN0aW9uczsKICAgICBIYXNoTWFwPElE
QlJlc291cmNlSWRlbnRpZmllciwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbio+IG1fdHJh
bnNhY3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAyNzliMzE1
OTE2YmQzOWQ4ZDRhODYwNmU3MDVkYjdlNTVkMTlhZTcwLi4yOTk0NGIxZGZlOTE4NDU1YmQ3ODhj
OGE2NDdjNTZlMzY0YTc0NTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApA
QCAtNzIyLDE0ICs3MjIsMTQgQEAgU3RyaW5nIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VOYW1lRnJvbUVuY29kZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGVuY28KICAgICByZXR1cm4g
RmlsZVN5c3RlbTo6ZGVjb2RlRnJvbUZpbGVuYW1lKHBhcnRpYWxseURlY29kZWQpOwogfQogCi1T
dHJpbmcgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpIGNv
bnN0CitTdHJpbmcgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpmaWxlbmFtZUZvckRhdGFiYXNlTmFt
ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKIHsKLSAgICBBU1NFUlQoIW1faWRlbnRpZmll
ci5kYXRhYmFzZU5hbWUoKS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFkYXRhYmFzZU5hbWUuaXNO
dWxsKCkpOwogCi0gICAgaWYgKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKS5pc0VtcHR5KCkp
CisgICAgaWYgKGRhdGFiYXNlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAiJTAwIjsK
IAotICAgIFN0cmluZyBmaWxlbmFtZSA9IEZpbGVTeXN0ZW06OmVuY29kZUZvckZpbGVOYW1lKG1f
aWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSk7CisgICAgU3RyaW5nIGZpbGVuYW1lID0gRmlsZVN5
c3RlbTo6ZW5jb2RlRm9yRmlsZU5hbWUoZGF0YWJhc2VOYW1lKTsKICAgICBmaWxlbmFtZS5yZXBs
YWNlKCcuJywgIiUyRSIpOwogCiAgICAgcmV0dXJuIGZpbGVuYW1lOwpAQCAtNzY3LDcgKzc2Nyw3
IEBAIFN0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZ1bGxEYXRhYmFzZURpcmVjdG9yeVdp
dGhVcGdyYWRlKCkKIHsKICAgICBhdXRvIGRhdGFiYXNlUm9vdERpcmVjdG9yeSA9IHRoaXMtPmRh
dGFiYXNlUm9vdERpcmVjdG9yeUlzb2xhdGVkQ29weSgpOwogICAgIFN0cmluZyBvbGRPcmlnaW5E
aXJlY3RvcnkgPSBtX2lkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChk
YXRhYmFzZVJvb3REaXJlY3RvcnksICJ2MCIpOwotICAgIFN0cmluZyBvbGREYXRhYmFzZURpcmVj
dG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChvbGRPcmlnaW5EaXJl
Y3RvcnksIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkpOworICAgIFN0cmluZyBvbGREYXRhYmFz
ZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChvbGRPcmln
aW5EaXJlY3RvcnksIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKG1faWRlbnRpZmllci5kYXRhYmFz
ZU5hbWUoKSkpOwogICAgIFN0cmluZyBuZXdPcmlnaW5EaXJlY3RvcnkgPSBtX2lkZW50aWZpZXIu
ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChkYXRhYmFzZVJvb3REaXJlY3RvcnksICJ2
MSIpOwogICAgIFN0cmluZyBmaWxlTmFtZUhhc2ggPSBTUUxpdGVGaWxlU3lzdGVtOjpjb21wdXRl
SGFzaEZvckZpbGVOYW1lKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSk7CiAgICAgVmVjdG9y
PFN0cmluZz4gZGlyZWN0b3JpZXNXaXRoU2FtZUhhc2ggPSBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0
b3J5KG5ld09yaWdpbkRpcmVjdG9yeSwgZmlsZU5hbWVIYXNoICsgIioiKTsKQEAgLTg2MSw2ICs4
NjEsMjAgQEAgdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZVNpemUoKSBj
b25zdAogICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGZ1
bGxEYXRhYmFzZVBhdGgoKSk7CiB9CiAKK3VpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VTaXplRm9ySWRlbnRpZmllcihjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSkKK3sKKyAgICBhdXRvIG9sZE9y
aWdpbkRpcmVjdG9yeSA9IGlkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9v
dChyb290RGlyZWN0b3J5LCAidjAiKTsKKyAgICBhdXRvIG9sZERhdGFiYXNlRGlyZWN0b3J5ID0g
RmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9sZE9yaWdpbkRpcmVjdG9yeSwg
ZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoaWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkpOworICAg
IGF1dG8gb2xkRGF0YWJhc2VQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG9sZERhdGFiYXNlRGlyZWN0b3J5LCAiSW5kZXhlZERCLnNxbGl0ZTMiKTsKKworICAgIGF1
dG8gb3JpZ2luRGlyZWN0b3J5ID0gaWRlbnRpZmllci5kYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZl
VG9Sb290KHJvb3REaXJlY3RvcnksICJ2MSIpOworICAgIGF1dG8gZmlsZU5hbWVIYXNoID0gU1FM
aXRlRmlsZVN5c3RlbTo6Y29tcHV0ZUhhc2hGb3JGaWxlTmFtZShpZGVudGlmaWVyLmRhdGFiYXNl
TmFtZSgpKTsKKyAgICBhdXRvIGRhdGFiYXNlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpbkRpcmVjdG9yeSwgZmlsZU5hbWVIYXNoKTsKKyAgICBh
dXRvIGRhdGFiYXNlUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChk
YXRhYmFzZURpcmVjdG9yeSwgIkluZGV4ZWREQi5zcWxpdGUzIik7CisKKyAgICByZXR1cm4gU1FM
aXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShvbGREYXRhYmFzZVBhdGgpICsgU1FM
aXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShkYXRhYmFzZVBhdGgpOworfQorCiBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURC
VHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24gLSAlcyIsIGluZm8uaWRlbnRpZmllcigpLmxv
Z2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTk4NCw3ICs5OTgsNyBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdAogCiAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0
U3RvcmUoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHJldHVybiBJREJF
cnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBrZXlQYXRoQmxvYi0+c2l6ZSgpIH07CiB9CiAKIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllcikKQEAgLTExMDUsOSArMTExOSwxMyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdAogICAgICAgICB9CiAgICAgfQogCisgICAgU3RyaW5nIG9sZE5hbWU7CisgICAgaWYg
KGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdP
YmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpKQorICAgICAgICBvbGROYW1lID0gb2Jq
ZWN0U3RvcmVJbmZvLT5uYW1lKCk7CiAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0
b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICByZXR1cm4gSURCRXJy
b3IgeyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IG5ld05hbWUuc2l6ZUluQnl0ZXMo
KSA+IG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA/IG5ld05hbWUuc2l6ZUluQnl0ZXMoKSAtIG9sZE5h
bWUuc2l6ZUluQnl0ZXMoKSA6IDA7CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0
LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQpCkBAIC0xMTg0LDYgKzEyMDIs
NyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBhZGQgaW5kZXggJyVzJyB0byBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5mby5uYW1l
KCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAi
VW5hYmxlIHRvIGNyZWF0ZSBpbmRleCBpbiBkYXRhYmFzZSJfcyB9OwogICAgIH0KKyAgICB1aW50
NjRfdCBzaXplSW5jcmVhc2UgPSBpbmZvLm5hbWUoKS5zaXplSW5CeXRlcygpICsga2V5UGF0aEJs
b2ItPnNpemUoKTsKIAogICAgIC8vIFdyaXRlIGluZGV4IHJlY29yZHMgZm9yIGFueSByZWNvcmRz
IHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGlzIG9iamVjdCBzdG9yZS4KIApAQCAtMTIxNCw2ICsx
MjMzLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKIAogICAgICAgICAgICAgcmV0dXJuIGVy
cm9yOwogICAgICAgICB9CisgICAgICAgIHNpemVJbmNyZWFzZSArPSBlcnJvci5zaXplKCk7CiAK
ICAgICAgICAgaWYgKCFjdXJzb3ItPmFkdmFuY2UoMSkpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiRXJyb3IgYWR2YW5jaW5nIGN1cnNvciB3aGlsZSBpbmRleGluZyBleGlzdGluZyByZWNvcmRz
IGZvciBuZXcgaW5kZXguIik7CkBAIC0xMjMxLDcgKzEyNTEsNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhYwogICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAgICAgb2JqZWN0U3RvcmUtPmFkZEV4
aXN0aW5nSW5kZXgoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHJldHVy
biBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRIYXNJbmRleFJlY29yZChjb25z
dCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQktleURhdGEmIGluZGV4S2V5LCBib29sJiBo
YXNSZWNvcmQpCkBAIC0xMjkxLDYgKzEzMTEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgYwog
ICAgICAgICB9CiAgICAgfQogCisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gMDsKICAgICBm
b3IgKGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7CiAgICAgICAgIGlmICghaW5kZXhLZXku
aXNWYWxpZCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjk5LDkgKzEzMjAsMTAgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtleShjb25z
dCBJREJJbmRleEluZm8mIGluZm8sIGMKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IHB1dCBpbmRleCByZWNvcmQgZm9yIG5ld2x5IGNyZWF0ZWQgaW5kZXgiKTsKICAgICAgICAgICAg
IHJldHVybiBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iu
c2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgcmV0dXJuIElE
QkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRh
JiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXksIGludDY0X3Qg
cmVjb3JkSUQpCkBAIC0xMzM0LDcgKzEzNTYsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRf
dCBzaXplSW5jcmVhc2UgPSBpbmRleEtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWVCdWZmZXItPnNp
emUoKTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3Jl
YXNlIH07CiB9CiAKIApAQCAtMTQxOSw5ICsxNDQyLDExIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBhdXRvIG9sZE5hbWUgPSBpbmRleEluZm8tPm5h
bWUoKTsKICAgICBpbmRleEluZm8tPnJlbmFtZShuZXdOYW1lKTsKIAotICAgIHJldHVybiBJREJF
cnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gbmV3TmFtZS5zaXplSW5CeXRl
cygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygpID8gbmV3TmFtZS5zaXplSW5CeXRlcygpIC0gb2xk
TmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxv
cHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURC
S2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQpAQCAtMTY4OCw2ICsxNzEzLDcgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVj
b3JkKGNvbnN0IElEQk9iamVjdFN0b3IKIAogICAgIElEQkVycm9yIGVycm9yOwogICAgIGJvb2wg
YW55UmVjb3Jkc1N1Y2NlZWRlZCA9IGZhbHNlOworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9
IDA7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IGluZm8uaW5kZXhNYXAoKS52YWx1ZXMoKSkgewog
ICAgICAgICBJbmRleEtleSBpbmRleEtleTsKICAgICAgICAgZ2VuZXJhdGVJbmRleEtleUZvclZh
bHVlKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPmV4ZWNTdGF0ZSgpLCBpbmRleCwganNWYWx1ZSwg
aW5kZXhLZXksIGluZm8ua2V5UGF0aCgpLCBrZXkpOwpAQCAtMTY5OCw2ICsxNzI0LDcgQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3Jk
KGNvbnN0IElEQk9iamVjdFN0b3IKICAgICAgICAgZXJyb3IgPSB1bmNoZWNrZWRQdXRJbmRleEtl
eShpbmRleCwga2V5LCBpbmRleEtleSwgcmVjb3JkSUQpOwogICAgICAgICBpZiAoIWVycm9yLmlz
TnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHNpemVJbmNyZWFzZSArPSBlcnJv
ci5zaXplKCk7CiAKICAgICAgICAgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IHRydWU7CiAgICAgfQpA
QCAtMTcxNiw3ICsxNzQzLDEwIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBk
YXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIGVycm9yOworICAgIAorICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVs
bG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgb2JqZWN0U3RvcmVJbmZvLCBj
b25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUpCkBAIC0xNzU3
LDYgKzE3ODcsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgICAgIHJlY29yZElE
ID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CiAgICAgfQorICAgIHVpbnQ2NF90IHNp
emVJbmNyZWFzZSA9IGtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWUuZGF0YSgpLmRhdGEoKS0+c2l6
ZSgpOwogCiAgICAgYXV0byBlcnJvciA9IHVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQob2Jq
ZWN0U3RvcmVJbmZvLCBrZXlEYXRhLCB2YWx1ZS5kYXRhKCksIHJlY29yZElEKTsKIApAQCAtMTc3
Miw2ICsxODAzLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICByZXR1cm4g
ZXJyb3I7CiAgICAgfQorICAgIHNpemVJbmNyZWFzZSArPSBlcnJvci5zaXplKCk7CiAKICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMgPSB2YWx1ZS5ibG9iVVJMcygpOwogICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZXMgPSB2YWx1ZS5ibG9iRmlsZVBhdGhzKCk7CkBA
IC0xODI2LDcgKzE4NTgsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgdHJhbnNh
Y3Rpb24tPm5vdGlmeUN1cnNvcnNPZkNoYW5nZXMob2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIo
KSk7CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxs
b3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RT
dG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBWZWN0b3I8U3RyaW5nPiYgYmxv
YkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCBjYTZjMzM2YWM2
MzAzZTYyZDE3N2JhMzgzYjkwYTc1OWRlMDRjMTU5Li42NjY3ZDg4ZGM2MTFlZjM4MTc5ZDY3NWUy
NjlhM2RjMjA2NjMxNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC05OSwx
MiArOTksMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgZnVsbERhdGFiYXNlUGF0aEZv
ckRpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgU3RyaW5nIGRhdGFiYXNlTmFt
ZUZyb21GaWxlKGNvbnN0IFN0cmluZyYpOwogCisgICAgc3RhdGljIHVpbnQ2NF90IGRhdGFiYXNl
U2l6ZUZvcklkZW50aWZpZXIoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3Ry
aW5nJiByb290RGlyZWN0b3J5KTsKKwogICAgIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJikgY29uc3QgZmluYWw7CiAKICAgICBQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQogCiBwcml2YXRlOgotICAg
IFN0cmluZyBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpIGNvbnN0OworICAgIHN0YXRpYyBTdHJp
bmcgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGZ1
bGxEYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5
V2l0aFVwZ3JhZGUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGQ4NWIw
MDE0OGEyYTVjMzA2MGJhNTBjMGUxMjIwNzVjNjM1YmJjNGYuLmUwNmQ3YTMyYjUzOTE4NDQzNGRl
YTc2MDYxMTViMDU2OWQzM2NjY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtNTUs
NiArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAK
IHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ID0gNDsKK3N0
YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3QgPSAxMCAqIEtCOwog
CiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJLZXlEYXRhJiBr
ZXlEYXRhKQogewpAQCAtODgsMTAgKzg5LDIzIEBAIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0
aW1hdGVTaXplKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gc2l6ZTsKIH0KIAor
c3RhdGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlQYXRoLCBbXShjb25zdCBTdHJp
bmcmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICB9LCBb
XShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9
IDA7CisgICAgICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpCisgICAgICAgICAgICBzaXplICs9
IHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfSk7Cit9CisK
IHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQkluZGV4SW5mbyYg
aW5mbykKIHsKICAgICB1aW50NjRfdCBzaXplID0gNDsKICAgICBzaXplICs9IGluZm8ubmFtZSgp
LnNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoaW5mby5rZXlQYXRoKCkp
OwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC05OSw5ICsxMTMsOCBAQCBzdGF0aWMgaW5saW5l
IHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiB7
CiAgICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6ZSArPSBpbmZvLm5hbWUoKS5zaXplSW5C
eXRlcygpOwotICAgIC8vIEZJWE1FOiBlc3RpbWF0ZSBrZXlQYXRoLgotICAgIGZvciAoYXV0byYg
aW5kZXhJbmZvIDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKQotICAgICAgICBzaXplICs9IGVz
dGltYXRlU2l6ZShpbmRleEluZm8pOworICAgIGlmIChhdXRvIGtleVBhdGggPSBpbmZvLmtleVBh
dGgoKSkKKyAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoKmtleVBhdGgpOwogICAgIHJldHVy
biBzaXplOwogfQogCkBAIC0yMDcsNiArMjIwLDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
CiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykp
OwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVp
bnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIG1fc2VydmVyLT5o
b2xkU3BhY2VHcmFudGVkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOworICAgIG1f
cGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOworfQor
Cit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRf
dCBpZGVudGlmaWVyLCB1aW50NjRfdCBhY3R1YWxUYXNrU2l6ZSkKK3sKKyAgICBhdXRvIGl0ZXJh
dG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7CisgICAg
aWYgKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSkgeworICAg
ICAgICBtX3NlcnZlci0+cmVsZWFzZVNwYWNlR3JhbnRlZChtX2lkZW50aWZpZXIub3JpZ2luKCks
IGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZUVzdGltYXRlZFNw
YWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGFjdHVhbFRhc2tTaXplKTsKKyAgICAgICAg
bV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJlbW92ZShpdGVyYXRvcik7CisgICAgfQorfQor
CiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQog
ewogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
dXJyZW50T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBAIC0yMTksNyArMjQ4LDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAg
ICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFdl
IGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlzdGluZyBvciBhIG5ldyBkYXRhYmFz
ZS4KICAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNvc3Qgc28gdGhhdCBpdCBpcyBub3Qg
cG9zc2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGF0YWJhc2UuCi0gICAgICAg
ICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVs
dFdyaXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyld
KGF1dG8gZGVjaXNpb24pIG11dGFibGUgeworICAgICAgICAgICAgbV9zZXJ2ZXItPnJlcXVlc3RT
cGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdCwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNpemUgPSBkZWZhdWx0T3Blbk9wZXJh
dGlvbkNvc3RdKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewogICAgICAgICAgICAgICAgIGlmICgh
d2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjM1LDcgKzI2NCw5
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlm
aWVyKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IHRoaXMtPmdlbmVy
YXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0
U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMtPnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUsIG1faWRlbnRpZmllciwgY2FsbGJhY2tJ
RCkpOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAt
MzQ4LDE1ICszNzksMTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0
b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3Jl
KCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNl
U2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9i
YWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwogICAg
ICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlk
ZW50aWZpZXIpOwotICAgICAgICBtX2N1cnJlbnREYXRhYmFzZVNpemUgPSBiYWNraW5nU3RvcmUt
PmRhdGFiYXNlU2l6ZSgpOwogCisgICAgICAgIG1fc2VydmVyLT5kYXRhYmFzZVdpbGxCZU9wZW5l
ZChpZGVudGlmaWVyKTsKICAgICAgICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKICAg
ICAgICAgYXV0byBlcnJvciA9IGJhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUlu
Zm8oZGF0YWJhc2VJbmZvKTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKQEAgLTM2NCwx
MyArMzk0LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVsZXRlZFZl
cnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3RvcmUtPmRl
bGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdT
dG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAgICAgfQogCisgICAgbV9zZXJ2ZXItPmRhdGFiYXNlSXND
bG9zZWQoaWRlbnRpZmllcik7CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdT
dG9yZSwgZGVsZXRlZFZlcnNpb24pKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKQordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
VW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSIpOwpAQCAtMzc4LDcgKzQwOSw3IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0
b3JlKCkKICAgICBpZiAobV9iYWNraW5nU3RvcmUpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5k
ZWxldGVCYWNraW5nU3RvcmUoKTsKIAotICAgIHNodXRkb3duRm9yQ2xvc2UoKTsKKyAgICBzaHV0
ZG93bkZvckNsb3NlKGlkZW50aWZpZXIpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpz
Y2hlZHVsZVNodXRkb3duRm9yQ2xvc2UoKQpAQCAtMzkwLDI3ICs0MjEsMjcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6c2NoZWR1bGVTaHV0ZG93bkZvckNsb3NlKCkKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpOwogICAgIG1fb3duaW5nUG9pbnRlckZvckNs
b3NlID0gbV9zZXJ2ZXItPmNsb3NlQW5kVGFrZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKIAot
ICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNy
ZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZv
ckNsb3NlLCBtX2lkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1
dGRvd25Gb3JDbG9zZSgpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3Nl
KGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9vd25pbmdQb2ludGVyRm9yQ2xvc2UuZ2V0
KCkgPT0gdGhpcyk7CiAKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6c2h1dGRvd25Gb3JDbG9zZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7CisgICAg
aWYgKG1fYmFja2luZ1N0b3JlKQogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xvc2UoKTsKLSAg
ICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7
Ci0gICAgfQogCiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fYmFja2luZ1N0
b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICBtX2JhY2tp
bmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CiAKKyAgICBtX3NlcnZlci0+ZGF0YWJhc2VJc0Ns
b3NlZChpZGVudGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRhYmFzZVF1ZXVlLmlzRW1wdHkoKSkg
ewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKSk7CisgICAgICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnNodXRkb3duRm9yQ2xvc2UsIGlkZW50aWZpZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBtX2RhdGFiYXNlUXVldWUua2lsbCgpOwpAQCAtNDIyLDggKzQ1Myw2IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xvc2UoKQogewogICAgIEFTU0VSVChtX2Rh
dGFiYXNlUmVwbHlRdWV1ZS5pc0VtcHR5KCkpOwogICAgIG1fZGF0YWJhc2VSZXBseVF1ZXVlLmtp
bGwoKTsKLQotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CiB9CiAKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lv
bikKQEAgLTQ1NSw4ICs0ODQsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVC
YWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCiAgICAgICAgIG1fY3VycmVudE9w
ZW5EQlJlcXVlc3QgPSBudWxscHRyOwogICAgIH0KIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVl
ZGVkKCk7Ci0KICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAog
ICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKQpAQCAtNTM3LDE0ICs1NjQsMTQgQEAg
Ym9vbCBVbmlxdWVJREJEYXRhYmFzZTo6YWxsQ29ubmVjdGlvbnNBcmVDbG9zZWRPckNsb3Npbmco
KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVV
bmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6Omdl
bmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIHN0YXRpYyB1aW50NjRfdCBjdXJyZW50SUQgPSAwOwogICAgIHJldHVybiAr
K2N1cnJlbnRJRDsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXpl
KQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihF
cnJvckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJE
ZWxldGUpIHsKICAgICAgICAgY2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpKTsK
QEAgLTU1NSwxNiArNTgyLDExIEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmIGNhbGxiYWNrLCB1CiAgICAgQVNTRVJU
KCFtX2Vycm9yQ2FsbGJhY2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2Vycm9yQ2Fs
bGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFz
a1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1f
aWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRpbmdTcGFjZUlu
Y3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0KLQogICAgIG1f
Y2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7
CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXplKQordWludDY0
X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkg
ewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCksIHsgfSk7CkBA
IC01NzUsMTEgKzU5Nyw2IEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ssCiAgICAgQVNTRVJUKCFt
X2tleURhdGFDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fa2V5RGF0YUNh
bGxiYWNrcy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwogCi0gICAgaWYgKHRh
c2tTaXplKSB7Ci0gICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCht
X2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICAgICAgbV9wZW5kaW5nU3BhY2VJ
bmNyZWFzaW5nVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLSAgICB9Ci0KICAgICBt
X2NhbGxiYWNrUXVldWUuYXBwZW5kKGlkZW50aWZpZXIpOwogICAgIHJldHVybiBpZGVudGlmaWVy
OwogfQpAQCAtNzgwLDcgKzc5Nyw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFkZE9wZW5E
YXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvCiAgICAgbV9v
cGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5sZWFrUmVmKCkp
KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmll
ciwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
QmFja2luZ1N0b3JlICglcCkiLCB0aGlzKTsKQEAgLTc5MCwxNyArODA3LDE1IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlm
aWVyJiBpZGVudGlmaWVyCiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1Ry
YW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0
aW9ucygpOwogICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tpbmdTdG9yZS0+
aXNFcGhlbWVyYWwoKTsKIAotICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2ZSBpbml0aWxpYXpl
ZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUKLSAgICAvLyBzaXplIG9mIHRoaXMg
ZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRh
dGFiYXNlU2l6ZSgpOwotCisgICAgYXV0byBkYXRhYmFzZVNpemVCZWZvcmVPcGVuID0gbV9zZXJ2
ZXItPmRhdGFiYXNlV2lsbEJlT3BlbmVkKGlkZW50aWZpZXIpOwogICAgIElEQkRhdGFiYXNlSW5m
byBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVz
dGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAgYXV0byBhY3R1
YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAwIDogZGVmYXVsdE9wZW5PcGVy
YXRpb25Db3N0OworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJh
c2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRlbnRpZmllcikpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8s
IGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUsIHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5n
U3RvcmUiKTsKQEAgLTgxMSw3ICs4MjYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAg
IEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5n
U3RvcmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CisgICAgZmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBhY3R1YWxUYXNrU2l6ZSk7
CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwpA
QCAtODM2LDEwICs4NTEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3Qg
dGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0g
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJ
RCkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBj
YWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAK
QEAgLTg0OSw5ICs4NjUsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUi
KTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmNy
ZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CisgICAgYXV0byBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGlu
Zm8pKTsKIH0KIApAQCAtODYwLDEwICs4NzUsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAg
aWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKworICAgIElEQkVycm9yIGNyZWF0ZUVycm9yOwor
ICAgIGlmIChjcmVhdGVFcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPmFk
ZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGNyZWF0ZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxi
YWNrKQpAQCAtOTM1LDE2ICs5NTMsMTYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1l
T2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWlu
dDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwg
RXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0KICAgICBh
dXRvKiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFpbmZvKSB7CiAgICAgICAgIHBlcmZvcm1F
cnJvckNhbGxiYWNrKGNhbGxiYWNrSUQsIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQXR0ZW1w
dCB0byByZW5hbWUgbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFz
a1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk1NCw5ICs5NzIsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAg
bV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNr
aW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVycm9yIGVycm9yOwogICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtOTY1
LDEwICs5ODIsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgp
KQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iu
c2l6ZSgpKTsKKworICAgIElEQkVycm9yIHJlbmFtZUVycm9yOworICAgIGlmIChyZW5hbWVFcnJv
ci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9i
amVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFj
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhj
YWxsYmFja0lkZW50aWZpZXIsIHJlbmFtZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxiYWNrIGNh
bGxiYWNrKQpAQCAtMTAzMCw5ICsxMDUwLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNy
ZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2
NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
Y29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKKworICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
RCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCkBAIC0xMDY2
LDYgKzEwODgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5k
ZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAgICBvYmplY3RTdG9y
ZUluZm8tPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiAgICAgfQogCisgICAgZmluaXNoU3BhY2VJ
bmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5zaXplKCkpOwogICAgIHBlcmZv
cm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCkBAIC0xMTQ3
LDcgKzExNzAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogCiB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5l
d05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJ
RCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUp
OworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0xMTYzLDYgKzExODYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRl
eEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0
YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lELCB0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGlu
ZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC0xMTcyLDkgKzExOTYsOCBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAg
IGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lSW5kZXgodHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSk7
CiAKLSAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5h
bWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtMTE4Myw3ICsxMjA2LDEwIEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVu
YW1lSW5kZXgiKTsKIAotICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgIGZpbmlzaFNwYWNl
SW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKworICAgIElE
QkVycm9yIHJlbmFtZUVycm9yOworICAgIGlmIChyZW5hbWVFcnJvci5pc051bGwoKSkgewogICAg
ICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0
aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9i
amVjdFN0b3JlSW5mbyk7CiAgICAgICAgIGlmIChvYmplY3RTdG9yZUluZm8pIHsKQEAgLTExOTMs
NyArMTIxOSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRl
eCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAg
ICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIHJlbmFtZUVycm9yKTsK
IH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2Fs
bGJhY2sgY2FsbGJhY2spCkBAIC0xMjEzLDkgKzEyMzksMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IGNvbnMKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2so
dWludDY0X3QgdGFza1NpemUsIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29u
c3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sg
Y2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOworCisgICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9y
QWRkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVx
dWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleURhdGEsIHZhbHVlLCBvdmVyd3Jp
dGVNb2RlKSk7CiB9CiAKQEAgLTEyOTEsOCArMTMxOSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
REJSZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0g
SW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAm
JiBvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJ
bmRleGVkREI6OktleVR5cGU6Ok51bWJlcikKLSAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGtleURhdGEubnVtYmVyKCkpOworICAgIGlmIChvdmVyd3Jp
dGVNb2RlICE9IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpPdmVyd3JpdGVG
b3JDdXJzb3IgJiYgb2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYga2V5RGF0YS50
eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXIpIHsKKyAgICAgICAgYXV0byB1cGRh
dGVFcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1i
ZXIoKSk7CisgICAgICAgIGlmICghdXBkYXRlRXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICBl
cnJvciA9IHVwZGF0ZUVycm9yOworICAgIH0KIAogICAgIGdlbmVyYXRlZEtleVJlc2V0dGVyLnJl
bGVhc2UoKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwpAQCAtMTMwMyw2ICsxMzM0LDcgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJ
bmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCIp
OwogCisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJv
ci5zaXplKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIApAQCAtMjA5Nyw5ICsyMTI5LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayhDcm9zc1RocmVhZFRhc2smJiB0YXNrKQog
CiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkoQ3Jvc3NUaHJl
YWRUYXNrJiYgdGFzaykKIHsKLSAgICBpZiAobV9iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbmV3
RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotCiAgICAgbV9k
YXRhYmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgIG1fc2VydmVyLT5w
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrUmVwbHkpKTsKIH0KQEAgLTIxNjQs
OCArMjE5Myw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNl
ckRlbGV0ZSgpCiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgbV9wZW5kaW5n
U3BhY2VJbmNyZWFzaW5nVGFza3MuY2xlYXIoKTsKLSAgICBtX3NlcnZlci0+cmVzZXRTcGFjZVVz
ZWQobV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKyAgICBmb3IgKGF1dG8gc2l6ZSA6IG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2VUYXNrcy52YWx1ZXMoKSkKKyAgICAgICAgbV9zZXJ2ZXItPnJlbGVhc2VT
cGFjZUdyYW50ZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBzaXplKTsKKyAgICBtX3BlbmRpbmdT
cGFjZUluY3JlYXNlVGFza3MuY2xlYXIoKTsKIAogICAgIC8vIEVycm9yIG91dCBhbGwgdHJhbnNh
Y3Rpb25zCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1faW5Qcm9n
cmVzc1RyYW5zYWN0aW9ucy5rZXlzKCkpKQpAQCAtMjIzOCwzNiArMjI2OCwxMSBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKQogICAgIC8vIE90
aGVyd2lzZSwgdGhpcyBkYXRhYmFzZSBpcyBzdGlsbCBwb3RlbnRpYWxseSBhY3RpdmUuCiAgICAg
Ly8gU28gd2UnbGwgaGF2ZSBpdCBvd24gaXRzZWxmIGFuZCB0aGVuIHBlcmZvcm0gYSBjbGVhbiB1
bmNvbmRpdGlvbmFsIGRlbGV0ZSBvbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAgbV9vd25p
bmdQb2ludGVyRm9yQ2xvc2UgPSBtX3NlcnZlci0+Y2xvc2VBbmRUYWtlVW5pcXVlSURCRGF0YWJh
c2UoKnRoaXMpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2lu
Z1N0b3JlKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNwYWNlVXNlZElm
TmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllcikKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG9wdGlvbmFsQ2FsbGJhY2tJ
ZGVudGlmaWVyKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciA9IG9wdGlv
bmFsQ2FsbGJhY2tJZGVudGlmaWVyLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5maW5kKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0g
ICAgICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5lbmQo
KSkgewotICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1f
aWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgICAgIG1fcGVu
ZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFiYXNlU2l6ZTsKLSAg
ICBpZiAoZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkgewotICAgICAgICBp
ZiAoZGF0YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAgICAgICAgICAgbV9z
ZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGF0YWJhc2VT
aXplIC0gbV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9zZXJ2ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgbV9jdXJy
ZW50RGF0YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9jdXJyZW50RGF0YWJh
c2VTaXplID0gZGF0YWJhc2VTaXplOwotICAgIH0KKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25k
aXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElm
TmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0gbV9lcnJv
ckNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGNhbGxiYWNr
IHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogICAgIGlmIChjYWxsYmFjaykgewpAQCAt
MjI3OSw4ICsyMjg0LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2Fs
bGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiByZXN1bHRLZXkp
CiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQog
ICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50
aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRl
KTsKICAgICBpZiAoY2FsbGJhY2spIHsKQEAgLTIzMjUsOCArMjMyOCw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFj
ayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZO
ZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIEFTU0VSVChtX2Vycm9yQ2FsbGJhY2tz
LmNvbnRhaW5zKGNhbGxiYWNrSWRlbnRpZmllcikpOwogICAgIEFTU0VSVChtX2NhbGxiYWNrUXVl
dWUubGFzdCgpID09IGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgbV9jYWxsYmFja1F1ZXVlLnJl
bW92ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggNTNiMjFkZmU0ZDIxZGE1NWZm
Y2E2ZjA2ZmIwNmIyMjc1YzFlY2Y4ZC4uNjdlOTNiYjU2YTRiMjE0MDA2M2M2OGY1NjBmYjkyMjdi
MzJkMGNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTExNiw4ICsxMTYsNiBAQCBwdWJs
aWM6CiAKICAgICBib29sIGhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkgY29uc3QgeyByZXR1cm4g
bV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZTsgfQogCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkg
Y29uc3Q7Ci0KICAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpOwogCiBwcml2YXRl
OgpAQCAtMTYwLDcgKzE1OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBEYXRhYmFzZSB0aHJlYWQg
b3BlcmF0aW9ucwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICB2b2lkIHBl
cmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lk
IHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZv
aWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5m
byYpOwpAQCAtMTgzLDEyICsxODEsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGVyZm9ybVN0
YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwog
ICAgIHZvaWQgcGVyZm9ybUFjdGl2YXRlVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwotICAgIHZv
aWQgcGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKLSAgICB2b2lkIHNo
dXRkb3duRm9yQ2xvc2UoKTsKKyAgICB2b2lkIHBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFj
a2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOworICAgIHZvaWQgc2h1dGRv
d25Gb3JDbG9zZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKIAogICAgIC8vIE1haW4g
dGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90
IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBh
Y3R1YWxUYXNrU2l6ZSwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICB2b2lkIGRp
ZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNv
bnN0IElEQkVycm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQ
ZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBk
aWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lKTsKQEAgLTIxMSw4ICsyMDksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlk
UGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGRpZFNo
dXRkb3duRm9yQ2xvc2UoKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihFcnJvckNhbGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7Ci0gICAgdWludDY0X3Qg
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmLCB1aW50NjRfdCB0YXNr
U2l6ZSA9IDApOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNh
bGxiYWNrJiYpOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRh
Q2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEdldEFs
bFJlc3VsdHNDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoR2V0UmVzdWx0Q2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKENvdW50Q2FsbGJhY2smJik7CkBAIC0yNDksNyArMjQ3LDEwIEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWlu
dDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChPcHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd2FpdEZvclJlcXVl
c3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmKTsKLSAgICB2b2lkIHVwZGF0
ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRl
bnRpZmllciA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNr
KHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICB2b2lkIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IGFjdHVhbFRh
c2tTaXplKTsKKworICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRl
bnRpZmllcigpOwogCiAgICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURCRGF0YWJh
c2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKQEAgLTMwMiw5ICszMDMsNyBAQCBwcml2YXRlOgog
CiAgICAgSGFzaFNldDxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsK
IAotICAgIEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNp
bmdUYXNrczsKLSAgICB1aW50NjRfdCBtX2N1cnJlbnREYXRhYmFzZVNpemUgeyAwIH07Ci0gICAg
dWludDY0X3QgbV9uZXdEYXRhYmFzZVNpemUgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwg
dWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQkVycm9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJFcnJvci5jcHAKaW5kZXggNjUyZDBhODE3ZjVjNTNjNzAzODNmMDE0ZTFlZWJh
MTgwYTI2OGQ0Yy4uNzExODRjZjc4MmJhZTI0NTk2MDFjYmJiZDg3YWQxN2MzYmQwODgzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJy
b3IuY3BwCkBAIC0zMiwxNSArMzIsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJF
cnJvcjo6SURCRXJyb3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gY29kZSwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQorSURCRXJyb3I6OklEQkVycm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+IGNv
ZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3Qgc2l6ZSkKICAgICA6IG1fY29kZShj
b2RlKQogICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgLCBtX3NpemUoc2l6ZSkKIHsKIH0K
IAogSURCRXJyb3IgSURCRXJyb3I6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IElEQkVycm9yIHsgbV9jb2RlLCBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCkgfTsKKyAgICByZXR1
cm4gSURCRXJyb3IgeyBtX2NvZGUsIG1fbWVzc2FnZS5pc29sYXRlZENvcHkoKSwgbV9zaXplIH07
CiB9CiAKIFN0cmluZyBJREJFcnJvcjo6bmFtZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCmluZGV4IDNhOTViYjM4MDUw
ZGVhYjI4YzJkYzFhN2FlNjVmZTI3ZjZhZjg4NTYuLmYwZTU3NTFmYzQ4NGEwMTYzZGI4ZDk5MTIx
ZjcyODgxZTZhZDE5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJFcnJvci5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSURCRXJyb3IgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxp
Y2l0IElEQkVycm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+ID0gV1RGOjpudWxsb3B0LCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IElE
QkVycm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+ID0gV1RGOjpudWxsb3B0LCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UgPSB7IH0sIHVpbnQ2NF90IHNpemUgPSAwKTsKIAogICAgIHN0YXRpYyBJREJF
cnJvciB1c2VyRGVsZXRlRXJyb3IoKQogICAgIHsKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgog
ICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3Q7CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuICFtX2NvZGU7IH0KKyAgICB1aW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CiAKICAgICBJREJFcnJvciBpc29sYXRlZENvcHkoKSBjb25zdDsKIApAQCAtNjMsNiAr
NjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+IG1f
Y29kZTsKICAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgIHVpbnQ2NF90IG1fc2l6ZTsKIH07CiAK
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCA3NjdhZDJlYWY0YWNjYjgzMTkwNDQyMjg5NzA2OTQ5
YjcwYjM0MzBlLi43MTM4NWZkNDI2YjBjZTQ5NDg3ZjI2M2JlYjg3MzAyZGI2NTkxOGFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTMx
LDYgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorU3RvcmFnZVF1b3RhTWFuYWdl
cjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJlcXVl
c3RlciYmIHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgOiBtX3F1b3RhKHF1b3RhKQorICAg
ICwgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VJbmNyZWFzZVJlcXVlc3Rl
cikpCisgICAgLCBtX3Byb2Nlc3NQZW5kaW5nUmVxdWVzdHNUaW1lcigqdGhpcywgJlN0b3JhZ2VR
dW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpCit7Cit9CisKIFN0b3JhZ2VRdW90
YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkKIHsKICAgICB3aGlsZSAoIW1fcGVuZGlu
Z1JlcXVlc3RzLmlzRW1wdHkoKSkKQEAgLTM5LDExNyArNDYsMTI3IEBAIFN0b3JhZ2VRdW90YU1h
bmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkKIAogdWludDY0X3QgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6c3BhY2VVc2FnZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKG1fcGVuZGluZ1VzZXJzLmlz
RW1wdHkoKSAmJiBtX2luUHJvZ3Jlc3NVc2Vycy5pc0VtcHR5KCkpOwogICAgIHVpbnQ2NF90IHVz
YWdlID0gMDsKLSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3VzZXJzKQorICAgIGZvciAoYXV0byYg
dXNlciA6IG1fYWN0aXZlVXNlcnMpCiAgICAgICAgIHVzYWdlICs9IHVzZXItPnNwYWNlVXNlZCgp
OwogICAgIHJldHVybiB1c2FnZTsKIH0KIAogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRh
dGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCkKIHsKLSAgICBpZiAoIW1fcXVvdGEpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAxMDsKICAg
ICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgoc3BhY2VV
c2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkgKyAxKSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKQordm9pZCBTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpoYW5kbGVQZW5kaW5nVXNlcnMoKQogewotICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXph
dGlvblVzZXJzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9wZW5kaW5nVXNlcnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVzZXJzVG9J
bml0aWFsaXplOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0aWFsaXph
dGlvblVzZXJzKSB7Ci0gICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5pdGlhbGl6
ZWRDYWxsZWQ6Ok5vKSB7Ci0gICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5Jbml0aWFs
aXplZENhbGxlZDo6WWVzOwotICAgICAgICAgICAgdXNlcnNUb0luaXRpYWxpemUuYXBwZW5kKGtl
eVZhbHVlLmtleSk7Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVz
ZXJzVG9IYW5kbGU7CisgICAgZm9yIChhdXRvJiBbdXNlciwgdHlwZV0gOiBtX3BlbmRpbmdVc2Vy
cykgeworICAgICAgICAvLyBUaGVzZSB1c2VycyB3aWxsIGJlIGhhbmRsZWQgaW4gdGhlaXIgY2Fs
bGJhY2suCisgICAgICAgIGlmIChtX2luUHJvZ3Jlc3NVc2Vycy5jb250YWlucyh1c2VyKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1c2Vyc1RvSGFuZGxlLmFwcGVuZCh1c2VyKTsK
ICAgICB9Ci0gICAgZm9yIChhdXRvKiB1c2VyIDogdXNlcnNUb0luaXRpYWxpemUpIHsKLSAgICAg
ICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnModXNlcikpCi0gICAg
ICAgICAgICBhc2tVc2VyVG9Jbml0aWFsaXplKCp1c2VyKTsKKworICAgIGZvciAoYXV0byogdXNl
ciA6IHVzZXJzVG9IYW5kbGUpIHsKKyAgICAgICAgYXV0byB0eXBlID0gbV9wZW5kaW5nVXNlcnMu
Z2V0KHVzZXIpOworICAgICAgICBoYW5kbGVQZW5kaW5nVXNlcigqdXNlciwgdHlwZSk7CiAgICAg
fQogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3Rv
cmFnZVF1b3RhVXNlciYgdXNlcikKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6aGFuZGxlUGVu
ZGluZ1VzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlciwgVGFza1R5cGUgdHlwZSkKIHsKLSAgICB1
c2VyLndoZW5Jbml0aWFsaXplZChbdGhpcywgJnVzZXIsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
dGhpcyldKCkgeworICAgIG1faW5Qcm9ncmVzc1VzZXJzLmFkZCgmdXNlcik7CisgICAgbV9wZW5k
aW5nVXNlcnMucmVtb3ZlKCZ1c2VyKTsKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IGNh
bGxiYWNrID0gW3RoaXMsICZ1c2VyLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXSgpIHsK
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
ZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1vdmUoJnVzZXIpKQotICAgICAgICAg
ICAgbV91c2Vycy5hZGQoJnVzZXIpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6
YXRpb25Vc2Vycy5pc0VtcHR5KCkpCisgICAgICAgIAorICAgICAgICAvLyBVc2VyIG1heSBhbHJl
YWR5IGJlIHJlbW92ZWQuCisgICAgICAgIGlmICghbV9pblByb2dyZXNzVXNlcnMuY29udGFpbnMo
JnVzZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2luUHJvZ3Jlc3NVc2Vycy5y
ZW1vdmUoJnVzZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJzLmNvbnRh
aW5zKCZ1c2VyKSkgeworICAgICAgICAgICAgaGFuZGxlUGVuZGluZ1VzZXIodXNlciwgVGFza1R5
cGU6OkNvbXB1dGVTcGFjZVVzZWQpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotICAgICAgICBwcm9jZXNz
UGVuZGluZ1JlcXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Ok5v
KTsKLSAgICB9KTsKKyAgICAgICAgbV9hY3RpdmVVc2Vycy5hZGQoJnVzZXIpOworICAgICAgICBp
bnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXIoKTsKKyAgICB9OworCisgICAgaWYgKHR5
cGUgPT0gVGFza1R5cGU6OkNvbXB1dGVTcGFjZVVzZWQpCisgICAgICAgIHVzZXIuY29tcHV0ZVNw
YWNlVXNlZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgZWxzZQorICAgICAgICB1c2VyLnVwZGF0
ZVNwYWNlVXNlZChXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6YWRkVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIEFTU0VSVCghbV9w
ZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIEFTU0VSVCgh
bV91c2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMuYWRkKCZ1c2VyLCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKTsKKyAgICBBU1NFUlQoIW1f
cGVuZGluZ1VzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7CisgICAgQVNTRVJUKCFtX2luUHJvZ3Jlc3NV
c2Vycy5jb250YWlucygmdXNlcikpOworICAgIEFTU0VSVCghbV9hY3RpdmVVc2Vycy5jb250YWlu
cygmdXNlcikpOwogCi0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAg
ICAgIGFza1VzZXJUb0luaXRpYWxpemUodXNlcik7Ci19CisgICAgLy8gTWFrZSBzdXJlIG5ld2x5
IGFkZGVkIHVzZXIgaGFzIGFjY3VyYXRlIHNwYWNlIHVzYWdlLgorICAgIG1fcGVuZGluZ1VzZXJz
LmFkZCgmdXNlciwgVGFza1R5cGU6OkNvbXB1dGVTcGFjZVVzZWQpOwogCi1ib29sIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNl
KSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2UgPiBtX3F1b3RhOwor
ICAgIGludm9rZVByb2Nlc3NQZW5kaW5nUmVxdWVzdHNUaW1lcigpOwogfQogCiB2b2lkIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKIHsKLSAg
ICBBU1NFUlQobV91c2Vycy5jb250YWlucygmdXNlcikgfHwgbV9wZW5kaW5nSW5pdGlhbGl6YXRp
b25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fdXNlcnMucmVtb3ZlKCZ1c2VyKTsKLSAg
ICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1vdmUoJnVzZXIpICYmIG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdoZW4gYmVp
bmcgY2xlYXJlZCwgcXVvdGEgdXNlcnMgbWF5IHJlbW92ZSB0aGVtc2VsdmVzIGFuZCBhZGQgdGhl
bXNlbHZlcyB0byB0cmlnZ2VyIHJlaW5pdGlhbGl6YXRpb24uCi0gICAgICAgIC8vIExldCdzIHdh
aXQgZm9yIGFkZFVzZXIgdG8gYmUgY2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIHBlbmRpbmcgcmVx
dWVzdHMuCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyldIHsKLSAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChtX3BlbmRpbmdVc2Vycy5jb250YWlucygmdXNlcikgfHwg
bV9pblByb2dyZXNzVXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fYWN0aXZlVXNlcnMuY29udGFp
bnMoJnVzZXIpKTsKIAotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVz
dHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOwotICAgICAgICB9
KTsKLSAgICB9CisgICAgbV9wZW5kaW5nVXNlcnMucmVtb3ZlKCZ1c2VyKTsKKyAgICBtX2luUHJv
Z3Jlc3NVc2Vycy5yZW1vdmUoJnVzZXIpOworICAgIG1fYWN0aXZlVXNlcnMucmVtb3ZlKCZ1c2Vy
KTsKKworICAgIGludm9rZVByb2Nlc3NQZW5kaW5nUmVxdWVzdHNUaW1lcigpOwogfQogCi12b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNl
LCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
dXNlck5lZWRzVG9Db21wdXRlU3BhY2VVc2VkKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIpCiB7Ci0g
ICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5n
UmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Cisg
ICAgaWYgKG1faW5Qcm9ncmVzc1VzZXJzLmNvbnRhaW5zKCZ1c2VyKSkgeworICAgICAgICBtX3Bl
bmRpbmdVc2Vycy5zZXQoJnVzZXIsIFRhc2tUeXBlOjpDb21wdXRlU3BhY2VVc2VkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAgICAgICBj
YWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1f
cGVuZGluZ1VzZXJzLnNldCgmdXNlciwgVGFza1R5cGU6OkNvbXB1dGVTcGFjZVVzZWQpOworICAg
IG1fYWN0aXZlVXNlcnMucmVtb3ZlKCZ1c2VyKTsKIAotICAgIGluaXRpYWxpemVVc2Vyc0lmTmVl
ZGVkKCk7CisgICAgaW52b2tlUHJvY2Vzc1BlbmRpbmdSZXF1ZXN0c1RpbWVyKCk7Cit9CiAKLSAg
ICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJh
Y2spIH0pOwotICAgICAgICByZXR1cm47Cit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnVwZGF0
ZVVzZXJzU3BhY2VVc2VkKCkKK3sKKyAgICBmb3IgKGF1dG8qIHVzZXIgOiBjb3B5VG9WZWN0b3Io
bV9hY3RpdmVVc2VycykpIHsKKyAgICAgICAgaWYgKHVzZXItPmNhblVwZGF0ZVNwYWNlVXNlZCgp
KSB7CisgICAgICAgICAgICBtX3BlbmRpbmdVc2Vycy5hZGQodXNlciwgVGFza1R5cGU6OlVwZGF0
ZVNwYWNlVXNlZCk7CisgICAgICAgICAgICBtX2FjdGl2ZVVzZXJzLnJlbW92ZSh1c2VyKTsKKyAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNy
ZWFzZSkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFz
ZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUlu
Y3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnZva2VQcm9jZXNzUGVuZGlu
Z1JlcXVlc3RzVGltZXIoKTsKK30KKwordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0
U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2sp
Cit7CisgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92
ZShjYWxsYmFjaykgfSk7CisKKyAgICBpbnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXIo
KTsKK30KKworYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3JlU3BhY2Uo
dWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKK3sKKyAgICBpZiAoIXNwYWNlSW5jcmVhc2Up
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7
CisgICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2UgPiBtX3F1b3RhOwogfQog
CiB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFj
ZUluY3JlYXNlKQpAQCAtMTY2LDI4ICsxODMsNDEgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkKICAgICAgICAgUkVMRUFT
RV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNl
IHJlY2VpdmVkIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEg
OiAwKTsKIAogICAgICAgICBtX2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSA9IGZh
bHNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhLCBTaG91bGREZXF1
ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKTsKKyAgICAgICAgaWYgKG5ld1F1b3RhKQorICAg
ICAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKKyAgICAgICAgaW52b2tlUHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0c1RpbWVyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNo
b3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdS
ZXF1ZXN0KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjppbnZva2VQcm9jZXNzUGVuZGluZ1Jl
cXVlc3RzVGltZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAo
IW1fcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0c1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0c1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoKQogewogICAgIGlmICht
X3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChu
ZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKLQogICAgIGlmIChtX2lzV2Fp
dGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcGVu
ZGluZ1VzZXJzLmlzRW1wdHkoKSB8fCAhbV9pblByb2dyZXNzVXNlcnMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGhhbmRsZVBlbmRpbmdVc2VycygpOwogICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzICYmICFtX3F1b3RhKSB7CisgICAg
ICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICAgICAgbV9oYXNTdGFydGVk
SGFuZGxpbmdSZXF1ZXN0cyA9IHRydWU7CisgICAgfQogCi0gICAgaWYgKHNob3VsZERlcXVldWVG
aXJzdFBlbmRpbmdSZXF1ZXN0ID09IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpZ
ZXMpIHsKKyAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKS5zdGF0ZSA9PSBQZW5kaW5n
UmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQpIHsKICAgICAgICAgYXV0byBy
ZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIGJvb2wgc2hv
dWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5j
cmVhc2UpOwotCiAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNpc2lvbiBp
cyAlZCIsIHRoaXMsIHNob3VsZEFsbG93UmVxdWVzdCk7CiAKICAgICAgICAgcmVxdWVzdC5jYWxs
YmFjayhzaG91bGRBbGxvd1JlcXVlc3QgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6RGVu
eSk7CkBAIC0xOTUsMTEgKzIyNSwxNiBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nl
c3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaAogCiAgICAg
d2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byYgcmVx
dWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCk7Ci0KICAgICAgICAgaWYgKHNob3VsZEFz
a0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpKSB7CisgICAgICAgICAgICBpZiAo
cmVxdWVzdC5zdGF0ZSA9PSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlVuaGFuZGxlZCkgeworICAg
ICAgICAgICAgICAgIHJlcXVlc3Quc3RhdGUgPSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlVzZXJT
cGFjZVVwZGF0ZVJlcXVlc3RlZDsKKyAgICAgICAgICAgICAgICB1cGRhdGVVc2Vyc1NwYWNlVXNl
ZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UgPSAwOwogICAgICAgICAgICAgZm9yIChhdXRvJiByZXF1
ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCiAgICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFzZSAr
PSByZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CisgICAgICAgICAgICByZXF1ZXN0LnN0YXRlID0gUGVu
ZGluZ1JlcXVlc3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkOwogICAgICAgICAgICAg
YXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCmlu
ZGV4IDlmNjQ2MzNlZDY2Y2MxMmE5MjgzYzA4OTFiZDI1NWFlOTMwNDJhYjcuLjI5YjM0ZDgxM2Rm
NGRiNWU0Y2JhYTA0MWIzNWQ3NzU3OGJmOTZkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkNsaWVudE9yaWdpbi5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTQwLDExICs0MSw3IEBAIGNsYXNzIFN0b3JhZ2VRdW90
YU1hbmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHVzaW5nIFNwYWNlSW5j
cmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0X3QgcXVvdGEsIHVpbnQ2
NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47Ci0gICAgU3RvcmFnZVF1b3RhTWFuYWdl
cih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciYmIHNwYWNlSW5jcmVhc2VS
ZXF1ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShxdW90YSkKLSAgICAgICAgLCBtX3NwYWNlSW5j
cmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUluY3JlYXNlUmVxdWVzdGVyKSkKLSAgICB7Ci0g
ICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVv
dGEsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXImJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgflN0b3Jh
Z2VRdW90YU1hbmFnZXIoKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVs
dFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1
cm4gcXVvdGEgLyAxMDsgfQpAQCAtNTQsNiArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB1c2VyTmVlZHNUb0NvbXB1dGVTcGFjZVVzZWQoU3RvcmFnZVF1b3RhVXNlciYpOwog
CiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNpbmcgUmVx
dWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwpAQCAtNjcs
MjYgKzY1LDM0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3BhY2UodWlu
dDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3Q7CiAgICAgdm9pZCBhc2tGb3JNb3JlU3BhY2UodWlu
dDY0X3Qgc3BhY2VJbmNyZWFzZSk7CiAKLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVk
KCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKKyAg
ICBlbnVtIGNsYXNzIFRhc2tUeXBlIHsgVXBkYXRlU3BhY2VVc2VkLCBDb21wdXRlU3BhY2VVc2Vk
IH07CisgICAgdm9pZCBoYW5kbGVQZW5kaW5nVXNlcihTdG9yYWdlUXVvdGFVc2VyJiwgVGFza1R5
cGUpOworICAgIHZvaWQgaGFuZGxlUGVuZGluZ1VzZXJzKCk7CisgICAgdm9pZCB1cGRhdGVVc2Vy
c1NwYWNlVXNlZCgpOwogCi0gICAgZW51bSBjbGFzcyBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5n
UmVxdWVzdCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0
aW9uYWw8dWludDY0X3Q+LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCk7CisgICAg
dm9pZCBpbnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXIoKTsKKyAgICB2b2lkIHByb2Nl
c3NQZW5kaW5nUmVxdWVzdHMoKTsKIAogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CiAKICAg
ICBib29sIG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlIHsgZmFsc2UgfTsKICAg
ICBTcGFjZUluY3JlYXNlUmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKIAotICAg
IGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9OwotICAgIEhhc2hN
YXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4gbV9wZW5kaW5nSW5p
dGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PGNvbnN0IFN0b3JhZ2VRdW90YVVzZXIqPiBt
X3VzZXJzOworICAgIGJvb2wgbV9oYXNTdGFydGVkSGFuZGxpbmdSZXF1ZXN0cyB7IGZhbHNlIH07
CisKKyAgICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVzZXIqLCBUYXNrVHlwZT4gbV9wZW5kaW5nVXNl
cnM7CisgICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV9pblByb2dyZXNzVXNlcnM7Cisg
ICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV9hY3RpdmVVc2VyczsKIAogICAgIHN0cnVj
dCBQZW5kaW5nUmVxdWVzdCB7CiAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7CiAgICAg
ICAgIFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKKyAgICAgICAgZW51bSBjbGFzcyBTdGF0ZSB7
IFVuaGFuZGxlZCwgVXNlclNwYWNlVXBkYXRlUmVxdWVzdGVkLCBTcGFjZUluY3JlYXNlUmVxdWVz
dGVkIH07CisgICAgICAgIFN0YXRlIHN0YXRlIHsgU3RhdGU6OlVuaGFuZGxlZCB9OwogICAgIH07
CiAgICAgRGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3RzOworCisgICAgVGlt
ZXIgbV9wcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVz
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmluZGV4IGI0
MjMwYzVlMTJkMDk0ZDY5OWUxZTI5OTc5MTY0YWY1YjdjODM4ZTAuLmI1NjAwZTg0MDI4ZjdlOGMz
ZWExNjg1NjA5NGE2NzI5N2MxNDMxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhVXNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVF1b3RhVXNlci5oCkBAIC0zNCw3ICszNCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdG9y
YWdlUXVvdGFVc2VyKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBzcGFjZVVz
ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFjaykgeyBjYWxsYmFjaygpOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwYWNlVXNlZChD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQorICAg
IHZpcnR1YWwgYm9vbCBjYW5VcGRhdGVTcGFjZVVzZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBjMjkwYzVkOTYxYjlmYWRlNDQwOWQ3
N2NkM2EzYWY5YWYzYTgwZDkwLi4xMzk3MWRkZDE2N2UwNTkyZGM3NDUxYTNiZWNhZDU2MDhiOWE1
NGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcApAQCAtMjQ0MiwxNiArMjQ0MiwxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpyZXF1ZXN0
U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50TwogICAg
IHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25JRCwgb3Jp
Z2luLCBxdW90YSwgY3VycmVudFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShjYWxsYmFj
ayksIDApOwogfQogCi1jbGFzcyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1YmxpYyBX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2NsYXNzIER1bW15UXVvdGFVc2VyIGZpbmFsIDog
cHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFF1b3RhVXNlckluaXRpYWxpemVyKFN0b3Jh
Z2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCisgICAgZXhwbGljaXQgRHVtbXlRdW90YVVzZXIoU3Rv
cmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKICAgICAgICAgOiBtX21hbmFnZXIobWFrZVdlYWtQ
dHIobWFuYWdlcikpCiAgICAgewogICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMpOwogICAg
IH0KIAotICAgIH5RdW90YVVzZXJJbml0aWFsaXplcigpCisgICAgfkR1bW15UXVvdGFVc2VyKCkK
ICAgICB7CiAgICAgICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgICAgICBtX21hbmFnZXItPnJl
bW92ZVVzZXIoKnRoaXMpOwpAQCAtMjQ2Nyw3ICsyNDY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAorICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNl
ZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCiAgICAgewogICAg
ICAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CiAgICAgfQpAQCAtMjQ3OCw3ICsy
NDc4LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVF1b3Rh
VXNlcnMoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Npb25JRCwg
b3JpZ2luLCB1c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4obWFuYWdlcild
KCkgbXV0YWJsZSB7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwgdXNlciA9IG1ha2VVbmlx
dWU8RHVtbXlRdW90YVVzZXI+KG1hbmFnZXIpXSgpIG11dGFibGUgewogICAgICAgICBpZiAoIXdl
YWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLT5pZGJTZXJ2ZXIoc2Vz
c2lvbklEKS5pbml0aWFsaXplUXVvdGFVc2VyKG9yaWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5jcHAKaW5kZXggMjM4Nzk0MTZmZmRjM2QyMTMwNjdkMWUyNzk1MTdlZTE0Y2JiNWE2Yy4u
YjcwMjkzOTI0NDNhNWFhOTAzZmU1YTZjNzVlZDU5Y2FmODg5MzExNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcApAQCAtNzQsNyArNzQsNyBAQCBDYWNoZXM6On5DYWNoZXMoKQogICAg
ICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7CiB9CiAKLXZvaWQgQ2FjaGVz
Ojp3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQor
dm9pZCBDYWNoZXM6OmNvbXB1dGVTcGFjZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNhbGxiYWNrKQogewogICAgIGluaXRpYWxpemUoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikKQEAgLTYwOCwx
MCArNjA4LDggQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29uc3QgTmV0d29ya0Nh
Y2hlOjpLZXkmIGtleSkKIHZvaWQgQ2FjaGVzOjpyZXNldFNwYWNlVXNlZCgpCiB7CiAgICAgbV9z
aXplID0gMDsKLSAgICBpZiAobV9xdW90YU1hbmFnZXIpIHsKLSAgICAgICAgbV9xdW90YU1hbmFn
ZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBtX3F1b3RhTWFuYWdlci0+YWRkVXNlcigq
dGhpcyk7Ci0gICAgfQorICAgIGlmIChtX3F1b3RhTWFuYWdlcikKKyAgICAgICAgbV9xdW90YU1h
bmFnZXItPnVzZXJOZWVkc1RvQ29tcHV0ZVNwYWNlVXNlZCgqdGhpcyk7CiB9CiAKIHZvaWQgQ2Fj
aGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5o
CmluZGV4IDNjNDUxYTcyM2UxZTkyZjU1OWY2ZmJjZWY3ZjFmMzMxMTg5MDJmYWUuLjc4YmQxZjA2
MjE0NGY1ZTQ5NDAyNmFjOGE0MThiYzZkMjE2ODNkYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuaApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21E
aXNrKFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpE
T01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNr
KFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKLSAgICB2
b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwor
ICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZp
bmFsOwogCiAgICAgdm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29t
cGxldGlvbkNhbGxiYWNrJiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpDbGllbnRP
cmlnaW4+IHJlYWRPcmlnaW4oY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379567</attachid>
            <date>2019-09-25 11:43:30 -0700</date>
            <delta_ts>2019-09-27 12:23:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190925114329.patch</filename>
            <type>text/plain</type>
            <size>81790</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NmNzhjNWVjM2VkOWE0
OGNmYTIyYjg3YTEwMzc2YmU3YTNiMGE2Yi4uYmRmMmMzOTU3MGNmYWI0ZDc5YjRjYjIwYmNlOGQw
NGQ3MmIxZWJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxOS0wOS0yNCAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgZGlzayB1c2Fn
ZSBvZiBJbmRleGVkREIgb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBpcyBiaWdnZXIgdGhh
biBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEN1cnJlbnRseSB3ZSByZWFkIHNpemUgb2YgSW5kZXhlZERCIGRhdGFiYXNlIGZp
bGVzIHdoZW4gYSBkYXRhYmFzZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLiBUaGlzIGZpbGUgc3lz
dGVtCisgICAgICAgIG9wZXJhdGlvbiBjb3VsZCBzbG93LgorCisgICAgICAgIEFuIGVmZmljaWVu
dCBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRlIHRoZSBzcGFjZSBhdmFpbGFibGUsIGVzdGltYXRl
IHNwYWNlIGluY3JlYXNlIGZvciBlYWNoIG9wZWFydGlvbiwgYW5kIGdldAorICAgICAgICB0aGUg
YWNjdXJhdGUgZmlsZSBzaXplIG9ubHkgd2hlbiB0aGUgYWNjdW11bGF0ZWQgZXN0aW1hdGVkIGlu
Y3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJsZS4KKworICAgICAgICBDb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
UXVvdGFVc2VyOjpRdW90YVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRDb21wdXRlU3Bh
Y2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVz
ZXI6OnVwZGF0ZVNwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6UXVvdGFVc2VyOjpkaWRVcGRhdGVTcGFjZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OnN0YXJ0Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2Vk
Rm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpmaW5p
c2hDb21wdXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OnN0YXJ0VXBkYXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnVwZGF0ZVNwYWNlVXNlZEZvck9yaWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZmluaXNoVXBkYXRp
bmdTcGFjZVVzZWRGb3JPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OmluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpob2xkU3BhY2VHcmFudGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpyZWxlYXNlU3BhY2VHcmFudGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkYXRhYmFzZVdpbGxCZU9wZW5lZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6ZGF0YWJhc2VJc0Nsb3NlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjppbmNyZWFz
ZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6UXVvdGFVc2VyOjpkZWNyZWFzZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjp3aGVuSW5pdGlhbGl6ZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3Rh
VXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6cmVzZXRTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmluY3JlYXNlU3BhY2VVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpkZWNyZWFzZVNwYWNl
VXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Zmls
ZW5hbWVGb3JEYXRhYmFzZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFz
ZVNpemVGb3JJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
Ojp1bmNoZWNrZWRQdXRJbmRleEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRh
dGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6ZXN0aW1h
dGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzY2hlZHVsZVNo
dXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRTaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZW5lcmF0
ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVjayk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQ3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5h
bWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwdXRPckFkZEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRh
c2tSZXBseSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpm
b3JnZXRFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Z2VuZXJh
dGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6SURCRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRXJyb3I6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQkVycm9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6SURC
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OnNpemUgY29uc3QpOgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnNwYWNlVXNhZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpoYW5kbGVQZW5kaW5nVXNl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6aGFuZGxlUGVuZGlu
Z1VzZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YWRkVXNlcik6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnVzZXJOZWVkc1RvQ29tcHV0ZVNw
YWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjp1cGRhdGVV
c2Vyc1NwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpy
ZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6c2hv
dWxkQXNrRm9yTW9yZVNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyOjppbnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjppbml0aWFsaXplVXNlcnNJZk5l
ZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjph
c2tVc2VyVG9Jbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OlN0
b3JhZ2VRdW90YU1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1
b3RhVXNlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlcjo6Y29tcHV0ZVNw
YWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjp1cGRhdGVTcGFj
ZVVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlcjo6Y2FuVXBkYXRlU3Bh
Y2VVc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXI6OndoZW5J
bml0aWFsaXplZCk6IERlbGV0ZWQuCisKIDIwMTktMDktMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHNhbXBsaW5nIFBhZ2VDYWNoZS1yZWxhdGVkIEFn
Z0QgZGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBkNzI4YmZjN2Q3MjAxNWJiYTg1ZjcyZjE1NTI2OWRhYzE1ZDAz
MjBkLi44NDBlYzJhNWEzYmVhMjZiNWNlNzFmYmM1Y2MzMzc4MWNjZjlmOTViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDE5LTA5LTI0ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUu
Y29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdlIG9mIEluZGV4ZWREQiBvbmx5IHdoZW4g
ZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJsZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplUXVvdGFVc2Vycyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZXM6OmNvbXB1dGVTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6cmVzZXRTcGFjZVVzZWQpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkNhY2hlczo6d2hlbkluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaDoKKwogMjAxOS0wOS0yNCAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpUGFkT3NdIFRoZSBz
ZWNvbmQgY2xpY2sgZXZlbnQgaXMgbWlzc2luZyBvbiBkb3VibGUgdGFwIHdoZW4gZGJsY2xpY2sg
aGFuZGxlciBpcyBub3QgcHJlc2VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBiNTllZDdmMjI0NDcwNDE0N2Zk
MTkwYTFkMTdmYTg5NGQzOWZjYjBjLi4zZDUyMTE1YjNlOGU2Nzc5YWJlNjczZGNkMGZkZTUwMDM4
NzI3ODJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNjk3LDcgKzY5Nyw2IEBAIElEQlNlcnZlcjo6UXVvdGFV
c2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1h
bmFnZXIsCiAgICAgOiBtX3NlcnZlcihzZXJ2ZXIpCiAgICAgLCBtX21hbmFnZXIobWFrZVdlYWtQ
dHIobWFuYWdlcikpCiAgICAgLCBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgLCBtX2lz
SW5pdGlhbGl6ZWQobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkKIHsKICAgICBp
ZiAobWFuYWdlcikKICAgICAgICAgbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7CkBAIC03MTEsNjAg
KzcxMCw0MSBAQCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcigpCiAKIHZvaWQgSURC
U2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKIHsKLSAgICBtX3NwYWNlVXNlZCA9
IDA7Ci0gICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKLQotICAgIGlmICghbV9tYW5h
Z2VyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zZXJ2ZXIubV9zZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvbkNhbGxiYWNr
KTsKLQotICAgIG1faXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgLy8gRG8gYWRkL3JlbW92
ZSB0byB0cmlnZ2VyIGNhbGwgdG8gd2hlbkluaXRpYWxpemVkLgotICAgIG1fbWFuYWdlci0+cmVt
b3ZlVXNlcigqdGhpcyk7Ci0gICAgbV9tYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKKyAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICBtX21hbmFnZXItPnVzZXJOZWVkc1RvQ29tcHV0ZVNwYWNlVXNl
ZCgqdGhpcyk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3Bh
Y2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKIHsKLSAgICBpZiAo
IW1faXNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX3NwYWNlVXNl
ZCArIHNpemUgPiBtX3NwYWNlVXNlZCk7Ci0gICAgbV9zcGFjZVVzZWQgKz0gc2l6ZTsKKyAgICBt
X2NhbGxiYWNrcy5hcHBlbmQoV1RGTW92ZShjYWxsYmFjaykpOworICAgIG1fc2VydmVyLnN0YXJ0
Q29tcHV0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKIH0KLXZvaWQgSURCU2VydmVy
OjpRdW90YVVzZXI6OmRlY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCisKK3ZvaWQgSURC
U2VydmVyOjpRdW90YVVzZXI6OmRpZENvbXB1dGVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2Vk
KQogewotICAgIGlmICghbV9pc0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKG1fc3BhY2VVc2VkID49IHNpemUpOwotICAgIG1fc3BhY2VVc2VkIC09IHNpemU7CisgICAg
bV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7CisgICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0g
MDsKKyAgICBBU1NFUlQoIW1fY2FsbGJhY2tzLmlzRW1wdHkoKSk7CisgICAgYXV0byBjYWxsYmFj
ayA9IG1fY2FsbGJhY2tzLnRha2VGaXJzdCgpOworICAgIGNhbGxiYWNrKCk7CiB9CiAKLXZvaWQg
SURCU2VydmVyOjpRdW90YVVzZXI6OndoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjp1cGRhdGVTcGFj
ZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQogewotICAgIGlmICht
X2lzSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsK
LSAgICBtX3NlcnZlci5zdGFydENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihtX29yaWdpbik7
CisgICAgbV9jYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBtX3NlcnZl
ci5zdGFydFVwZGF0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKG1fb3JpZ2luKTsKIH0KIAotdm9pZCBJ
REJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVz
ZWQpCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpkaWRVcGRhdGVTcGFjZVVzZWQodWludDY0
X3QgaW5jcmVhc2UsIHVpbnQ2NF90IGRlY3JlYXNlKQogewotICAgIEFTU0VSVChtX2lzSW5pdGlh
bGl6ZWQgfHwgIW1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSk7Ci0gICAgbV9zcGFjZVVzZWQgPSBz
cGFjZVVzZWQ7Ci0gICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIGlmIChhdXRvIGNh
bGxiYWNrID0gV1RGTW92ZShtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spKQotICAgICAgICBjYWxs
YmFjaygpOworICAgIGlmIChpbmNyZWFzZSkKKyAgICAgICAgbV9zcGFjZVVzZWQgKz0gaW5jcmVh
c2U7CisgICAgaWYgKGRlY3JlYXNlKQorICAgICAgICBtX3NwYWNlVXNlZCAtPSBkZWNyZWFzZTsK
KyAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPSAwOworICAgIEFTU0VSVCghbV9jYWxsYmFj
a3MuaXNFbXB0eSgpKTsKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9jYWxsYmFja3MudGFrZUZpcnN0
KCk7CisgICAgY2FsbGJhY2soKTsKIH0KIAogSURCU2VydmVyOjpRdW90YVVzZXImIElEQlNlcnZl
cjo6ZW5zdXJlUXVvdGFVc2VyKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQpAQCAtNzc2LDcg
Kzc1NiwxMSBAQCBJREJTZXJ2ZXI6OlF1b3RhVXNlciYgSURCU2VydmVyOjplbnN1cmVRdW90YVVz
ZXIoY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4pCiAKIHZvaWQgSURCU2VydmVyOjpzdGFydENv
bXB1dGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsK
LSAgICBBU1NFUlQoIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpOworICAgIGlmIChtX3Nlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKSB7CisgICAgICAgIGZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZv
ck9yaWdpbihvcmlnaW4sIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmVzdGltYXRlZFNwYWNlVXNl
ZCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpjb21wdXRlU3BhY2VVc2VkRm9y
T3JpZ2luLCBvcmlnaW4pKTsKIH0KIApAQCAtNzg5LDEyICs3NzMsNjQgQEAgdm9pZCBJREJTZXJ2
ZXI6OmNvbXB1dGVTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4p
CiAgICAgYXV0byBuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5ID0gSURCRGF0YWJhc2VJZGVudGlm
aWVyOjpkYXRhYmFzZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KG9yaWdpbi50b3BPcmlnaW4sIG9y
aWdpbi5jbGllbnRPcmlnaW4sIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgInYxIik7CiAgICAgYXV0
byBzaXplID0gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5
KG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRh
YmFzZXNTaXplRm9yRGlyZWN0b3J5KG5ld1ZlcnNpb25PcmlnaW5EaXJlY3RvcnkpOwogCisgICAg
VmVjdG9yPElEQkRhdGFiYXNlSWRlbnRpZmllcj4gZGF0YWJhc2VzVG9TdG9wVHJhY2tpbmc7Cisg
ICAgZm9yIChhdXRvJiBbaWRlbnRpZmllciwgdmFsdWVdIDogbV9tb2RpZmllZERhdGFiYXNlU2l6
ZU1hcCkgeworICAgICAgICBpZiAodmFsdWUuc2Vjb25kID09IElzQ2xvc2VkOjpObykKKyAgICAg
ICAgICAgIHZhbHVlLmZpcnN0ID0gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZVNpemVG
b3JJZGVudGlmaWVyKGlkZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZGF0YWJhc2VzVG9TdG9wVHJhY2tpbmcuYXBwZW5kKGlkZW50
aWZpZXIpOworICAgIH0KKworICAgIGZvciAoYXV0byYgaWRlbnRpZmllciA6IGRhdGFiYXNlc1Rv
U3RvcFRyYWNraW5nKQorICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLnJlbW92ZShp
ZGVudGlmaWVyKTsKKwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmZpbmlzaENvbXB1dGluZ1NwYWNlVXNlZEZvck9yaWdp
biwgb3JpZ2luLCBzaXplKSk7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpmaW5pc2hDb21wdXRpbmdT
cGFjZVVzZWRGb3JPcmlnaW4oY29uc3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNw
YWNlVXNlZCkKIHsKLSAgICBlbnN1cmVRdW90YVVzZXIob3JpZ2luKS5pbml0aWFsaXplU3BhY2VV
c2VkKHNwYWNlVXNlZCk7CisgICAgaWYgKGF1dG8qIHVzZXIgPSBtX3F1b3RhVXNlcnMuZ2V0KG9y
aWdpbikpCisgICAgICAgIHVzZXItPmRpZENvbXB1dGVTcGFjZVVzZWQoc3BhY2VVc2VkKTsKK30K
Kwordm9pZCBJREJTZXJ2ZXI6OnN0YXJ0VXBkYXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4oY29uc3Qg
Q2xpZW50T3JpZ2luJiBvcmlnaW4pCit7CisgICAgaWYgKG1fc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkpIHsKKyAgICAgICAgZmluaXNoVXBkYXRpbmdTcGFjZVVzZWRGb3JPcmlnaW4ob3JpZ2luLCAw
LCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjp1cGRhdGVTcGFjZVVzZWRGb3JP
cmlnaW4sIG9yaWdpbikpOworfQorCit2b2lkIElEQlNlcnZlcjo6dXBkYXRlU3BhY2VVc2VkRm9y
T3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworCisgICAgVmVjdG9yPElEQkRhdGFiYXNlSWRlbnRpZmllcj4gZGF0YWJhc2Vz
VG9TdG9wVHJhY2tpbmc7CisgICAgdWludDY0X3QgaW5jcmVhc2UgPSAwLCBkZWNyZWFzZSA9IDA7
CisgICAgZm9yIChhdXRvJiBbaWRlbnRpZmllciwgdmFsdWVdIDogbV9tb2RpZmllZERhdGFiYXNl
U2l6ZU1hcCkgeworICAgICAgICBhdXRvIGN1cnJlbnRTaXplID0gU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkYXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRTaXplID4gdmFsdWUuZmlyc3QpCisgICAg
ICAgICAgICBpbmNyZWFzZSArPSBjdXJyZW50U2l6ZSAtIHZhbHVlLmZpcnN0OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkZWNyZWFzZSArPSB2YWx1ZS5maXJzdCAtIGN1cnJlbnRTaXplOwor
ICAgICAgICB2YWx1ZS5maXJzdCA9IGN1cnJlbnRTaXplOworCisgICAgICAgIGlmICh2YWx1ZS5z
ZWNvbmQgPT0gSXNDbG9zZWQ6OlllcykKKyAgICAgICAgICAgIGRhdGFiYXNlc1RvU3RvcFRyYWNr
aW5nLmFwcGVuZChpZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGlkZW50aWZp
ZXIgOiBkYXRhYmFzZXNUb1N0b3BUcmFja2luZykKKyAgICAgICAgbV9tb2RpZmllZERhdGFiYXNl
U2l6ZU1hcC5yZW1vdmUoaWRlbnRpZmllcik7CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpmaW5pc2hVcGRhdGluZ1Nw
YWNlVXNlZEZvck9yaWdpbiwgb3JpZ2luLCBpbmNyZWFzZSwgZGVjcmVhc2UpKTsKK30KKwordm9p
ZCBJREJTZXJ2ZXI6OmZpbmlzaFVwZGF0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNvbnN0IENsaWVu
dE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBpbmNyZWFzZSwgdWludDY0X3QgZGVjcmVhc2UpCit7
CisgICAgaWYgKGF1dG8qIHVzZXIgPSBtX3F1b3RhVXNlcnMuZ2V0KG9yaWdpbikpCisgICAgICAg
IHVzZXItPmRpZFVwZGF0ZVNwYWNlVXNlZChpbmNyZWFzZSwgZGVjcmVhc2UpOwogfQogCiB2b2lk
IElEQlNlcnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50
NjRfdCB0YXNrU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpEZWNpc2lvbik+JiYgY2FsbGJhY2spCkBAIC04MDgsMzAgKzg0NCw0NCBAQCB2b2lkIElEQlNl
cnZlcjo6cmVxdWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0
YXNrU2l6ZSwgQ29tcAogICAgIHF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlKHRhc2tTaXplLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpyZXNldFNwYWNlVXNlZChj
b25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKK3ZvaWQgSURCU2VydmVyOjppbmNyZWFzZUVzdGlt
YXRlZFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkK
IHsKICAgICBpZiAoYXV0byogdXNlciA9IG1fcXVvdGFVc2Vycy5nZXQob3JpZ2luKSkKLSAgICAg
ICAgdXNlci0+cmVzZXRTcGFjZVVzZWQoKTsKKyAgICAgICAgdXNlci0+aW5jcmVhc2VFc3RpbWF0
ZWRTcGFjZVVzZWQoc2l6ZSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjppbmNyZWFzZVNwYWNlVXNl
ZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qgc2l6ZSkKK3ZvaWQgSURCU2Vy
dmVyOjpob2xkU3BhY2VHcmFudGVkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRf
dCBzcGFjZVNpemUpCiB7Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaW5jcmVhc2VTcGFj
ZVVzZWQoc2l6ZSk7CisgICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdpbikuaG9sZFNwYWNlR3JhbnRl
ZChzcGFjZVNpemUpOwogfQogCi12b2lkIElEQlNlcnZlcjo6ZGVjcmVhc2VTcGFjZVVzZWQoY29u
c3QgQ2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNpemUpCit2b2lkIElEQlNlcnZlcjo6
cmVsZWFzZVNwYWNlR3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbiwgdWludDY0X3Qg
c3BhY2VTaXplKQogewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmRlY3JlYXNlU3BhY2VV
c2VkKHNpemUpOworICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLnJlbGVhc2VTcGFjZUdyYW50
ZWQoc3BhY2VTaXplKTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OmluY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCB0YXNrU2l6ZSkKK3Vp
bnQ2NF90IElEQlNlcnZlcjo6ZGF0YWJhc2VXaWxsQmVPcGVuZWQoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIGVuc3VyZVF1b3RhVXNlcihvcmlnaW4pLmlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHRhc2tTaXplKTsKKyAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGF1dG8gZGF0YWJhc2VEaXJlY3RvcnlQYXRoID0gdGhpcy0+ZGF0YWJh
c2VEaXJlY3RvcnlQYXRoSXNvbGF0ZWRDb3B5KCk7CisgICAgQVNTRVJUKCFkYXRhYmFzZURpcmVj
dG9yeVBhdGguaXNFbXB0eSgpKTsKKyAgICBhdXRvIHNpemVCZWZvcmVPcGVuID0gU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpkYXRhYmFzZVNpemVGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIsIGRhdGFi
YXNlRGlyZWN0b3J5UGF0aCk7CisgICAgbV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcC5zZXQoaWRl
bnRpZmllciwgc3RkOjptYWtlX3BhaXIoc2l6ZUJlZm9yZU9wZW4sIElzQ2xvc2VkOjpObykpOwor
ICAgIHJldHVybiBzaXplQmVmb3JlT3BlbjsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OmRlY3JlYXNl
UG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luLCB1aW50NjRfdCBz
cGFjZVVzZWQpCit2b2lkIElEQlNlcnZlcjo6ZGF0YWJhc2VJc0Nsb3NlZChjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAgZW5zdXJlUXVvdGFVc2VyKG9yaWdp
bikuZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoc3BhY2VVc2VkKTsKKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2VTaXplTWFwLmNvbnRh
aW5zKGlkZW50aWZpZXIpKSB7CisgICAgICAgIGF1dG8gc2l6ZSA9IG1fbW9kaWZpZWREYXRhYmFz
ZVNpemVNYXAuZ2V0KGlkZW50aWZpZXIpLmZpcnN0OworICAgICAgICBtX21vZGlmaWVkRGF0YWJh
c2VTaXplTWFwLnNldChpZGVudGlmaWVyLCBzdGQ6Om1ha2VfcGFpcihzaXplLCBJc0Nsb3NlZDo6
WWVzKSk7CisgICAgfQogfQogCiB2b2lkIElEQlNlcnZlcjo6dXBncmFkZUZpbGVzSWZOZWNlc3Nh
cnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oCmluZGV4IDE5ZTY5NjJlZDE5YWJhNTQwMzJjYTA0NDcyNGVkMTExNTM1NGE1YWYu
LmRhNTZiNWRhNTBmNjIxNDVjODc5MmYxZWFiNDkyMTBlMTZlYjk0ZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTEx
NCwxMSArMTE0LDEyIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5k
RGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRh
PiYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCiAgICAgdm9pZCBy
ZXF1ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKLSAg
ICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVp
bnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKLSAgICB2b2lkIGluY3JlYXNl
U3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHNpemUpOwotICAgIHZvaWQg
ZGVjcmVhc2VTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc2l6ZSk7Ci0g
ICAgdm9pZCByZXNldFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mKTsKKyAgICB2b2lkIGhv
bGRTcGFjZUdyYW50ZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwor
ICAgIHZvaWQgcmVsZWFzZVNwYWNlR3JhbnRlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRf
dCB0YXNrU2l6ZSk7CisgICAgdm9pZCBpbmNyZWFzZUVzdGltYXRlZFNwYWNlVXNlZChjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCBzaXplKTsKKyAgICBlbnVtIGNsYXNzIElzQ2xvc2VkIHsg
Tm8sIFllcyB9OworICAgIHVpbnQ2NF90IGRhdGFiYXNlV2lsbEJlT3BlbmVkKGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYpOworICAgIHZvaWQgZGF0YWJhc2VJc0Nsb3NlZChjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVF1b3RhVXNlcihjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikgeyBlbnN1cmVRdW90YVVzZXIob3JpZ2luKTsgfQogCkBA
IC0xNTIsNDEgKzE1Myw1MSBAQCBwcml2YXRlOgogCiAgICAgICAgIFN0b3JhZ2VRdW90YU1hbmFn
ZXIqIG1hbmFnZXIoKSB7IHJldHVybiBtX21hbmFnZXIuZ2V0KCk7IH0KIAotICAgICAgICB2b2lk
IHNldFNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVz
ZWQ7IH0KICAgICAgICAgdm9pZCByZXNldFNwYWNlVXNlZCgpOwogCi0gICAgICAgIHZvaWQgaW5j
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRT
cGFjZUluY3JlYXNlICs9IGluY3JlYXNlOyB9Ci0gICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRp
YWxTcGFjZVVzZWQodWludDY0X3QgZGVjcmVhc2UpCisgICAgICAgIHZvaWQgaG9sZFNwYWNlR3Jh
bnRlZCh1aW50NjRfdCBzaXplKSB7IG1fc3BhY2VSZXNlcnZlZCArPSBzaXplOyB9CisgICAgICAg
IHZvaWQgcmVsZWFzZVNwYWNlR3JhbnRlZCh1aW50NjRfdCBzaXplKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID49IGRlY3JlYXNlKTsKLSAg
ICAgICAgICAgIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSAtPSBkZWNyZWFzZTsKKyAgICAgICAg
ICAgIEFTU0VSVChtX3NwYWNlUmVzZXJ2ZWQgPj0gc2l6ZSk7CisgICAgICAgICAgICBtX3NwYWNl
UmVzZXJ2ZWQgLT0gc2l6ZTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGluY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpOwotICAgICAgICB2b2lkIGRlY3JlYXNlU3BhY2VVc2VkKHVpbnQ2
NF90IHNpemUpOworICAgICAgICB2b2lkIGluY3JlYXNlRXN0aW1hdGVkU3BhY2VVc2VkKHVpbnQ2
NF90IHNpemUpIHsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IHNpemU7IH0KIAotICAgICAg
ICB2b2lkIGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKKyAgICAgICAg
dm9pZCBjb21wdXRlU3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7
CisgICAgICAgIHZvaWQgZGlkQ29tcHV0ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpOwor
ICAgICAgICB2b2lkIHVwZGF0ZVNwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
IGZpbmFsOworICAgICAgICB2b2lkIGRpZFVwZGF0ZVNwYWNlVXNlZCh1aW50NjRfdCBpbmNyZWFz
ZSwgdWludDY0X3QgZGVjcmVhc2UpOworCisgICAgICAgIHVpbnQ2NF90IGVzdGltYXRlZFNwYWNl
VXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3Jl
YXNlOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsg
fQotICAgICAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpIGZpbmFsOworICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3NwYWNlVXNlZCArIG1fc3BhY2VSZXNlcnZlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNy
ZWFzZTsgfQorICAgICAgICBib29sIGNhblVwZGF0ZVNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwogICAgICAgICBX
ZWFrUHRyPFN0b3JhZ2VRdW90YU1hbmFnZXI+IG1fbWFuYWdlcjsKICAgICAgICAgQ2xpZW50T3Jp
Z2luIG1fb3JpZ2luOwotICAgICAgICBib29sIG1faXNJbml0aWFsaXplZCB7IGZhbHNlIH07Cisg
ICAgICAgIC8vIFNwYWNlIGluIHVzZS4KICAgICAgICAgdWludDY0X3QgbV9zcGFjZVVzZWQgeyAw
IH07CisgICAgICAgIC8vIFJlc2VydmVkIHNwYWNlIGZvciBvbmdvaW5nIHRhc2tzLgorICAgICAg
ICB1aW50NjRfdCBtX3NwYWNlUmVzZXJ2ZWQgeyAwIH07CisgICAgICAgIC8vIEVzdGltYXRlZCBz
cGFjZSBpbmNyZWFzZSBmb3IgZmluaXNoZWQgdGFza3Mgc2luY2UgbGFzdCB1cGRhdGUvY29tcHV0
YXRpb24uCiAgICAgICAgIHVpbnQ2NF90IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSB7IDAgfTsK
LSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBtX2luaXRpYWxpemF0aW9uQ2FsbGJh
Y2s7CisgICAgICAgIERlcXVlPENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fY2FsbGJhY2tz
OwogICAgIH07CiAKICAgICBXRUJDT1JFX0VYUE9SVCBRdW90YVVzZXImIGVuc3VyZVF1b3RhVXNl
cihjb25zdCBDbGllbnRPcmlnaW4mKTsKICAgICB2b2lkIHN0YXJ0Q29tcHV0aW5nU3BhY2VVc2Vk
Rm9yT3JpZ2luKGNvbnN0IENsaWVudE9yaWdpbiYpOwogICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNl
ZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mKTsKICAgICB2b2lkIGZpbmlzaENvbXB1dGlu
Z1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCBzcGFjZVVz
ZWQpOworICAgIHZvaWQgc3RhcnRVcGRhdGluZ1NwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGll
bnRPcmlnaW4mKTsKKyAgICB2b2lkIHVwZGF0ZVNwYWNlVXNlZEZvck9yaWdpbihjb25zdCBDbGll
bnRPcmlnaW4mKTsKKyAgICB2b2lkIGZpbmlzaFVwZGF0aW5nU3BhY2VVc2VkRm9yT3JpZ2luKGNv
bnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IGluY3JlYXNlLCB1aW50NjRfdCBkZWNyZWFzZSk7
CiAKICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKICAgICBIYXNoTWFwPElEQkNvbm5l
Y3Rpb25JZGVudGlmaWVyLCBSZWZQdHI8SURCQ29ubmVjdGlvblRvQ2xpZW50Pj4gbV9jb25uZWN0
aW9uTWFwOwogICAgIEhhc2hNYXA8SURCRGF0YWJhc2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9w
dHI8VW5pcXVlSURCRGF0YWJhc2U+PiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwOworICAgIEhhc2hN
YXA8SURCRGF0YWJhc2VJZGVudGlmaWVyLCBzdGQ6OnBhaXI8dWludDY0X3QsIElzQ2xvc2VkPj4g
bV9tb2RpZmllZERhdGFiYXNlU2l6ZU1hcDsKIAogICAgIEhhc2hNYXA8dWludDY0X3QsIFVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbio+IG1fZGF0YWJhc2VDb25uZWN0aW9uczsKICAgICBIYXNo
TWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbio+
IG1fdHJhbnNhY3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAy
NzliMzE1OTE2YmQzOWQ4ZDRhODYwNmU3MDVkYjdlNTVkMTlhZTcwLi4yOTk0NGIxZGZlOTE4NDU1
YmQ3ODhjOGE2NDdjNTZlMzY0YTc0NTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmNwcApAQCAtNzIyLDE0ICs3MjIsMTQgQEAgU3RyaW5nIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
ZGF0YWJhc2VOYW1lRnJvbUVuY29kZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGVuY28KICAgICBy
ZXR1cm4gRmlsZVN5c3RlbTo6ZGVjb2RlRnJvbUZpbGVuYW1lKHBhcnRpYWxseURlY29kZWQpOwog
fQogCi1TdHJpbmcgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpmaWxlbmFtZUZvckRhdGFiYXNlTmFt
ZSgpIGNvbnN0CitTdHJpbmcgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpmaWxlbmFtZUZvckRhdGFi
YXNlTmFtZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSkKIHsKLSAgICBBU1NFUlQoIW1faWRl
bnRpZmllci5kYXRhYmFzZU5hbWUoKS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFkYXRhYmFzZU5h
bWUuaXNOdWxsKCkpOwogCi0gICAgaWYgKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKS5pc0Vt
cHR5KCkpCisgICAgaWYgKGRhdGFiYXNlTmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAi
JTAwIjsKIAotICAgIFN0cmluZyBmaWxlbmFtZSA9IEZpbGVTeXN0ZW06OmVuY29kZUZvckZpbGVO
YW1lKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSk7CisgICAgU3RyaW5nIGZpbGVuYW1lID0g
RmlsZVN5c3RlbTo6ZW5jb2RlRm9yRmlsZU5hbWUoZGF0YWJhc2VOYW1lKTsKICAgICBmaWxlbmFt
ZS5yZXBsYWNlKCcuJywgIiUyRSIpOwogCiAgICAgcmV0dXJuIGZpbGVuYW1lOwpAQCAtNzY3LDcg
Kzc2Nyw3IEBAIFN0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZ1bGxEYXRhYmFzZURpcmVj
dG9yeVdpdGhVcGdyYWRlKCkKIHsKICAgICBhdXRvIGRhdGFiYXNlUm9vdERpcmVjdG9yeSA9IHRo
aXMtPmRhdGFiYXNlUm9vdERpcmVjdG9yeUlzb2xhdGVkQ29weSgpOwogICAgIFN0cmluZyBvbGRP
cmlnaW5EaXJlY3RvcnkgPSBtX2lkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRv
Um9vdChkYXRhYmFzZVJvb3REaXJlY3RvcnksICJ2MCIpOwotICAgIFN0cmluZyBvbGREYXRhYmFz
ZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChvbGRPcmln
aW5EaXJlY3RvcnksIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkpOworICAgIFN0cmluZyBvbGRE
YXRhYmFzZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChv
bGRPcmlnaW5EaXJlY3RvcnksIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKG1faWRlbnRpZmllci5k
YXRhYmFzZU5hbWUoKSkpOwogICAgIFN0cmluZyBuZXdPcmlnaW5EaXJlY3RvcnkgPSBtX2lkZW50
aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChkYXRhYmFzZVJvb3REaXJlY3Rv
cnksICJ2MSIpOwogICAgIFN0cmluZyBmaWxlTmFtZUhhc2ggPSBTUUxpdGVGaWxlU3lzdGVtOjpj
b21wdXRlSGFzaEZvckZpbGVOYW1lKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSk7CiAgICAg
VmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXNXaXRoU2FtZUhhc2ggPSBGaWxlU3lzdGVtOjpsaXN0
RGlyZWN0b3J5KG5ld09yaWdpbkRpcmVjdG9yeSwgZmlsZU5hbWVIYXNoICsgIioiKTsKQEAgLTg2
MSw2ICs4NjEsMjAgQEAgdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZVNp
emUoKSBjb25zdAogICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVT
aXplKGZ1bGxEYXRhYmFzZVBhdGgoKSk7CiB9CiAKK3VpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZGF0YWJhc2VTaXplRm9ySWRlbnRpZmllcihjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgcm9vdERpcmVjdG9yeSkKK3sKKyAgICBhdXRv
IG9sZE9yaWdpbkRpcmVjdG9yeSA9IGlkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChyb290RGlyZWN0b3J5LCAidjAiKTsKKyAgICBhdXRvIG9sZERhdGFiYXNlRGlyZWN0
b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9sZE9yaWdpbkRpcmVj
dG9yeSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoaWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSkp
OworICAgIGF1dG8gb2xkRGF0YWJhc2VQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KG9sZERhdGFiYXNlRGlyZWN0b3J5LCAiSW5kZXhlZERCLnNxbGl0ZTMiKTsKKwor
ICAgIGF1dG8gb3JpZ2luRGlyZWN0b3J5ID0gaWRlbnRpZmllci5kYXRhYmFzZURpcmVjdG9yeVJl
bGF0aXZlVG9Sb290KHJvb3REaXJlY3RvcnksICJ2MSIpOworICAgIGF1dG8gZmlsZU5hbWVIYXNo
ID0gU1FMaXRlRmlsZVN5c3RlbTo6Y29tcHV0ZUhhc2hGb3JGaWxlTmFtZShpZGVudGlmaWVyLmRh
dGFiYXNlTmFtZSgpKTsKKyAgICBhdXRvIGRhdGFiYXNlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG9yaWdpbkRpcmVjdG9yeSwgZmlsZU5hbWVIYXNoKTsK
KyAgICBhdXRvIGRhdGFiYXNlUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChkYXRhYmFzZURpcmVjdG9yeSwgIkluZGV4ZWREQi5zcWxpdGUzIik7CisKKyAgICByZXR1
cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShvbGREYXRhYmFzZVBhdGgp
ICsgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShkYXRhYmFzZVBhdGgpOwor
fQorCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29u
c3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24gLSAlcyIsIGluZm8uaWRlbnRpZmll
cigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTk4NCw3ICs5OTgsNyBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdAogCiAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5n
T2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHJldHVy
biBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBrZXlQYXRoQmxvYi0+c2l6ZSgpIH07CiB9
CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllcikKQEAgLTExMDUsOSArMTExOSwxMyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdAogICAgICAgICB9CiAgICAgfQogCisgICAgU3RyaW5nIG9sZE5hbWU7Cisg
ICAgaWYgKGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhp
c3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpKQorICAgICAgICBvbGROYW1l
ID0gb2JqZWN0U3RvcmVJbmZvLT5uYW1lKCk7CiAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9i
amVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICByZXR1cm4g
SURCRXJyb3IgeyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IG5ld05hbWUuc2l6ZUlu
Qnl0ZXMoKSA+IG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA/IG5ld05hbWUuc2l6ZUluQnl0ZXMoKSAt
IG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA6IDA7CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpu
dWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQpCkBAIC0xMTg0LDYg
KzEyMDIsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBhZGQgaW5kZXggJyVzJyB0byBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5m
by5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVy
cm9yLCAiVW5hYmxlIHRvIGNyZWF0ZSBpbmRleCBpbiBkYXRhYmFzZSJfcyB9OwogICAgIH0KKyAg
ICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBpbmZvLm5hbWUoKS5zaXplSW5CeXRlcygpICsga2V5
UGF0aEJsb2ItPnNpemUoKTsKIAogICAgIC8vIFdyaXRlIGluZGV4IHJlY29yZHMgZm9yIGFueSBy
ZWNvcmRzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGlzIG9iamVjdCBzdG9yZS4KIApAQCAtMTIx
NCw2ICsxMjMzLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRl
eChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKIAogICAgICAgICAgICAgcmV0
dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIHNpemVJbmNyZWFzZSArPSBlcnJvci5zaXpl
KCk7CiAKICAgICAgICAgaWYgKCFjdXJzb3ItPmFkdmFuY2UoMSkpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiRXJyb3IgYWR2YW5jaW5nIGN1cnNvciB3aGlsZSBpbmRleGluZyBleGlzdGluZyBy
ZWNvcmRzIGZvciBuZXcgaW5kZXguIik7CkBAIC0xMjMxLDcgKzEyNTEsNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhYwogICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAgICAgb2JqZWN0U3RvcmUt
PmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAg
IHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0K
IAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRIYXNJbmRleFJlY29y
ZChjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQktleURhdGEmIGluZGV4S2V5LCBi
b29sJiBoYXNSZWNvcmQpCkBAIC0xMjkxLDYgKzEzMTEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bywgYwogICAgICAgICB9CiAgICAgfQogCisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gMDsK
ICAgICBmb3IgKGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7CiAgICAgICAgIGlmICghaW5k
ZXhLZXkuaXNWYWxpZCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjk5LDkgKzEzMjAs
MTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleEtl
eShjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGMKICAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIHB1dCBpbmRleCByZWNvcmQgZm9yIG5ld2x5IGNyZWF0ZWQgaW5kZXgiKTsKICAgICAg
ICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBzaXplSW5jcmVhc2UgKz0g
ZXJyb3Iuc2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgcmV0
dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJL
ZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXksIGlu
dDY0X3QgcmVjb3JkSUQpCkBAIC0xMzM0LDcgKzEzNTYsOCBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaQogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1
aW50NjRfdCBzaXplSW5jcmVhc2UgPSBpbmRleEtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWVCdWZm
ZXItPnNpemUoKTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6
ZUluY3JlYXNlIH07CiB9CiAKIApAQCAtMTQxOSw5ICsxNDQyLDExIEBAIElEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBhdXRvIG9sZE5hbWUgPSBpbmRleElu
Zm8tPm5hbWUoKTsKICAgICBpbmRleEluZm8tPnJlbmFtZShuZXdOYW1lKTsKIAotICAgIHJldHVy
biBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gbmV3TmFtZS5zaXpl
SW5CeXRlcygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygpID8gbmV3TmFtZS5zaXplSW5CeXRlcygp
IC0gb2xkTmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6
Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29u
c3QgSURCS2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQpAQCAtMTY4OCw2ICsxNzEz
LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9y
QWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKIAogICAgIElEQkVycm9yIGVycm9yOwogICAg
IGJvb2wgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IGZhbHNlOworICAgIHVpbnQ2NF90IHNpemVJbmNy
ZWFzZSA9IDA7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IGluZm8uaW5kZXhNYXAoKS52YWx1ZXMo
KSkgewogICAgICAgICBJbmRleEtleSBpbmRleEtleTsKICAgICAgICAgZ2VuZXJhdGVJbmRleEtl
eUZvclZhbHVlKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPmV4ZWNTdGF0ZSgpLCBpbmRleCwganNW
YWx1ZSwgaW5kZXhLZXksIGluZm8ua2V5UGF0aCgpLCBrZXkpOwpAQCAtMTY5OCw2ICsxNzI0LDcg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRk
UmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICAgICAgZXJyb3IgPSB1bmNoZWNrZWRQdXRJ
bmRleEtleShpbmRleCwga2V5LCBpbmRleEtleSwgcmVjb3JkSUQpOwogICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHNpemVJbmNyZWFzZSAr
PSBlcnJvci5zaXplKCk7CiAKICAgICAgICAgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IHRydWU7CiAg
ICAgfQpAQCAtMTcxNiw3ICsxNzQzLDEwIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgaWYgKCFlcnJvci5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIAorICAgIHJldHVybiBJREJFcnJvciB7IFdU
Rjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgb2JqZWN0U3RvcmVJ
bmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUpCkBA
IC0xNzU3LDYgKzE3ODcsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgICAgIHJl
Y29yZElEID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CiAgICAgfQorICAgIHVpbnQ2
NF90IHNpemVJbmNyZWFzZSA9IGtleUJ1ZmZlci0+c2l6ZSgpICsgdmFsdWUuZGF0YSgpLmRhdGEo
KS0+c2l6ZSgpOwogCiAgICAgYXV0byBlcnJvciA9IHVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNv
cmQob2JqZWN0U3RvcmVJbmZvLCBrZXlEYXRhLCB2YWx1ZS5kYXRhKCksIHJlY29yZElEKTsKIApA
QCAtMTc3Miw2ICsxODAzLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRS
ZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICBy
ZXR1cm4gZXJyb3I7CiAgICAgfQorICAgIHNpemVJbmNyZWFzZSArPSBlcnJvci5zaXplKCk7CiAK
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMgPSB2YWx1ZS5ibG9iVVJMcygpOwog
ICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZXMgPSB2YWx1ZS5ibG9iRmlsZVBhdGhz
KCk7CkBAIC0xODI2LDcgKzE4NTgsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAg
dHJhbnNhY3Rpb24tPm5vdGlmeUN1cnNvcnNPZkNoYW5nZXMob2JqZWN0U3RvcmVJbmZvLmlkZW50
aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RG
OjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBv
YmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBWZWN0b3I8U3RyaW5n
PiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCBjYTZj
MzM2YWM2MzAzZTYyZDE3N2JhMzgzYjkwYTc1OWRlMDRjMTU5Li42NjY3ZDg4ZGM2MTFlZjM4MTc5
ZDY3NWUyNjlhM2RjMjA2NjMxNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBA
IC05OSwxMiArOTksMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgZnVsbERhdGFiYXNl
UGF0aEZvckRpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgU3RyaW5nIGRhdGFi
YXNlTmFtZUZyb21GaWxlKGNvbnN0IFN0cmluZyYpOwogCisgICAgc3RhdGljIHVpbnQ2NF90IGRh
dGFiYXNlU2l6ZUZvcklkZW50aWZpZXIoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29u
c3QgU3RyaW5nJiByb290RGlyZWN0b3J5KTsKKwogICAgIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJikgY29uc3QgZmluYWw7CiAKICAgICBQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQogCiBwcml2YXRl
OgotICAgIFN0cmluZyBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpIGNvbnN0OworICAgIHN0YXRp
YyBTdHJpbmcgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgU3Ry
aW5nIGZ1bGxEYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRGly
ZWN0b3J5V2l0aFVwZ3JhZGUoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4
IGQ4NWIwMDE0OGEyYTVjMzA2MGJhNTBjMGUxMjIwNzVjNjM1YmJjNGYuLmUwNmQ3YTMyYjUzOTE4
NDQzNGRlYTc2MDYxMTViMDU2OWQzM2NjY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApA
QCAtNTUsNiArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIElEQlNlcnZl
ciB7CiAKIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ID0g
NDsKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3QgPSAxMCAq
IEtCOwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhKQogewpAQCAtODgsMTAgKzg5LDIzIEBAIHN0YXRpYyBpbmxpbmUgdWludDY0
X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gc2l6ZTsK
IH0KIAorc3RhdGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURCS2V5UGF0
aCYga2V5UGF0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlQYXRoLCBbXShjb25z
dCBTdHJpbmcmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAg
ICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsKKyAgICAgICAgdWludDY0X3Qg
c2l6ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpCisgICAgICAgICAgICBz
aXplICs9IHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfSk7
Cit9CisKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQkluZGV4
SW5mbyYgaW5mbykKIHsKICAgICB1aW50NjRfdCBzaXplID0gNDsKICAgICBzaXplICs9IGluZm8u
bmFtZSgpLnNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoaW5mby5rZXlQ
YXRoKCkpOwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC05OSw5ICsxMTMsOCBAQCBzdGF0aWMg
aW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8pCiB7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6ZSArPSBpbmZvLm5hbWUoKS5z
aXplSW5CeXRlcygpOwotICAgIC8vIEZJWE1FOiBlc3RpbWF0ZSBrZXlQYXRoLgotICAgIGZvciAo
YXV0byYgaW5kZXhJbmZvIDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKQotICAgICAgICBzaXpl
ICs9IGVzdGltYXRlU2l6ZShpbmRleEluZm8pOworICAgIGlmIChhdXRvIGtleVBhdGggPSBpbmZv
LmtleVBhdGgoKSkKKyAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoKmtleVBhdGgpOwogICAg
IHJldHVybiBzaXplOwogfQogCkBAIC0yMDcsNiArMjIwLDIyIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3RpCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxs
YmFjaykpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VU
YXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIG1fc2Vy
dmVyLT5ob2xkU3BhY2VHcmFudGVkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwor
ICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUp
OworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1
aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCBhY3R1YWxUYXNrU2l6ZSkKK3sKKyAgICBhdXRv
IGl0ZXJhdG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRpZmllcik7
CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSkg
eworICAgICAgICBtX3NlcnZlci0+cmVsZWFzZVNwYWNlR3JhbnRlZChtX2lkZW50aWZpZXIub3Jp
Z2luKCksIGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZUVzdGlt
YXRlZFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGFjdHVhbFRhc2tTaXplKTsKKyAg
ICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJlbW92ZShpdGVyYXRvcik7CisgICAg
fQorfQorCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRp
b24oKQogewogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBAIC0yMTksNyArMjQ4LDcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkK
ICAgICAgICAgICAgIG1faXNPcGVuaW5nQmFja2luZ1N0b3JlID0gdHJ1ZTsKICAgICAgICAgICAg
IC8vIFdlIGRvIG5vdCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBleGlzdGluZyBvciBhIG5ldyBk
YXRhYmFzZS4KICAgICAgICAgICAgIC8vIFdlIHNldCBhIHNtYWxsIGNvc3Qgc28gdGhhdCBpdCBp
cyBub3QgcG9zc2libGUgdG8gb3BlbiBhbiBpbmZpbml0ZSBudW1iZXIgb2YgZGF0YWJhc2UuCi0g
ICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwg
ZGVmYXVsdFdyaXRlT3BlcmF0aW9uQ29zdCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
dGhpcyldKGF1dG8gZGVjaXNpb24pIG11dGFibGUgeworICAgICAgICAgICAgbV9zZXJ2ZXItPnJl
cXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29z
dCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNpemUgPSBkZWZhdWx0T3Bl
bk9wZXJhdGlvbkNvc3RdKGF1dG8gZGVjaXNpb24pIG11dGFibGUgewogICAgICAgICAgICAgICAg
IGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjM1LDcg
KzI2NCw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJh
dGlvbigpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFudDoK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9p
ZGVudGlmaWVyKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IHRoaXMt
PmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAg
IHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgc2l6ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMtPnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUsIG1faWRlbnRpZmllciwgY2Fs
bGJhY2tJRCkpOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
fQpAQCAtMzQ4LDE1ICszNzksMTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFj
a2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgIGlm
IChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2lu
Z1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRh
dGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICAg
ICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNl
OwogICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0
b3JlKGlkZW50aWZpZXIpOwotICAgICAgICBtX2N1cnJlbnREYXRhYmFzZVNpemUgPSBiYWNraW5n
U3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCisgICAgICAgIG1fc2VydmVyLT5kYXRhYmFzZVdpbGxC
ZU9wZW5lZChpZGVudGlmaWVyKTsKICAgICAgICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5m
bzsKICAgICAgICAgYXV0byBlcnJvciA9IGJhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKQEAg
LTM2NCwxMyArMzk0LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVs
ZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3Rv
cmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJh
Y2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAgICAgfQogCisgICAgbV9zZXJ2ZXItPmRhdGFi
YXNlSXNDbG9zZWQoaWRlbnRpZmllcik7CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJh
Y2tpbmdTdG9yZSwgZGVsZXRlZFZlcnNpb24pKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKQordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSIpOwpAQCAtMzc4LDcgKzQwOSw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFj
a2luZ1N0b3JlKCkKICAgICBpZiAobV9iYWNraW5nU3RvcmUpCiAgICAgICAgIG1fYmFja2luZ1N0
b3JlLT5kZWxldGVCYWNraW5nU3RvcmUoKTsKIAotICAgIHNodXRkb3duRm9yQ2xvc2UoKTsKKyAg
ICBzaHV0ZG93bkZvckNsb3NlKGlkZW50aWZpZXIpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpzY2hlZHVsZVNodXRkb3duRm9yQ2xvc2UoKQpAQCAtMzkwLDI3ICs0MjEsMjcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6c2NoZWR1bGVTaHV0ZG93bkZvckNsb3NlKCkKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9vd25pbmdQb2ludGVyRm9yQ2xvc2UpOwogICAgIG1fb3duaW5nUG9pbnRl
ckZvckNsb3NlID0gbV9zZXJ2ZXItPmNsb3NlQW5kVGFrZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlz
KTsKIAotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UpKTsKKyAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0
ZG93bkZvckNsb3NlLCBtX2lkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6c2h1dGRvd25Gb3JDbG9zZSgpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZv
ckNsb3NlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9vd25pbmdQb2ludGVyRm9yQ2xv
c2UuZ2V0KCkgPT0gdGhpcyk7CiAKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJE
YXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7
CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xvc2Uo
KTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VT
aXplKCk7Ci0gICAgfQogCiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fYmFj
a2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICBt
X2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CiAKKyAgICBtX3NlcnZlci0+ZGF0YWJh
c2VJc0Nsb3NlZChpZGVudGlmaWVyKTsKKwogICAgIGlmICghbV9kYXRhYmFzZVF1ZXVlLmlzRW1w
dHkoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKSk7CisgICAgICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UsIGlkZW50aWZpZXIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBtX2RhdGFiYXNlUXVldWUua2lsbCgpOwpAQCAtNDIyLDggKzQ1Myw2IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xvc2UoKQogewogICAgIEFTU0VS
VChtX2RhdGFiYXNlUmVwbHlRdWV1ZS5pc0VtcHR5KCkpOwogICAgIG1fZGF0YWJhc2VSZXBseVF1
ZXVlLmtpbGwoKTsKLQotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CiB9CiAKIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVk
VmVyc2lvbikKQEAgLTQ1NSw4ICs0ODQsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRE
ZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCiAgICAgICAgIG1fY3Vy
cmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwogICAgIH0KIAotICAgIHVwZGF0ZVNwYWNlVXNl
ZElmTmVlZGVkKCk7Ci0KICAgICBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgPSBmYWxz
ZTsKIAogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKQpAQCAtNTM3LDE0ICs1NjQs
MTQgQEAgYm9vbCBVbmlxdWVJREJEYXRhYmFzZTo6YWxsQ29ubmVjdGlvbnNBcmVDbG9zZWRPckNs
b3NpbmcoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdWludDY0X3QgZ2Vu
ZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJh
c2U6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIHN0YXRpYyB1aW50NjRfdCBjdXJyZW50SUQgPSAwOwogICAgIHJl
dHVybiArK2N1cnJlbnRJRDsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3Jl
Q2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRh
c2tTaXplKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKG1faGFyZENsb3NlZEZv
clVzZXJEZWxldGUpIHsKICAgICAgICAgY2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxldGVFcnJv
cigpKTsKQEAgLTU1NSwxNiArNTgyLDExIEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmIGNhbGxiYWNrLCB1CiAgICAg
QVNTRVJUKCFtX2Vycm9yQ2FsbGJhY2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2Vy
cm9yQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBp
ZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRpbmdT
cGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0KLQog
ICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlkZW50
aWZpZXI7CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXplKQor
dWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlE
YXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRl
bGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCksIHsg
fSk7CkBAIC01NzUsMTEgKzU5Nyw2IEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ssCiAgICAgQVNT
RVJUKCFtX2tleURhdGFDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fa2V5
RGF0YUNhbGxiYWNrcy5hZGQoaWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwogCi0gICAg
aWYgKHRhc2tTaXplKSB7Ci0gICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNl
VXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICAgICAgbV9wZW5kaW5n
U3BhY2VJbmNyZWFzaW5nVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLSAgICB9Ci0K
ICAgICBtX2NhbGxiYWNrUXVldWUuYXBwZW5kKGlkZW50aWZpZXIpOwogICAgIHJldHVybiBpZGVu
dGlmaWVyOwogfQpAQCAtNzgwLDcgKzc5Nyw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFk
ZE9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvCiAg
ICAgbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRvcHRSZWYoY29ubmVjdGlvbi5sZWFr
UmVmKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCit2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRl
bnRpZmllciwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQmFja2luZ1N0b3JlICglcCkiLCB0aGlzKTsKQEAgLTc5MCwxNyArODA3LDE1IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFu
ZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1Ry
YW5zYWN0aW9ucygpOwogICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tpbmdT
dG9yZS0+aXNFcGhlbWVyYWwoKTsKIAotICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2ZSBpbml0
aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUKLSAgICAvLyBzaXplIG9m
IHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3Rv
cmUtPmRhdGFiYXNlU2l6ZSgpOwotCisgICAgYXV0byBkYXRhYmFzZVNpemVCZWZvcmVPcGVuID0g
bV9zZXJ2ZXItPmRhdGFiYXNlV2lsbEJlT3BlbmVkKGlkZW50aWZpZXIpOwogICAgIElEQkRhdGFi
YXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5n
ZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAgYXV0
byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAwIDogZGVmYXVsdE9w
ZW5PcGVyYXRpb25Db3N0OworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwg
ZGF0YWJhc2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRlbnRpZmllcikp
OwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8m
IGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUsIHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5C
YWNraW5nU3RvcmUiKTsKQEAgLTgxMSw3ICs4MjYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3Qg
SQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdC
YWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7Cisg
ICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBhY3R1YWxUYXNr
U2l6ZSk7CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtODM2LDEwICs4NTEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRl
T2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWlu
dDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2sp
CiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihX
VEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2Fs
bGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7
CiB9CiAKQEAgLTg0OSw5ICs4NjUsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0
U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3Rv
cmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CisgICAg
YXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIGluZm8pKTsKIH0KIApAQCAtODYwLDEwICs4NzUsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIo
bWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwog
Ci0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKworICAgIElEQkVycm9yIGNyZWF0ZUVy
cm9yOworICAgIGlmIChjcmVhdGVFcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUlu
Zm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxs
YmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFj
ayhjYWxsYmFja0lkZW50aWZpZXIsIGNyZWF0ZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNr
IGNhbGxiYWNrKQpAQCAtOTM1LDE2ICs5NTMsMTYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QK
IAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hl
Y2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7
CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Ci0K
ICAgICBhdXRvKiBpbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0
b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgaWYgKCFpbmZvKSB7CiAgICAgICAgIHBl
cmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSUQsIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAi
QXR0ZW1wdCB0byByZW5hbWUgbm9uLWV4aXN0YW50IG9iamVjdCBzdG9yZSJfcyB9KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
RCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2Fs
bGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk1NCw5ICs5NzIsOCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7
Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVycm9yIGVycm9yOwog
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApA
QCAtOTY1LDEwICs5ODIsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJl
bmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlz
TnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3Iuc2l6ZSgpKTsKKworICAgIElEQkVycm9yIHJlbmFtZUVycm9yOworICAgIGlmIChyZW5h
bWVFcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0
b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBwZXJmb3JtRXJyb3JD
YWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxs
YmFjayhjYWxsYmFja0lkZW50aWZpZXIsIHJlbmFtZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQpAQCAtMTAzMCw5ICsxMDUwLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBjCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNr
KHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQog
ewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxi
YWNrSUQpCiAgICAgICAgIHJldHVybjsKKworICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2Fs
bGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCwgY2Fs
bGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwogfQogCkBA
IC0xMDY2LDYgKzEwODgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3Jl
YXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAgICBvYmpl
Y3RTdG9yZUluZm8tPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiAgICAgfQogCisgICAgZmluaXNo
U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5zaXplKCkpOwogICAg
IHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOwogfQogCkBA
IC0xMTQ3LDcgKzExNzAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogCiB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6
ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFz
a1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0xMTYzLDYgKzExODYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5h
bWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFj
a0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC0xMTcyLDkgKzExOTYsOCBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAogICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUp
OworICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lSW5kZXgodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3
TmFtZSk7CiAKLSAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtMTE4Myw3ICsxMjA2
LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUmVuYW1lSW5kZXgiKTsKIAotICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKwor
ICAgIElEQkVycm9yIHJlbmFtZUVycm9yOworICAgIGlmIChyZW5hbWVFcnJvci5pc051bGwoKSkg
ewogICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0Zv
ckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNT
RVJUKG9iamVjdFN0b3JlSW5mbyk7CiAgICAgICAgIGlmIChvYmplY3RTdG9yZUluZm8pIHsKQEAg
LTExOTMsNyArMTIxOSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5h
bWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
KTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIHJlbmFtZUVy
cm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVl
LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlE
YXRhQ2FsbGJhY2sgY2FsbGJhY2spCkBAIC0xMjEzLDkgKzEyMzksMTEgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnMKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3Rh
Q2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2Fs
bGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykp
OwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOworCisgICAgc3RhcnRTcGFj
ZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVB1dE9yQWRkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIo
KSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleURhdGEsIHZhbHVlLCBv
dmVyd3JpdGVNb2RlKSk7CiB9CiAKQEAgLTEyOTEsOCArMTMxOSwxMSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJSZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG92ZXJ3cml0ZU1v
ZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1
cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUo
KSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcikKLSAgICAgICAgZXJyb3IgPSBtX2JhY2tp
bmdTdG9yZS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleURhdGEubnVtYmVyKCkpOworICAgIGlmIChv
dmVyd3JpdGVNb2RlICE9IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpPdmVy
d3JpdGVGb3JDdXJzb3IgJiYgb2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYga2V5
RGF0YS50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXIpIHsKKyAgICAgICAgYXV0
byB1cGRhdGVFcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51
bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0
YS5udW1iZXIoKSk7CisgICAgICAgIGlmICghdXBkYXRlRXJyb3IuaXNOdWxsKCkpCisgICAgICAg
ICAgICBlcnJvciA9IHVwZGF0ZUVycm9yOworICAgIH0KIAogICAgIGdlbmVyYXRlZEtleVJlc2V0
dGVyLnJlbGVhc2UoKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwpAQCAtMTMwMyw2ICsxMzM0LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRP
ckFkZCIpOwogCisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvci5zaXplKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIApAQCAtMjA5Nyw5ICsyMTI5LDYgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayhDcm9zc1RocmVhZFRhc2smJiB0
YXNrKQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkoQ3Jv
c3NUaHJlYWRUYXNrJiYgdGFzaykKIHsKLSAgICBpZiAobV9iYWNraW5nU3RvcmUpCi0gICAgICAg
IG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotCiAg
ICAgbV9kYXRhYmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykpOwogICAgIG1fc2Vy
dmVyLT5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrUmVwbHkpKTsKIH0KQEAg
LTIxNjQsOCArMjE5Myw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3Nl
Rm9yVXNlckRlbGV0ZSgpCiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgbV9w
ZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuY2xlYXIoKTsKLSAgICBtX3NlcnZlci0+cmVzZXRT
cGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKyAgICBmb3IgKGF1dG8gc2l6ZSA6IG1f
cGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy52YWx1ZXMoKSkKKyAgICAgICAgbV9zZXJ2ZXItPnJl
bGVhc2VTcGFjZUdyYW50ZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBzaXplKTsKKyAgICBtX3Bl
bmRpbmdTcGFjZUluY3JlYXNlVGFza3MuY2xlYXIoKTsKIAogICAgIC8vIEVycm9yIG91dCBhbGwg
dHJhbnNhY3Rpb25zCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1f
aW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5rZXlzKCkpKQpAQCAtMjIzOCwzNiArMjI2OCwxMSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKQogICAg
IC8vIE90aGVyd2lzZSwgdGhpcyBkYXRhYmFzZSBpcyBzdGlsbCBwb3RlbnRpYWxseSBhY3RpdmUu
CiAgICAgLy8gU28gd2UnbGwgaGF2ZSBpdCBvd24gaXRzZWxmIGFuZCB0aGVuIHBlcmZvcm0gYSBj
bGVhbiB1bmNvbmRpdGlvbmFsIGRlbGV0ZSBvbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAg
bV9vd25pbmdQb2ludGVyRm9yQ2xvc2UgPSBtX3NlcnZlci0+Y2xvc2VBbmRUYWtlVW5pcXVlSURC
RGF0YWJhc2UoKnRoaXMpOwotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRl
QmFja2luZ1N0b3JlKSk7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNwYWNl
VXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmll
cikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG9wdGlvbmFsQ2Fs
bGJhY2tJZGVudGlmaWVyKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciA9
IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8gaXRlcmF0
b3IgPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5maW5kKGNhbGxiYWNrSWRlbnRpZmll
cik7Ci0gICAgICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNr
cy5lbmQoKSkgewotICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgICAg
IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFiYXNlU2l6
ZTsKLSAgICBpZiAoZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkgewotICAg
ICAgICBpZiAoZGF0YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAgICAgICAg
ICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGF0
YWJhc2VTaXplIC0gbV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwg
bV9jdXJyZW50RGF0YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9jdXJyZW50
RGF0YWJhc2VTaXplID0gZGF0YWJhc2VTaXplOwotICAgIH0KKyAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
VW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyKSk7CiB9CiAKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewotICAgIHVwZGF0ZVNwYWNl
VXNlZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0g
bV9lcnJvckNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGNh
bGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogICAgIGlmIChjYWxsYmFjaykg
ewpAQCAtMjI3OSw4ICsyMjg0LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVy
cm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogCiB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiByZXN1
bHRLZXkpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVy
KTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxsYmFja3MudGFrZShjYWxsYmFj
a0lkZW50aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlKTsKICAgICBpZiAoY2FsbGJhY2spIHsKQEAgLTIzMjUsOCArMjMyOCw2IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JD
YWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7Ci0gICAgdXBkYXRlU3BhY2VV
c2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIEFTU0VSVChtX2Vycm9yQ2Fs
bGJhY2tzLmNvbnRhaW5zKGNhbGxiYWNrSWRlbnRpZmllcikpOwogICAgIEFTU0VSVChtX2NhbGxi
YWNrUXVldWUubGFzdCgpID09IGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgbV9jYWxsYmFja1F1
ZXVlLnJlbW92ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggNTNiMjFkZmU0ZDIx
ZGE1NWZmY2E2ZjA2ZmIwNmIyMjc1YzFlY2Y4ZC4uNjdlOTNiYjU2YTRiMjE0MDA2M2M2OGY1NjBm
YjkyMjdiMzJkMGNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTExNiw4ICsxMTYsNiBA
QCBwdWJsaWM6CiAKICAgICBib29sIGhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZTsgfQogCi0gICAgdWludDY0X3Qgc3BhY2VV
c2VkKCkgY29uc3Q7Ci0KICAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpOwogCiBw
cml2YXRlOgpAQCAtMTYwLDcgKzE1OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBEYXRhYmFzZSB0
aHJlYWQgb3BlcmF0aW9ucwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURC
RGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICB2
b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAg
ICB2b2lkIHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwog
ICAgIHZvaWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0
aW9uSW5mbyYpOwpAQCAtMTgzLDEyICsxODEsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGVy
Zm9ybVN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5m
byYpOwogICAgIHZvaWQgcGVyZm9ybUFjdGl2YXRlVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwot
ICAgIHZvaWQgcGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKLSAgICB2
b2lkIHNodXRkb3duRm9yQ2xvc2UoKTsKKyAgICB2b2lkIHBlcmZvcm1VbmNvbmRpdGlvbmFsRGVs
ZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOworICAgIHZvaWQg
c2h1dGRvd25Gb3JDbG9zZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKIAogICAgIC8v
IE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVp
bnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZE9wZW5C
YWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImLCB1aW50
NjRfdCBhY3R1YWxUYXNrU2l6ZSwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICB2
b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9p
ZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAg
dm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTIxMSw4ICsyMDksOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlkUGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKICAgICB2b2lk
IGRpZFNodXRkb3duRm9yQ2xvc2UoKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihFcnJvckNhbGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7Ci0gICAgdWlu
dDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmLCB1aW50NjRf
dCB0YXNrU2l6ZSA9IDApOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihF
cnJvckNhbGxiYWNrJiYpOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihL
ZXlEYXRhQ2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KEdldEFsbFJlc3VsdHNDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoR2V0UmVzdWx0Q2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKENvdW50Q2FsbGJhY2smJik7CkBAIC0yNDksNyArMjQ3LDEwIEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChPcHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd2FpdEZv
clJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmKTsKLSAgICB2b2lk
IHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxi
YWNrSWRlbnRpZmllciA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBzdGFydFNwYWNlSW5jcmVh
c2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICB2b2lk
IGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IGFj
dHVhbFRhc2tTaXplKTsKKworICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxi
YWNrSWRlbnRpZmllcigpOwogCiAgICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURC
RGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKQEAgLTMwMiw5ICszMDMsNyBAQCBwcml2
YXRlOgogCiAgICAgSGFzaFNldDxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0
Y2hlczsKIAotICAgIEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUlu
Y3JlYXNpbmdUYXNrczsKLSAgICB1aW50NjRfdCBtX2N1cnJlbnREYXRhYmFzZVNpemUgeyAwIH07
Ci0gICAgdWludDY0X3QgbV9uZXdEYXRhYmFzZVNpemUgeyAwIH07CisgICAgSGFzaE1hcDx1aW50
NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKaW5kZXggNjUyZDBhODE3ZjVjNTNjNzAzODNmMDE0
ZTFlZWJhMTgwYTI2OGQ0Yy4uNzExODRjZjc4MmJhZTI0NTk2MDFjYmJiZDg3YWQxN2MzYmQwODgz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QkVycm9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCRXJyb3IuY3BwCkBAIC0zMiwxNSArMzIsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1JREJFcnJvcjo6SURCRXJyb3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gY29kZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQorSURCRXJyb3I6OklEQkVycm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNv
ZGU+IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3Qgc2l6ZSkKICAgICA6IG1f
Y29kZShjb2RlKQogICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgLCBtX3NpemUoc2l6ZSkK
IHsKIH0KIAogSURCRXJyb3IgSURCRXJyb3I6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIElEQkVycm9yIHsgbV9jb2RlLCBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCkgfTsKKyAg
ICByZXR1cm4gSURCRXJyb3IgeyBtX2NvZGUsIG1fbWVzc2FnZS5pc29sYXRlZENvcHkoKSwgbV9z
aXplIH07CiB9CiAKIFN0cmluZyBJREJFcnJvcjo6bmFtZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCmluZGV4IDNhOTVi
YjM4MDUwZGVhYjI4YzJkYzFhN2FlNjVmZTI3ZjZhZjg4NTYuLmYwZTU3NTFmYzQ4NGEwMTYzZGI4
ZDk5MTIxZjcyODgxZTZhZDE5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgSURCRXJyb3IgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JU
IGV4cGxpY2l0IElEQkVycm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+ID0gV1RGOjpudWxsb3B0
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxp
Y2l0IElEQkVycm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+ID0gV1RGOjpudWxsb3B0LCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UgPSB7IH0sIHVpbnQ2NF90IHNpemUgPSAwKTsKIAogICAgIHN0YXRp
YyBJREJFcnJvciB1c2VyRGVsZXRlRXJyb3IoKQogICAgIHsKQEAgLTU0LDYgKzU0LDcgQEAgcHVi
bGljOgogICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3Q7CiAKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuICFtX2NvZGU7IH0KKyAgICB1aW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAKICAgICBJREJFcnJvciBpc29sYXRlZENvcHkoKSBjb25zdDsKIApAQCAt
NjMsNiArNjQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE9wdGlvbmFsPEV4Y2VwdGlvbkNv
ZGU+IG1fY29kZTsKICAgICBTdHJpbmcgbV9tZXNzYWdlOworICAgIHVpbnQ2NF90IG1fc2l6ZTsK
IH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCA3NjdhZDJlYWY0YWNjYjgzMTkwNDQyMjg5
NzA2OTQ5YjcwYjM0MzBlLi43MTM4NWZkNDI2YjBjZTQ5NDg3ZjI2M2JlYjg3MzAyZGI2NTkxOGFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAK
QEAgLTMxLDYgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFz
ZVJlcXVlc3RlciYmIHNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIpCisgICAgOiBtX3F1b3RhKHF1b3Rh
KQorICAgICwgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUoc3BhY2VJbmNyZWFzZVJl
cXVlc3RlcikpCisgICAgLCBtX3Byb2Nlc3NQZW5kaW5nUmVxdWVzdHNUaW1lcigqdGhpcywgJlN0
b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpCit7Cit9CisKIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkKIHsKICAgICB3aGlsZSAoIW1f
cGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKQEAgLTM5LDExNyArNDYsMTI3IEBAIFN0b3JhZ2VR
dW90YU1hbmFnZXI6On5TdG9yYWdlUXVvdGFNYW5hZ2VyKCkKIAogdWludDY0X3QgU3RvcmFnZVF1
b3RhTWFuYWdlcjo6c3BhY2VVc2FnZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKG1fcGVuZGluZ1Vz
ZXJzLmlzRW1wdHkoKSAmJiBtX2luUHJvZ3Jlc3NVc2Vycy5pc0VtcHR5KCkpOwogICAgIHVpbnQ2
NF90IHVzYWdlID0gMDsKLSAgICBmb3IgKGF1dG8mIHVzZXIgOiBtX3VzZXJzKQorICAgIGZvciAo
YXV0byYgdXNlciA6IG1fYWN0aXZlVXNlcnMpCiAgICAgICAgIHVzYWdlICs9IHVzZXItPnNwYWNl
VXNlZCgpOwogICAgIHJldHVybiB1c2FnZTsKIH0KIAogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCkKIHsKLSAgICBpZiAoIW1fcXVvdGEpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIGF1dG8gZGVmYXVsdFF1b3RhU3RlcCA9IG1fcXVvdGEgLyAx
MDsKICAgICBtX3F1b3RhID0gc3RkOjptYXgobV9xdW90YSwgZGVmYXVsdFF1b3RhU3RlcCAqICgo
c3BhY2VVc2FnZSgpIC8gZGVmYXVsdFF1b3RhU3RlcCkgKyAxKSk7CiB9CiAKLXZvaWQgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6aW5pdGlhbGl6ZVVzZXJzSWZOZWVkZWQoKQordm9pZCBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpoYW5kbGVQZW5kaW5nVXNlcnMoKQogewotICAgIGlmIChtX3BlbmRpbmdJbml0
aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9wZW5kaW5nVXNlcnMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNlcio+IHVz
ZXJzVG9Jbml0aWFsaXplOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtX3BlbmRpbmdJbml0
aWFsaXphdGlvblVzZXJzKSB7Ci0gICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSA9PSBXaGVuSW5p
dGlhbGl6ZWRDYWxsZWQ6Ok5vKSB7Ci0gICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZSA9IFdoZW5J
bml0aWFsaXplZENhbGxlZDo6WWVzOwotICAgICAgICAgICAgdXNlcnNUb0luaXRpYWxpemUuYXBw
ZW5kKGtleVZhbHVlLmtleSk7Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8U3RvcmFnZVF1b3RhVXNl
cio+IHVzZXJzVG9IYW5kbGU7CisgICAgZm9yIChhdXRvJiBbdXNlciwgdHlwZV0gOiBtX3BlbmRp
bmdVc2VycykgeworICAgICAgICAvLyBUaGVzZSB1c2VycyB3aWxsIGJlIGhhbmRsZWQgaW4gdGhl
aXIgY2FsbGJhY2suCisgICAgICAgIGlmIChtX2luUHJvZ3Jlc3NVc2Vycy5jb250YWlucyh1c2Vy
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1c2Vyc1RvSGFuZGxlLmFwcGVuZCh1
c2VyKTsKICAgICB9Ci0gICAgZm9yIChhdXRvKiB1c2VyIDogdXNlcnNUb0luaXRpYWxpemUpIHsK
LSAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuY29udGFpbnModXNlcikp
Ci0gICAgICAgICAgICBhc2tVc2VyVG9Jbml0aWFsaXplKCp1c2VyKTsKKworICAgIGZvciAoYXV0
byogdXNlciA6IHVzZXJzVG9IYW5kbGUpIHsKKyAgICAgICAgYXV0byB0eXBlID0gbV9wZW5kaW5n
VXNlcnMuZ2V0KHVzZXIpOworICAgICAgICBoYW5kbGVQZW5kaW5nVXNlcigqdXNlciwgdHlwZSk7
CiAgICAgfQogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxp
emUoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKK3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6aGFu
ZGxlUGVuZGluZ1VzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlciwgVGFza1R5cGUgdHlwZSkKIHsK
LSAgICB1c2VyLndoZW5Jbml0aWFsaXplZChbdGhpcywgJnVzZXIsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIodGhpcyldKCkgeworICAgIG1faW5Qcm9ncmVzc1VzZXJzLmFkZCgmdXNlcik7CisgICAg
bV9wZW5kaW5nVXNlcnMucmVtb3ZlKCZ1c2VyKTsKKyAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+IGNhbGxiYWNrID0gW3RoaXMsICZ1c2VyLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMp
XSgpIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1vdmUoJnVzZXIpKQotICAg
ICAgICAgICAgbV91c2Vycy5hZGQoJnVzZXIpOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nSW5p
dGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCisgICAgICAgIAorICAgICAgICAvLyBVc2VyIG1h
eSBhbHJlYWR5IGJlIHJlbW92ZWQuCisgICAgICAgIGlmICghbV9pblByb2dyZXNzVXNlcnMuY29u
dGFpbnMoJnVzZXIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2luUHJvZ3Jlc3NV
c2Vycy5yZW1vdmUoJnVzZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fcGVuZGluZ1VzZXJz
LmNvbnRhaW5zKCZ1c2VyKSkgeworICAgICAgICAgICAgaGFuZGxlUGVuZGluZ1VzZXIodXNlciwg
VGFza1R5cGU6OkNvbXB1dGVTcGFjZVVzZWQpOwogICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAKLSAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotICAgICAgICBw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVl
c3Q6Ok5vKTsKLSAgICB9KTsKKyAgICAgICAgbV9hY3RpdmVVc2Vycy5hZGQoJnVzZXIpOworICAg
ICAgICBpbnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXIoKTsKKyAgICB9OworCisgICAg
aWYgKHR5cGUgPT0gVGFza1R5cGU6OkNvbXB1dGVTcGFjZVVzZWQpCisgICAgICAgIHVzZXIuY29t
cHV0ZVNwYWNlVXNlZChXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgZWxzZQorICAgICAgICB1c2Vy
LnVwZGF0ZVNwYWNlVXNlZChXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgU3RvcmFnZVF1
b3RhTWFuYWdlcjo6YWRkVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogewotICAgIEFTU0VS
VCghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIEFT
U0VSVCghbV91c2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMuYWRkKCZ1c2VyLCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ6Ok5vKTsKKyAgICBBU1NF
UlQoIW1fcGVuZGluZ1VzZXJzLmNvbnRhaW5zKCZ1c2VyKSk7CisgICAgQVNTRVJUKCFtX2luUHJv
Z3Jlc3NVc2Vycy5jb250YWlucygmdXNlcikpOworICAgIEFTU0VSVCghbV9hY3RpdmVVc2Vycy5j
b250YWlucygmdXNlcikpOwogCi0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIGFza1VzZXJUb0luaXRpYWxpemUodXNlcik7Ci19CisgICAgLy8gTWFrZSBzdXJl
IG5ld2x5IGFkZGVkIHVzZXIgaGFzIGFjY3VyYXRlIHNwYWNlIHVzYWdlLgorICAgIG1fcGVuZGlu
Z1VzZXJzLmFkZCgmdXNlciwgVGFza1R5cGU6OkNvbXB1dGVTcGFjZVVzZWQpOwogCi1ib29sIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnNob3VsZEFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlKSBjb25zdAotewotICAgIGlmICghc3BhY2VJbmNyZWFzZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2UgPiBtX3F1
b3RhOworICAgIGludm9rZVByb2Nlc3NQZW5kaW5nUmVxdWVzdHNUaW1lcigpOwogfQogCiB2b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikK
IHsKLSAgICBBU1NFUlQobV91c2Vycy5jb250YWlucygmdXNlcikgfHwgbV9wZW5kaW5nSW5pdGlh
bGl6YXRpb25Vc2Vycy5jb250YWlucygmdXNlcikpOwotICAgIG1fdXNlcnMucmVtb3ZlKCZ1c2Vy
KTsKLSAgICBpZiAobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5yZW1vdmUoJnVzZXIpICYm
IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFdo
ZW4gYmVpbmcgY2xlYXJlZCwgcXVvdGEgdXNlcnMgbWF5IHJlbW92ZSB0aGVtc2VsdmVzIGFuZCBh
ZGQgdGhlbXNlbHZlcyB0byB0cmlnZ2VyIHJlaW5pdGlhbGl6YXRpb24uCi0gICAgICAgIC8vIExl
dCdzIHdhaXQgZm9yIGFkZFVzZXIgdG8gYmUgY2FsbGVkIGJlZm9yZSBwcm9jZXNzaW5nIHBlbmRp
bmcgcmVxdWVzdHMuCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIodGhpcyldIHsKLSAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3BlbmRpbmdVc2Vycy5jb250YWlucygmdXNl
cikgfHwgbV9pblByb2dyZXNzVXNlcnMuY29udGFpbnMoJnVzZXIpIHx8IG1fYWN0aXZlVXNlcnMu
Y29udGFpbnMoJnVzZXIpKTsKIAotICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOwotICAg
ICAgICB9KTsKLSAgICB9CisgICAgbV9wZW5kaW5nVXNlcnMucmVtb3ZlKCZ1c2VyKTsKKyAgICBt
X2luUHJvZ3Jlc3NVc2Vycy5yZW1vdmUoJnVzZXIpOworICAgIG1fYWN0aXZlVXNlcnMucmVtb3Zl
KCZ1c2VyKTsKKworICAgIGludm9rZVByb2Nlc3NQZW5kaW5nUmVxdWVzdHNUaW1lcigpOwogfQog
Ci12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZUlu
Y3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKK3ZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6dXNlck5lZWRzVG9Db21wdXRlU3BhY2VVc2VkKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIp
CiB7Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9w
ZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykg
fSk7CisgICAgaWYgKG1faW5Qcm9ncmVzc1VzZXJzLmNvbnRhaW5zKCZ1c2VyKSkgeworICAgICAg
ICBtX3BlbmRpbmdVc2Vycy5zZXQoJnVzZXIsIFRhc2tUeXBlOjpDb21wdXRlU3BhY2VVc2VkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghc3BhY2VJbmNyZWFzZSkgewotICAg
ICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIG1fcGVuZGluZ1VzZXJzLnNldCgmdXNlciwgVGFza1R5cGU6OkNvbXB1dGVTcGFjZVVzZWQp
OworICAgIG1fYWN0aXZlVXNlcnMucmVtb3ZlKCZ1c2VyKTsKIAotICAgIGluaXRpYWxpemVVc2Vy
c0lmTmVlZGVkKCk7CisgICAgaW52b2tlUHJvY2Vzc1BlbmRpbmdSZXF1ZXN0c1RpbWVyKCk7Cit9
CiAKLSAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUo
Y2FsbGJhY2spIH0pOwotICAgICAgICByZXR1cm47Cit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OnVwZGF0ZVVzZXJzU3BhY2VVc2VkKCkKK3sKKyAgICBmb3IgKGF1dG8qIHVzZXIgOiBjb3B5VG9W
ZWN0b3IobV9hY3RpdmVVc2VycykpIHsKKyAgICAgICAgaWYgKHVzZXItPmNhblVwZGF0ZVNwYWNl
VXNlZCgpKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdVc2Vycy5hZGQodXNlciwgVGFza1R5cGU6
OlVwZGF0ZVNwYWNlVXNlZCk7CisgICAgICAgICAgICBtX2FjdGl2ZVVzZXJzLnJlbW92ZSh1c2Vy
KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3Bh
Y2VJbmNyZWFzZSkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJ
bmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFjZShz
cGFjZUluY3JlYXNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnZva2VQcm9jZXNz
UGVuZGluZ1JlcXVlc3RzVGltZXIoKTsKK30KKwordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpy
ZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2Fs
bGJhY2spCit7CisgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwg
V1RGTW92ZShjYWxsYmFjaykgfSk7CisKKyAgICBpbnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
VGltZXIoKTsKK30KKworYm9vbCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpzaG91bGRBc2tGb3JNb3Jl
U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3QKK3sKKyAgICBpZiAoIXNwYWNlSW5j
cmVhc2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNhbGxiYWNrKERlY2lzaW9uOjpH
cmFudCk7CisgICAgcmV0dXJuIHNwYWNlVXNhZ2UoKSArIHNwYWNlSW5jcmVhc2UgPiBtX3F1b3Rh
OwogfQogCiB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSh1aW50NjRf
dCBzcGFjZUluY3JlYXNlKQpAQCAtMTY2LDI4ICsxODMsNDEgQEAgdm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkKICAgICAgICAg
UkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9y
ZVNwYWNlIHJlY2VpdmVkIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3
UXVvdGEgOiAwKTsKIAogICAgICAgICBtX2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25z
ZSA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhLCBTaG91
bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKTsKKyAgICAgICAgaWYgKG5ld1F1b3Rh
KQorICAgICAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKKyAgICAgICAgaW52b2tlUHJvY2Vz
c1BlbmRpbmdSZXF1ZXN0c1RpbWVyKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVv
dGEsIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHNob3VsZERlcXVldWVGaXJzdFBl
bmRpbmdSZXF1ZXN0KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjppbnZva2VQcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzVGltZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAoIW1fcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0c1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0c1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoKQogewogICAg
IGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChuZXdRdW90YSkKLSAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKLQogICAgIGlmICht
X2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKKyAgICBpZiAo
IW1fcGVuZGluZ1VzZXJzLmlzRW1wdHkoKSB8fCAhbV9pblByb2dyZXNzVXNlcnMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGhhbmRsZVBlbmRpbmdVc2VycygpOwogICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzICYmICFtX3F1b3RhKSB7
CisgICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICAgICAgbV9oYXNT
dGFydGVkSGFuZGxpbmdSZXF1ZXN0cyA9IHRydWU7CisgICAgfQogCi0gICAgaWYgKHNob3VsZERl
cXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0ID09IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1
ZXN0OjpZZXMpIHsKKyAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKS5zdGF0ZSA9PSBQ
ZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQpIHsKICAgICAgICAg
YXV0byByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIGJv
b2wgc2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNw
YWNlSW5jcmVhc2UpOwotCiAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNp
c2lvbiBpcyAlZCIsIHRoaXMsIHNob3VsZEFsbG93UmVxdWVzdCk7CiAKICAgICAgICAgcmVxdWVz
dC5jYWxsYmFjayhzaG91bGRBbGxvd1JlcXVlc3QgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lv
bjo6RGVueSk7CkBAIC0xOTUsMTEgKzIyNSwxNiBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaAog
CiAgICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0
byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCk7Ci0KICAgICAgICAgaWYgKHNo
b3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpKSB7CisgICAgICAgICAg
ICBpZiAocmVxdWVzdC5zdGF0ZSA9PSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlVuaGFuZGxlZCkg
eworICAgICAgICAgICAgICAgIHJlcXVlc3Quc3RhdGUgPSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6
OlVzZXJTcGFjZVVwZGF0ZVJlcXVlc3RlZDsKKyAgICAgICAgICAgICAgICB1cGRhdGVVc2Vyc1Nw
YWNlVXNlZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UgPSAwOwogICAgICAgICAgICAgZm9yIChhdXRv
JiByZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCiAgICAgICAgICAgICAgICAgc3BhY2VJbmNy
ZWFzZSArPSByZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CisgICAgICAgICAgICByZXF1ZXN0LnN0YXRl
ID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkOwogICAgICAg
ICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5oCmluZGV4IDlmNjQ2MzNlZDY2Y2MxMmE5MjgzYzA4OTFiZDI1NWFlOTMwNDJhYjcuLjI5YjM0
ZDgxM2RmNGRiNWU0Y2JhYTA0MWIzNWQ3NzU3OGJmOTZkNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkNsaWVudE9yaWdpbi5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCiAj
aW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTQwLDExICs0MSw3IEBAIGNsYXNzIFN0b3Jh
Z2VRdW90YU1hbmFnZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8U3RvcmFnZVF1b3RhTWFuYWdl
cj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIHVzaW5nIFNw
YWNlSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0X3QgcXVvdGEs
IHVpbnQ2NF90IGN1cnJlbnRTcGFjZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47Ci0gICAgU3RvcmFnZVF1b3Rh
TWFuYWdlcih1aW50NjRfdCBxdW90YSwgU3BhY2VJbmNyZWFzZVJlcXVlc3RlciYmIHNwYWNlSW5j
cmVhc2VSZXF1ZXN0ZXIpCi0gICAgICAgIDogbV9xdW90YShxdW90YSkKLSAgICAgICAgLCBtX3Nw
YWNlSW5jcmVhc2VSZXF1ZXN0ZXIoV1RGTW92ZShzcGFjZUluY3JlYXNlUmVxdWVzdGVyKSkKLSAg
ICB7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0
X3QgcXVvdGEsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZXImJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
flN0b3JhZ2VRdW90YU1hbmFnZXIoKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qg
ZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkg
eyByZXR1cm4gcXVvdGEgLyAxMDsgfQpAQCAtNTQsNiArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXIoU3RvcmFnZVF1b3RhVXNlciYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB1c2VyTmVlZHNUb0NvbXB1dGVTcGFjZVVzZWQoU3RvcmFnZVF1b3RhVXNl
ciYpOwogCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNp
bmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwpA
QCAtNjcsMjYgKzY1LDM0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRBc2tGb3JNb3JlU3Bh
Y2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkgY29uc3Q7CiAgICAgdm9pZCBhc2tGb3JNb3JlU3Bh
Y2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSk7CiAKLSAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lm
TmVlZGVkKCk7Ci0gICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXIm
KTsKKyAgICBlbnVtIGNsYXNzIFRhc2tUeXBlIHsgVXBkYXRlU3BhY2VVc2VkLCBDb21wdXRlU3Bh
Y2VVc2VkIH07CisgICAgdm9pZCBoYW5kbGVQZW5kaW5nVXNlcihTdG9yYWdlUXVvdGFVc2VyJiwg
VGFza1R5cGUpOworICAgIHZvaWQgaGFuZGxlUGVuZGluZ1VzZXJzKCk7CisgICAgdm9pZCB1cGRh
dGVVc2Vyc1NwYWNlVXNlZCgpOwogCi0gICAgZW51bSBjbGFzcyBTaG91bGREZXF1ZXVlRmlyc3RQ
ZW5kaW5nUmVxdWVzdCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVz
dHMoT3B0aW9uYWw8dWludDY0X3Q+LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCk7
CisgICAgdm9pZCBpbnZva2VQcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXIoKTsKKyAgICB2b2lk
IHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoKTsKIAogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07
CiAKICAgICBib29sIG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlIHsgZmFsc2Ug
fTsKICAgICBTcGFjZUluY3JlYXNlUmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsK
IAotICAgIGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9OwotICAg
IEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4gbV9wZW5k
aW5nSW5pdGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PGNvbnN0IFN0b3JhZ2VRdW90YVVz
ZXIqPiBtX3VzZXJzOworICAgIGJvb2wgbV9oYXNTdGFydGVkSGFuZGxpbmdSZXF1ZXN0cyB7IGZh
bHNlIH07CisKKyAgICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVzZXIqLCBUYXNrVHlwZT4gbV9wZW5k
aW5nVXNlcnM7CisgICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV9pblByb2dyZXNzVXNl
cnM7CisgICAgSGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV9hY3RpdmVVc2VyczsKIAogICAg
IHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7CiAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7
CiAgICAgICAgIFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKKyAgICAgICAgZW51bSBjbGFzcyBT
dGF0ZSB7IFVuaGFuZGxlZCwgVXNlclNwYWNlVXBkYXRlUmVxdWVzdGVkLCBTcGFjZUluY3JlYXNl
UmVxdWVzdGVkIH07CisgICAgICAgIFN0YXRlIHN0YXRlIHsgU3RhdGU6OlVuaGFuZGxlZCB9Owog
ICAgIH07CiAgICAgRGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3RzOworCisg
ICAgVGltZXIgbV9wcm9jZXNzUGVuZGluZ1JlcXVlc3RzVGltZXI7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YVVzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmlu
ZGV4IGI0MjMwYzVlMTJkMDk0ZDY5OWUxZTI5OTc5MTY0YWY1YjdjODM4ZTAuLmI1NjAwZTg0MDI4
ZjdlOGMzZWExNjg1NjA5NGE2NzI5N2MxNDMxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhVXNlci5oCkBAIC0zNCw3ICszNCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5TdG9yYWdlUXVvdGFVc2VyKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBz
cGFjZVVzZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHdoZW5Jbml0aWFsaXplZChD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQorICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwYWNl
VXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBjYW5VcGRhdGVTcGFjZVVzZWQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBjMjkwYzVkOTYxYjlmYWRl
NDQwOWQ3N2NkM2EzYWY5YWYzYTgwZDkwLi4xMzk3MWRkZDE2N2UwNTkyZGM3NDUxYTNiZWNhZDU2
MDhiOWE1NGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcApAQCAtMjQ0MiwxNiArMjQ0MiwxNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpy
ZXF1ZXN0U3RvcmFnZVNwYWNlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50
TwogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6UmVxdWVzdFN0b3JhZ2VTcGFjZSB7IHNlc3Npb25J
RCwgb3JpZ2luLCBxdW90YSwgY3VycmVudFNpemUsIHNwYWNlUmVxdWlyZWQgfSwgV1RGTW92ZShj
YWxsYmFjayksIDApOwogfQogCi1jbGFzcyBRdW90YVVzZXJJbml0aWFsaXplciBmaW5hbCA6IHB1
YmxpYyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyIHsKK2NsYXNzIER1bW15UXVvdGFVc2VyIGZp
bmFsIDogcHVibGljIFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFF1b3RhVXNlckluaXRpYWxpemVy
KFN0b3JhZ2VRdW90YU1hbmFnZXImIG1hbmFnZXIpCisgICAgZXhwbGljaXQgRHVtbXlRdW90YVVz
ZXIoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlcikKICAgICAgICAgOiBtX21hbmFnZXIobWFr
ZVdlYWtQdHIobWFuYWdlcikpCiAgICAgewogICAgICAgICBtYW5hZ2VyLmFkZFVzZXIoKnRoaXMp
OwogICAgIH0KIAotICAgIH5RdW90YVVzZXJJbml0aWFsaXplcigpCisgICAgfkR1bW15UXVvdGFV
c2VyKCkKICAgICB7CiAgICAgICAgIGlmIChtX21hbmFnZXIpCiAgICAgICAgICAgICBtX21hbmFn
ZXItPnJlbW92ZVVzZXIoKnRoaXMpOwpAQCAtMjQ2Nyw3ICsyNDY3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSBmaW5hbAorICAgIHZvaWQgY29tcHV0ZVNw
YWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIGZpbmFsCiAgICAg
ewogICAgICAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CiAgICAgfQpAQCAtMjQ3
OCw3ICsyNDc4LDcgQEAgcHJpdmF0ZToKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6
ZVF1b3RhVXNlcnMoU3RvcmFnZVF1b3RhTWFuYWdlciYgbWFuYWdlciwgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKIHsKLSAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHNlc3Np
b25JRCwgb3JpZ2luLCB1c2VyID0gbWFrZVVuaXF1ZTxRdW90YVVzZXJJbml0aWFsaXplcj4obWFu
YWdlcildKCkgbXV0YWJsZSB7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXNzaW9uSUQsIG9yaWdpbiwgdXNlciA9IG1h
a2VVbmlxdWU8RHVtbXlRdW90YVVzZXI+KG1hbmFnZXIpXSgpIG11dGFibGUgewogICAgICAgICBp
ZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLT5pZGJTZXJ2
ZXIoc2Vzc2lvbklEKS5pbml0aWFsaXplUXVvdGFVc2VyKG9yaWdpbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5jcHAKaW5kZXggMjM4Nzk0MTZmZmRjM2QyMTMwNjdkMWUyNzk1MTdlZTE0Y2Ji
NWE2Yy4uYjcwMjkzOTI0NDNhNWFhOTAzZmU1YTZjNzVlZDU5Y2FmODg5MzExNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVD
YWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtNzQsNyArNzQsNyBAQCBDYWNoZXM6On5DYWNoZXMo
KQogICAgICAgICBtX3F1b3RhTWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7CiB9CiAKLXZvaWQg
Q2FjaGVzOjp3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrKQordm9pZCBDYWNoZXM6OmNvbXB1dGVTcGFjZVVzZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrKQogewogICAgIGluaXRpYWxpemUoW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8mJiBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikKQEAg
LTYwOCwxMCArNjA4LDggQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29uc3QgTmV0
d29ya0NhY2hlOjpLZXkmIGtleSkKIHZvaWQgQ2FjaGVzOjpyZXNldFNwYWNlVXNlZCgpCiB7CiAg
ICAgbV9zaXplID0gMDsKLSAgICBpZiAobV9xdW90YU1hbmFnZXIpIHsKLSAgICAgICAgbV9xdW90
YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwotICAgICAgICBtX3F1b3RhTWFuYWdlci0+YWRk
VXNlcigqdGhpcyk7Ci0gICAgfQorICAgIGlmIChtX3F1b3RhTWFuYWdlcikKKyAgICAgICAgbV9x
dW90YU1hbmFnZXItPnVzZXJOZWVkc1RvQ29tcHV0ZVNwYWNlVXNlZCgqdGhpcyk7CiB9CiAKIHZv
aWQgQ2FjaGVzOjpjbGVhck1lbW9yeVJlcHJlc2VudGF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlcy5oCmluZGV4IDNjNDUxYTcyM2UxZTkyZjU1OWY2ZmJjZWY3ZjFmMzMxMTg5MDJmYWUuLjc4
YmQxZjA2MjE0NGY1ZTQ5NDAyNmFjOGE0MThiYzZkMjE2ODNkYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuaApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVhZENhY2hl
c0Zyb21EaXNrKFdURjo6RnVuY3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJD
b3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVz
VG9EaXNrKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAK
LSAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZp
bmFsOworICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpIGZpbmFsOwogCiAgICAgdm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpD
bGllbnRPcmlnaW4+IHJlYWRPcmlnaW4oY29uc3QgTmV0d29ya0NhY2hlOjpEYXRhJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379752</attachid>
            <date>2019-09-27 12:23:53 -0700</date>
            <delta_ts>2019-09-27 13:23:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190927122353.patch</filename>
            <type>text/plain</type>
            <size>50087</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc3OTllZTlhYjAxOTlk
MzJmNTAwMjEyZmNhOWJjODhhZDJhZDdiNS4uYzRjZmJlYTg4MTE1ZTdmODliYzUyNTY3YmEzMzAy
YzFmMTBmN2I2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE5LTA5LTI3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERCIG9ubHkgd2hlbiBlc3RpbWF0
ZWQgaW5jcmVhc2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2UgcmVhZCBzaXpl
IG9mIEluZGV4ZWREQiBkYXRhYmFzZSBmaWxlcyB3aGVuIGEgZGF0YWJhc2Ugb3BlcmF0aW9uIGlz
IGNvbXBsZXRlZC4gVGhpcyBmaWxlIHN5c3RlbQorICAgICAgICBvcGVyYXRpb24gaXMgc2xvdy4K
KyAgICAgICAgCisgICAgICAgIEFuIGVmZmljaWVudCBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRl
IHRoZSBzcGFjZSBhdmFpbGFibGUsIGVzdGltYXRlIHNwYWNlIGluY3JlYXNlIGZvciBlYWNoIG9w
ZWFydGlvbiwgYW5kIGdldAorICAgICAgICB0aGUgYWNjdXJhdGUgZmlsZSBzaXplIG9ubHkgd2hl
biB0aGUgYWNjdW11bGF0ZWQgZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNl
IGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc2l6ZSBlc3RpbWF0
ZSBmb3IgSURCIHRhc2tzIG1vcmUgYWNjdXJhdGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyB0ZXN0LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2Vy
OjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVu
Y2hlY2tlZFB1dEluZGV4S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6ZXN0aW1hdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1
cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVs
ZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVy
UXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4
QWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVu
YW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cG9zdERhdGFiYXNlVGFza1JlcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFj
ZVVzZWRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjpJREJFcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkVycm9yOjpJREJFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6c2l6
ZSBjb25zdCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVz
dHMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQpOgorCiAyMDE5LTA5LTI3ICBEZXZpbiBSb3Vzc28gIDxk
cm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBGbGFreSBUZXN0OiBpbnNwZWN0b3IvY2FudmFz
L3VwZGF0ZVNoYWRlci5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM4OTI3NzgwODlhYTI2ZGNkMWU3ZWIyNzY0
ODRiOGIyYzNhZGJkM2QuLmUyYTAxZTRlZDdiMWM1OWRhZTQ1ZjA3NzgxMzY4OWU5MDk4NGMzZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDktMjcgIFNpaHVpIExpdSAgPHNpaHVp
X2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERC
IG9ubHkgd2hlbiBlc3RpbWF0ZWQgaW5jcmVhc2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxh
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5
NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6CisKIDIw
MTktMDktMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbaU9TXTogV2hlbiBpbnNlcnRpbmcgYSBwaG90byBhbmQgdGhlbiBpbnNlcnRpbmcg
YXV0by1jb3JyZWN0ZWQgdGV4dCwgdGhlIHBob3RvIGlzIHJlbW92ZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXgg
YjU5ZWQ3ZjIyNDQ3MDQxNDdmZDE5MGExZDE3ZmE4OTRkMzlmY2IwYy4uMTVlYjkzZDFlZWRmNmJj
MGNlY2FhYjE5ZWUyODA1ZjllNzUwOTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTcwOSw3ICs3MDksNyBA
QCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcigpCiAgICAgICAgIG1fbWFuYWdlci0+
cmVtb3ZlVXNlcigqdGhpcyk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0
U3BhY2VVc2VkKCkKK3ZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKENv
bmRpdGlvbikKIHsKICAgICBtX3NwYWNlVXNlZCA9IDA7CiAgICAgbV9lc3RpbWF0ZWRTcGFjZUlu
Y3JlYXNlID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuaAppbmRleCAxOWU2OTYyZWQxOWFiYTU0MDMyY2EwNDQ3MjRlZDExMTUz
NTRhNWFmLi43NmE1MjNkNjYyYjk5ZWQ1NDAzYTZhMTVkZTlhNzQxMmQ1NDQyZDc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdl
ciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFuYWdlci5nZXQoKTsgfQogCiAgICAgICAgIHZvaWQg
c2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNl
ZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CisgICAgICAgIHZvaWQgcmVzZXRT
cGFjZVVzZWQoQ29uZGl0aW9uIGNvbmRpdGlvbiA9IENvbmRpdGlvbjo6Tm9uZSkgZmluYWw7CiAK
ICAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBpbmNyZWFz
ZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0KICAgICAgICAgdm9p
ZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFzZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMjc5YjMxNTkxNmJkMzlkOGQ0YTg2MDZlNzA1
ZGI3ZTU1ZDE5YWU3MC4uOTFkMDIxYTI2NWUxMGQ0NWFiNzZlNGEyY2YyOTA3YzQxNzQyMzg0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk4NCw3ICs5ODQsOCBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdAogCiAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5n
T2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHVpbnQ2
NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCkgKyBrZXlQYXRoQmxv
Yi0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXpl
SW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVP
YmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQpAQCAtMTEwNSw5ICsxMTA2LDEz
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBTdHJp
bmcgb2xkTmFtZTsKKyAgICBpZiAoYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUlu
Zm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcikpCisg
ICAgICAgIG9sZE5hbWUgPSBvYmplY3RTdG9yZUluZm8tPm5hbWUoKTsKICAgICBtX2RhdGFiYXNl
SW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsK
IAotICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0g
bmV3TmFtZS5zaXplSW5CeXRlcygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygpID8gbmV3TmFtZS5z
aXplSW5CeXRlcygpIC0gb2xkTmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAgICByZXR1cm4gSURC
RXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
RCkKQEAgLTExODQsNiArMTE4OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAo
JWkpIC0gJXMiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9z
IH07CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJ
bkJ5dGVzKCkgKyBrZXlQYXRoQmxvYi0+c2l6ZSgpOwogCiAgICAgLy8gV3JpdGUgaW5kZXggcmVj
b3JkcyBmb3IgYW55IHJlY29yZHMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoaXMgb2JqZWN0IHN0
b3JlLgogCkBAIC0xMjE0LDYgKzEyMjAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNl
ICs9IGVycm9yLnNpemUoKTsKIAogICAgICAgICBpZiAoIWN1cnNvci0+YWR2YW5jZSgxKSkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZHZhbmNpbmcgY3Vyc29yIHdoaWxlIGluZGV4
aW5nIGV4aXN0aW5nIHJlY29yZHMgZm9yIG5ldyBpbmRleC4iKTsKQEAgLTEyMzEsNyArMTIzOCw3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKICAg
ICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKIAotICAgIHJldHVybiBJREJF
cnJvciB7IH07CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJ
bmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tl
ZEhhc0luZGV4UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCS2V5RGF0
YSYgaW5kZXhLZXksIGJvb2wmIGhhc1JlY29yZCkKQEAgLTEyOTEsNiArMTI5OCw3IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURC
SW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1aW50NjRfdCBzaXpl
SW5jcmVhc2UgPSAwOwogICAgIGZvciAoYXV0byYgaW5kZXhLZXkgOiBpbmRleEtleXMpIHsKICAg
ICAgICAgaWYgKCFpbmRleEtleS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTEyOTksOSArMTMwNywxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hl
Y2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgYwogICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHV0IGluZGV4IHJlY29yZCBmb3IgbmV3bHkgY3JlYXRlZCBp
bmRleCIpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIHNp
emVJbmNyZWFzZSArPSBlcnJvci5zaXplKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9y
IHsgfTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3Jl
YXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0
SW5kZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0
IFdlYkNvcmU6OklEQktleURhdGEmIGtleVZhbHVlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRh
JiBpbmRleEtleSwgaW50NjRfdCByZWNvcmRJRCkKQEAgLTEzMzQsNyArMTM0Myw4IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW50NjRf
dCBvYmplY3RTdG9yZUlELCBpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSURCRXJy
b3IgeyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZGV4S2V5QnVmZmVyLT5zaXpl
KCkgKyB2YWx1ZUJ1ZmZlci0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVs
bG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogCkBAIC0xNDE5LDkgKzE0MjksMTEgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgfQogICAgIH0KIAorICAgIGF1dG8gb2xk
TmFtZSA9IGluZGV4SW5mby0+bmFtZSgpOwogICAgIGluZGV4SW5mby0+cmVuYW1lKG5ld05hbWUp
OwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2Ug
PSBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1l
LnNpemVJbkJ5dGVzKCkgLSBvbGROYW1lLnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBJ
REJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBrZXlFeGlzdHMpCkBA
IC0xNjg4LDYgKzE3MDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogCiAgICAgSURCRXJy
b3IgZXJyb3I7CiAgICAgYm9vbCBhbnlSZWNvcmRzU3VjY2VlZGVkID0gZmFsc2U7CisgICAgdWlu
dDY0X3Qgc2l6ZUluY3JlYXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogaW5mby5pbmRl
eE1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5OwogICAgICAgICBn
ZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRl
KCksIGluZGV4LCBqc1ZhbHVlLCBpbmRleEtleSwgaW5mby5rZXlQYXRoKCksIGtleSk7CkBAIC0x
Njk5LDYgKzE3MTIsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgc2l6ZUluY3JlYXNl
ICs9IGVycm9yLnNpemUoKTsKICAgICAgICAgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IHRydWU7CiAg
ICAgfQogCkBAIC0xNzE2LDcgKzE3MzAsMTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBlcnJvcjsKKyAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6
Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5m
bywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAt
MTc1Nyw2ICsxNzc0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNv
cmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICByZWNv
cmRJRCA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0KKyAgICB1aW50NjRf
dCBzaXplSW5jcmVhc2UgPSBrZXlCdWZmZXItPnNpemUoKSArIHZhbHVlLmRhdGEoKS5kYXRhKCkt
PnNpemUoKTsKIAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3Jk
KG9iamVjdFN0b3JlSW5mbywga2V5RGF0YSwgdmFsdWUuZGF0YSgpLCByZWNvcmRJRCk7CiAKQEAg
LTE3NzIsNiArMTc5MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICAgICAgcmV0
dXJuIGVycm9yOwogICAgIH0KKyAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iuc2l6ZSgpOwogCiAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzID0gdmFsdWUuYmxvYlVSTHMoKTsKICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVzID0gdmFsdWUuYmxvYkZpbGVQYXRocygp
OwpAQCAtMTc4Nyw2ICsxODA2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjph
ZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3Jk
IEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIl9zIH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
KyAgICAgICAgc2l6ZUluY3JlYXNlICs9IHVybC5zaXplSW5CeXRlcygpOwogICAgICAgICBpbnQ2
NF90IHBvdGVudGlhbEZpbGVOYW1lSW50ZWdlciA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJ
RCgpOwogCiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxv
YlVSTCwgbm90aGluZyBsZWZ0IHRvIGRvLgpAQCAtMTgyMiwxMSArMTg0MiwxMiBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aQogICAgICAgICB9CiAKICAgICAgICAgdHJhbnNhY3Rpb24tPmFkZEJs
b2JGaWxlKGJsb2JGaWxlc1tpXSwgc3RvcmVkRmlsZW5hbWUpOworICAgICAgICBzaXplSW5jcmVh
c2UgKz0gKHVybC5zaXplSW5CeXRlcygpICsgc3RvcmVkRmlsZW5hbWUuc2l6ZUluQnl0ZXMoKSk7
CiAgICAgfQogCiAgICAgdHJhbnNhY3Rpb24tPm5vdGlmeUN1cnNvcnNPZkNoYW5nZXMob2JqZWN0
U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJu
IElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxz
LCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CmluZGV4IGQ4NWIwMDE0OGEyYTVjMzA2MGJhNTBjMGUxMjIwNzVjNjM1YmJjNGYuLmMxYmQwNjcx
MjQzNDVjZDRkMWQxZjEwNGEwNDE0MGU0ZDc0OTUzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcApAQCAtNTUsNiArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIElE
QlNlcnZlciB7CiAKIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0V3JpdGVPcGVyYXRpb25D
b3N0ID0gNDsKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3Qg
PSAxMCAqIEtCOwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJ
REJLZXlEYXRhJiBrZXlEYXRhKQogewpAQCAtODgsMTAgKzg5LDIzIEBAIHN0YXRpYyBpbmxpbmUg
dWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4g
c2l6ZTsKIH0KIAorc3RhdGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlQYXRoLCBb
XShjb25zdCBTdHJpbmcmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2l6ZUluQnl0ZXMo
KTsKKyAgICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsKKyAgICAgICAgdWlu
dDY0X3Qgc2l6ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpCisgICAgICAg
ICAgICBzaXplICs9IHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHNpemU7Cisg
ICAgfSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElE
QkluZGV4SW5mbyYgaW5mbykKIHsKICAgICB1aW50NjRfdCBzaXplID0gNDsKICAgICBzaXplICs9
IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoaW5m
by5rZXlQYXRoKCkpOwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC05OSw5ICsxMTMsOCBAQCBz
dGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mIGluZm8pCiB7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6ZSArPSBpbmZvLm5h
bWUoKS5zaXplSW5CeXRlcygpOwotICAgIC8vIEZJWE1FOiBlc3RpbWF0ZSBrZXlQYXRoLgotICAg
IGZvciAoYXV0byYgaW5kZXhJbmZvIDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKQotICAgICAg
ICBzaXplICs9IGVzdGltYXRlU2l6ZShpbmRleEluZm8pOworICAgIGlmIChhdXRvIGtleVBhdGgg
PSBpbmZvLmtleVBhdGgoKSkKKyAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoKmtleVBhdGgp
OwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC0yMDcsNiArMjIwLDIyIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3RpCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92
ZShjYWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5j
cmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAg
IG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2lu
KCksIHRhc2tTaXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50
aWZpZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3Bh
Y2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0dWFsVGFza1Np
emUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5m
aW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNlVGFza3MuZW5kKCkpIHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAg
bV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgYWN0dWFs
VGFza1NpemUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0
ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJy
ZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAg
LTIxOSw3ICsyNDgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9w
ZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSB0cnVl
OwogICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlzIGlzIGFuIGV4aXN0
aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgogICAgICAgICAgICAgLy8gV2Ugc2V0IGEgc21hbGwgY29z
dCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmluaXRlIG51bWJlciBv
ZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlm
aWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CisgICAgICAgICAg
ICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdE9w
ZW5PcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2l6
ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdF0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogCkBAIC0yMzUsNyArMjY0LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1
cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFj
a2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjYWxs
YmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCBzaXplKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9p
ZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC0zNDgsNyArMzc5LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRp
ZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNr
aW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVs
bHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0
aW9ucyA9IGZhbHNlOwpAQCAtMzY0LDcgKzM5NCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZp
CiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwogICAg
ICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX25ld0Rh
dGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAgICAgfQogCiAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0ZWRWZXJzaW9uKSk7CkBA
IC00MDAsMTAgKzQyOSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xv
c2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRk
b3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAgICAgIG1f
bmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotICAgIH0K
IAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBv
cnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CkBAIC00MjIsOCArNDQ5LDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSgpCiB7CiAgICAgQVNT
RVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzRW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZVJlcGx5
UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKIH0KIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0
ZWRWZXJzaW9uKQpAQCAtNDU1LDggKzQ4MCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKICAgICAgICAgbV9j
dXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdXBkYXRlU3BhY2VV
c2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzcyA9IGZh
bHNlOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCkBAIC01MzcsMTQgKzU2
MCwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjphbGxDb25uZWN0aW9uc0FyZUNsb3NlZE9y
Q2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1aW50NjRfdCBn
ZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpCit1aW50NjRfdCBVbmlxdWVJREJEYXRh
YmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRJRCA9IDA7CiAgICAg
cmV0dXJuICsrY3VycmVudElEOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3Qg
dGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2Vk
Rm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVy
cm9yKCkpOwpAQCAtNTU1LDE2ICs1NzgsMTEgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6
OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHUKICAg
ICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1f
ZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAg
IGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgICAgIG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci0gICAgfQot
CiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVudGlmaWVyKTsKICAgICByZXR1cm4gaWRl
bnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3QgdGFza1NpemUp
Cit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtl
eURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSwg
eyB9KTsKQEAgLTU3NSwxMSArNTkzLDYgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywKICAgICBB
U1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgbV9r
ZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAg
ICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRp
bmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0K
LQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlk
ZW50aWZpZXI7CiB9CkBAIC03ODAsNyArNzkzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8K
ICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxl
YWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwpAQCAtNzkyLDE1ICs4MDUsMTYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGlkZW50aWZpZXIKIAogICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2ZSBp
bml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUKICAgICAvLyBzaXpl
IG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNraW5n
U3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAgIGF1dG8gZGF0YWJhc2VTaXplQmVmb3JlT3BlbiA9
IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAogICAgIElEQkRhdGFiYXNlSW5mbyBk
YXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFi
bGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAgYXV0byBhY3R1YWxU
YXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAwIDogZGVmYXVsdE9wZW5PcGVyYXRp
b25Db3N0OworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
bmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRlbnRpZmllcikpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNv
bnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUsIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUiKTsKQEAgLTgxMSw3ICs4MjUsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFT
U0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3Rv
cmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CisgICAgZmluaXNo
U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBhY3R1YWxUYXNrU2l6ZSk7CiAK
ICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODM2LDEwICs4NTAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFz
a1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAg
LTg0OSw5ICs4NjQsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsK
IAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmNyZWF0
ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CisgICAgYXV0byBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8p
KTsKIH0KIApAQCAtODYwLDEwICs4NzQsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYg
KGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKworICAgIElEQkVycm9yIGNyZWF0ZUVycm9yOworICAg
IGlmIChjcmVhdGVFcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4
aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFj
a0lkZW50aWZpZXIsIGNyZWF0ZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNr
KQpAQCAtOTM1LDcgKzk1Miw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVj
dFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90
IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9y
Q2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2Fs
bGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NDUsNiAr
OTYyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1
b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXEKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7
CiB9CiAKQEAgLTk1NCw5ICs5NzIsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0
U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3Rv
cmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPnJl
bmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVycm9yIGVycm9yOwogICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtOTY1LDEwICs5ODIsMTMg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKwor
ICAgIElEQkVycm9yIHJlbmFtZUVycm9yOworICAgIGlmIChyZW5hbWVFcnJvci5pc051bGwoKSkK
ICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50
aWZpZXIsIHJlbmFtZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJP
YmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQpAQCAt
MTAzMCw5ICsxMDUwLDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRh
c2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsK
ICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIApAQCAtMTA2Niw2ICsxMDg3LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICAgICAgb2JqZWN0U3RvcmVJbmZvLT5hZGRFeGlz
dGluZ0luZGV4KGluZm8pOwogICAgIH0KIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFj
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIApAQCAtMTE0Nyw3ICsxMTY5LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1l
SW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNh
bGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTE2Myw2ICsx
MTg1LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hl
Y2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5m
bygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIs
IG5ld05hbWUpKTsKIH0KIApAQCAtMTE3Miw5ICsxMTk1LDggQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSUQKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVJlbmFtZUluZGV4Iik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFj
a2luZ1N0b3JlLT5yZW5hbWVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOwogCi0gICAgSURCRXJy
b3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlm
aWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTExODMsNyArMTIwNSwxMCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4Iik7CiAK
LSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnNpemUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVF
cnJvcjsKKyAgICBpZiAocmVuYW1lRXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2Jq
ZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3Jl
KG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8p
OwogICAgICAgICBpZiAob2JqZWN0U3RvcmVJbmZvKSB7CkBAIC0xMTkzLDcgKzEyMTgsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgcGVyZm9ybUVy
cm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9y
Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCByZW5hbWVFcnJvcik7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNr
KQpAQCAtMTIxMyw5ICsxMjM4LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zCiAKIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tT
aXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewot
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92
ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNr
SUQpCiAgICAgICAgIHJldHVybjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQs
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApA
QCAtMTI5MSw4ICsxMzE3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRP
ckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5m
by0+YXV0b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlw
ZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtl
eUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRp
Zmllciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmpl
Y3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVk
REI6OktleVR5cGU6Ok51bWJlcikgeworICAgICAgICBhdXRvIHVwZGF0ZUVycm9yID0gbV9iYWNr
aW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAg
aWYgKCF1cGRhdGVFcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIGVycm9yID0gdXBkYXRlRXJy
b3I7CisgICAgfQogCiAgICAgZ2VuZXJhdGVkS2V5UmVzZXR0ZXIucmVsZWFzZSgpOwogICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCB1c2VkS2V5KSk7CkBAIC0xMzAzLDYgKzEzMzIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
RAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKKyAgICBmaW5pc2hT
cGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnNpemUoKSk7CiAgICAg
cGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHRL
ZXkpOwogfQogCkBAIC0yMDk3LDkgKzIxMjcsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
b3N0RGF0YWJhc2VUYXNrKENyb3NzVGhyZWFkVGFzayYmIHRhc2spCiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseShDcm9zc1RocmVhZFRhc2smJiB0YXNrKQog
ewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBt
X2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0KICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1
ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgbV9zZXJ2ZXItPnBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZXhl
Y3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSkpOwogfQpAQCAtMjE2NCw4ICsyMTkxLDkgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKIAogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdU
YXNrcy5jbGVhcigpOwotICAgIG1fc2VydmVyLT5yZXNldFNwYWNlVXNlZChtX2lkZW50aWZpZXIu
b3JpZ2luKCkpOworICAgIGZvciAoYXV0byBzaXplIDogbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRh
c2tzLnZhbHVlcygpKQorICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVz
ZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBzaXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNlVGFza3MuY2xlYXIoKTsKIAogICAgIC8vIEVycm9yIG91dCBhbGwgdHJhbnNhY3Rpb25zCiAg
ICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1faW5Qcm9ncmVzc1RyYW5z
YWN0aW9ucy5rZXlzKCkpKQpAQCAtMjI0MSwzMyArMjI2OSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9wdGlv
bmFsQ2FsbGJhY2tJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICBpZiAob3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpIHsKLSAgICAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyID0gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIudmFsdWUoKTsK
LSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmZp
bmQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmVuZCgpKSB7Ci0gICAgICAgICAgICBtX3NlcnZlci0+ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+
dmFsdWUpOwotICAgICAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MucmVtb3Zl
KGl0ZXJhdG9yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVpbnQ2NF90IGRhdGFiYXNlU2l6
ZSA9IG1fbmV3RGF0YWJhc2VTaXplOwotICAgIGlmIChkYXRhYmFzZVNpemUgIT0gbV9jdXJyZW50
RGF0YWJhc2VTaXplKSB7Ci0gICAgICAgIGlmIChkYXRhYmFzZVNpemUgPiBtX2N1cnJlbnREYXRh
YmFzZVNpemUpCi0gICAgICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBkYXRhYmFzZVNpemUgLSBtX2N1cnJlbnREYXRhYmFzZVNpemUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VTcGFjZVVzZWQobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBtX2N1cnJlbnREYXRhYmFzZVNpemUgLSBkYXRhYmFzZVNpemUp
OwotICAgICAgICBtX2N1cnJlbnREYXRhYmFzZVNpemUgPSBkYXRhYmFzZVNpemU7Ci0gICAgfQot
fQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKLSAgICB1cGRh
dGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgYXV0byBjYWxs
YmFjayA9IG1fZXJyb3JDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIEFT
U0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKICAgICBpZiAoY2Fs
bGJhY2spIHsKQEAgLTIyNzksOCArMjI4Miw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCS2V5RGF0
YSYgcmVzdWx0S2V5KQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRl
bnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0gbV9rZXlEYXRhQ2FsbGJhY2tzLnRha2Uo
Y2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2Vk
Rm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0yMzI1LDggKzIzMjYsNiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ291bnRDYWxsYmFjayh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdl
dEVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogewotICAgIHVwZGF0
ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBBU1NFUlQobV9l
cnJvckNhbGxiYWNrcy5jb250YWlucyhjYWxsYmFja0lkZW50aWZpZXIpKTsKICAgICBBU1NFUlQo
bV9jYWxsYmFja1F1ZXVlLmxhc3QoKSA9PSBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIG1fY2Fs
bGJhY2tRdWV1ZS5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDUzYjIx
ZGZlNGQyMWRhNTVmZmNhNmYwNmZiMDZiMjI3NWMxZWNmOGQuLjEwNGUyZjdhYjFmYWY2ZTRkZWRi
ZjIyMDU0NjkxMzJhNTY5NjBjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xMTYsOCAr
MTE2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGU7IH0KIAotICAgIHVpbnQ2NF90
IHNwYWNlVXNlZCgpIGNvbnN0OwotCiAgICAgdm9pZCBmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMo
KTsKIAogcHJpdmF0ZToKQEAgLTE2MCw3ICsxNTgsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRGF0
YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcik7
CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJU
cmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4OCw3ICsxODYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8g
TWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWlu
dDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgZGlkT3BlbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2
NF90IGFjdHVhbFRhc2tTaXplLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZv
aWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2b2lk
IGRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2
b2lkIGRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG5ld05hbWUpOwpAQCAtMjExLDggKzIwOSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBkaWRQZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQg
ZGlkU2h1dGRvd25Gb3JDbG9zZSgpOwogCi0gICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKEVycm9yQ2FsbGJhY2smJiwgdWludDY0X3QgdGFza1NpemUgPSAwKTsKLSAgICB1aW50
NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYsIHVpbnQ2NF90
IHRhc2tTaXplID0gMCk7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVy
cm9yQ2FsbGJhY2smJik7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtl
eURhdGFDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
R2V0QWxsUmVzdWx0c0NhbGxiYWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihHZXRSZXN1bHRDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoQ291bnRDYWxsYmFjayYmKTsKQEAgLTI0OSw3ICsyNDcsMTAgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgcmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwotICAgIHZvaWQg
dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9wdGlvbmFsQ2FsbGJh
Y2tJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIHN0YXJ0U3BhY2VJbmNyZWFz
ZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpOworICAgIHZvaWQg
ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0
dWFsVGFza1NpemUpOworCisgICAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJh
Y2tJZGVudGlmaWVyKCk7CiAKICAgICBSZWY8SURCU2VydmVyPiBtX3NlcnZlcjsKICAgICBJREJE
YXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwpAQCAtMzAyLDcgKzMwMyw3IEBAIHByaXZh
dGU6CiAKICAgICBIYXNoU2V0PElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRj
aGVzOwogCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5j
cmVhc2luZ1Rhc2tzOworICAgIEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdT
cGFjZUluY3JlYXNlVGFza3M7CiAgICAgdWludDY0X3QgbV9jdXJyZW50RGF0YWJhc2VTaXplIHsg
MCB9OwogICAgIHVpbnQ2NF90IG1fbmV3RGF0YWJhc2VTaXplIHsgMCB9OwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCmlu
ZGV4IDY1MmQwYTgxN2Y1YzUzYzcwMzgzZjAxNGUxZWViYTE4MGEyNjhkNGMuLjcxMTg0Y2Y3ODJi
YWUyNDU5NjAxY2JiYmQ4N2FkMTdjM2JkMDg4MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcApAQCAtMzIsMTUgKzMyLDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRXJyb3I6OklEQkVycm9yKE9wdGlvbmFs
PEV4Y2VwdGlvbkNvZGU+IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0lEQkVycm9yOjpJ
REJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIHVpbnQ2NF90IHNpemUpCiAgICAgOiBtX2NvZGUoY29kZSkKICAgICAsIG1fbWVzc2FnZSht
ZXNzYWdlKQorICAgICwgbV9zaXplKHNpemUpCiB7CiB9CiAKIElEQkVycm9yIElEQkVycm9yOjpp
c29sYXRlZENvcHkoKSBjb25zdAogewotICAgIHJldHVybiBJREJFcnJvciB7IG1fY29kZSwgbV9t
ZXNzYWdlLmlzb2xhdGVkQ29weSgpIH07CisgICAgcmV0dXJuIElEQkVycm9yIHsgbV9jb2RlLCBt
X21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCksIG1fc2l6ZSB9OwogfQogCiBTdHJpbmcgSURCRXJyb3I6
Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRXJyb3IuaAppbmRleCAzYTk1YmIzODA1MGRlYWIyOGMyZGMxYTdhZTY1ZmUyN2Y2
YWY4ODU2Li5mMGU1NzUxZmM0ODRhMDE2M2RiOGQ5OTEyMWY3Mjg4MWU2YWQxOWFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaApA
QCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkVycm9yIHsK
IHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25hbDxF
eGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0geyB9
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRp
b25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0geyB9LCB1aW50
NjRfdCBzaXplID0gMCk7CiAKICAgICBzdGF0aWMgSURCRXJyb3IgdXNlckRlbGV0ZUVycm9yKCkK
ICAgICB7CkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbWVzc2FnZSgpIGNv
bnN0OwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlOyB9CisgICAg
dWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgSURCRXJyb3Ig
aXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKQEAgLTYzLDYgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBtX2NvZGU7CiAgICAgU3RyaW5nIG1fbWVz
c2FnZTsKKyAgICB1aW50NjRfdCBtX3NpemU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5k
ZXggNzY3YWQyZWFmNGFjY2I4MzE5MDQ0MjI4OTcwNjk0OWI3MGIzNDMwZS4uODMxMzhiMGI3M2Iy
ODQ2ZDk5YjJiMDU2MTBmMmEyMTNmMGJmNDYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC04NCw4ICs4NCw3IEBAIHZvaWQgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2Vy
KQogICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNh
Z2UoKTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNob3VsZERlcXVldWVG
aXJzdFBlbmRpbmdSZXF1ZXN0OjpObyk7CisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
eyB9KTsKICAgICB9KTsKIH0KIApAQCAtMTE5LDcgKzExOCw3IEBAIHZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVz
dHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOworICAgICAgICAg
ICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAgICAgICAgfSk7CiAg
ICAgfQogfQpAQCAtMTI3LDcgKzEyNiw3IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVt
b3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7CiAgICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShj
YWxsYmFjaykgfSk7CisgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5j
cmVhc2UsIFdURk1vdmUoY2FsbGJhY2spfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTEzOSwxMyArMTM4LDE3IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNl
KHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFjayYmCiAgICAgaW5pdGlhbGl6
ZVVzZXJzSWZOZWVkZWQoKTsKIAogICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vy
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJ
bmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7CisgICAgICAgIG1fcGVuZGluZ1JlcXVlc3Rz
LmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spLCBQZW5kaW5nUmVxdWVz
dDo6U3RhdGU6OlVuaGFuZGxlZH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KHNob3VsZEFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKSkgewotICAgICAgICBtX3BlbmRp
bmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSB9KTsK
LSAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOworICAgICAgICBtX3BlbmRp
bmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgUGVu
ZGluZ1JlcXVlc3Q6OlN0YXRlOjpVc2VyU3BhY2VVc2VkUmVzZXQgfSk7CisKKyAgICAgICAgLy8g
VHJ5IHByb2Nlc3NpbmcgcmVxdWVzdCBhZ2FpbiBhZnRlciBtYWtpbmcgc3VyZSB1c2VyJ3MgdXNh
Z2UgaXMgYWNjdXJhdGUuCisgICAgICAgIGZvciAoYXV0byB1c2VyIDogY29weVRvVmVjdG9yKG1f
dXNlcnMpKQorICAgICAgICAgICAgdXNlci0+cmVzZXRTcGFjZVVzZWQoU3RvcmFnZVF1b3RhVXNl
cjo6Q29uZGl0aW9uOjpJbmRleGVkREJPbmx5KTsKKwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xNjYsMTEgKzE2OSwxMSBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1v
cmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlKQogICAgICAgICBSRUxFQVNFX0xPRyhTdG9y
YWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UgcmVjZWl2ZWQg
cmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6IDApOwogCiAg
ICAgICAgIG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlID0gZmFsc2U7Ci0gICAg
ICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEsIFNob3VsZERlcXVldWVGaXJzdFBl
bmRpbmdSZXF1ZXN0OjpZZXMpOworICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1
b3RhKTsKICAgICB9KTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSwgU2hvdWxkRGVxdWV1ZUZp
cnN0UGVuZGluZ1JlcXVlc3Qgc2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3QpCit2b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWlu
dDY0X3Q+IG5ld1F1b3RhKQogewogICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTE4NCw3ICsxODcsMTIgQEAgdm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90
YSwgU2gKICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVl
c3QgPT0gU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6OlllcykgeworICAgIGlmICgh
bV9oYXNTdGFydGVkSGFuZGxpbmdSZXF1ZXN0cyAmJiAhbV9xdW90YSkgeworICAgICAgICB1cGRh
dGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7CisgICAgICAgIG1faGFzU3RhcnRlZEhhbmRsaW5n
UmVxdWVzdHMgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5maXJz
dCgpLnN0YXRlID09IFBlbmRpbmdSZXF1ZXN0OjpTdGF0ZTo6U3BhY2VJbmNyZWFzZVJlcXVlc3Rl
ZCkgewogICAgICAgICBhdXRvIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3Qo
KTsKICAgICAgICAgYm9vbCBzaG91bGRBbGxvd1JlcXVlc3QgPSAhc2hvdWxkQXNrRm9yTW9yZVNw
YWNlKHJlcXVlc3Quc3BhY2VJbmNyZWFzZSk7CiAKQEAgLTE5Nyw5ICsyMDUsMTggQEAgdm9pZCBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2
NF90PiBuZXdRdW90YSwgU2gKICAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVl
c3RzLmZpcnN0KCk7CiAKICAgICAgICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0
LnNwYWNlSW5jcmVhc2UpKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0ZSA9PSBQZW5k
aW5nUmVxdWVzdDo6U3RhdGU6OlVuaGFuZGxlZCkgeworICAgICAgICAgICAgICAgIC8vIFRyeSBw
cm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0ZXIgbWFraW5nIHN1cmUgdXNlcidzIHVzYWdlIGlz
IGFjY3VyYXRlLgorICAgICAgICAgICAgICAgIHJlcXVlc3Quc3RhdGUgPSBQZW5kaW5nUmVxdWVz
dDo6U3RhdGU6OlVzZXJTcGFjZVVzZWRSZXNldDsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8g
dXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKKyAgICAgICAgICAgICAgICAgICAgdXNlci0+
cmVzZXRTcGFjZVVzZWQoU3RvcmFnZVF1b3RhVXNlcjo6Q29uZGl0aW9uOjpJbmRleGVkREJPbmx5
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJlcXVlc3Quc3RhdGUgPSBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVhc2VSZXF1
ZXN0ZWQ7CiAgICAgICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlID0gMDsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ1JlcXVlc3RzKQotICAgICAgICAgICAg
ICAgIHNwYWNlSW5jcmVhc2UgKz0gcmVxdWVzdC5zcGFjZUluY3JlYXNlOworICAgICAgICAgICAg
Zm9yIChhdXRvJiBwZW5kaW5nUmVxdWVzdCA6IG1fcGVuZGluZ1JlcXVlc3RzKQorICAgICAgICAg
ICAgICAgIHNwYWNlSW5jcmVhc2UgKz0gcGVuZGluZ1JlcXVlc3Quc3BhY2VJbmNyZWFzZTsKICAg
ICAgICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1h
bmFnZXIuaAppbmRleCA5ZjY0NjMzZWQ2NmNjMTJhOTI4M2MwODkxYmQyNTVhZTkzMDQyYWI3Li5k
ODM4Mjg4ZTUxMDc3ODVmNTMwYTdjMzg0NzM5MDkxZTUzZGQzMTdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgYXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJik7CiAK
ICAgICBlbnVtIGNsYXNzIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHsgTm8sIFll
cyB9OwotICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4s
IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0KTsKKyAgICB2b2lkIHByb2Nlc3NQZW5k
aW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+KTsKIAogICAgIHVpbnQ2NF90IG1fcXVvdGEg
eyAwIH07CiAKQEAgLTgwLDExICs4MCwxNSBAQCBwcml2YXRlOgogCiAgICAgZW51bSBjbGFzcyBX
aGVuSW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07CiAgICAgSGFzaE1hcDxTdG9yYWdlUXVv
dGFVc2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVz
ZXJzOwotICAgIEhhc2hTZXQ8Y29uc3QgU3RvcmFnZVF1b3RhVXNlcio+IG1fdXNlcnM7CisgICAg
SGFzaFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV91c2VyczsKKworICAgIGJvb2wgbV9oYXNTdGFy
dGVkSGFuZGxpbmdSZXF1ZXN0cyB7IGZhbHNlIH07CiAKICAgICBzdHJ1Y3QgUGVuZGluZ1JlcXVl
c3QgeworICAgICAgICBlbnVtIGNsYXNzIFN0YXRlIHsgVW5oYW5kbGVkLCBVc2VyU3BhY2VVc2Vk
UmVzZXQsIFNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQgfTsKICAgICAgICAgdWludDY0X3Qgc3BhY2VJ
bmNyZWFzZTsKICAgICAgICAgUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrOworICAgICAgICBTdGF0
ZSBzdGF0ZTsKICAgICB9OwogICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3BlbmRpbmdSZXF1
ZXN0czsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YVVzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmluZGV4
IGI0MjMwYzVlMTJkMDk0ZDY5OWUxZTI5OTc5MTY0YWY1YjdjODM4ZTAuLmRmZDExMzVlOGJhYmY0
MzJmZDM5Y2MzNGM3OGMxMjAwNjVkNWMzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhVXNlci5oCkBAIC0zNCw2ICszNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5T
dG9yYWdlUXVvdGFVc2VyKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBzcGFj
ZVVzZWQoKSBjb25zdCA9IDA7CisgICAgZW51bSBjbGFzcyBDb25kaXRpb24geyBOb25lLCBJbmRl
eGVkREJPbmx5IH07CisgICAgdmlydHVhbCB2b2lkIHJlc2V0U3BhY2VVc2VkKENvbmRpdGlvbikg
eyByZXR1cm47IH0KICAgICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlcy5jcHAKaW5kZXggMjM4Nzk0MTZmZmRjM2QyMTMwNjdkMWUyNzk1MTdl
ZTE0Y2JiNWE2Yy4uMTMyNmFkNWUyMmUxYTFjY2Q3MTc5NDdmMzU0MTc5OTg5MTAxNjNlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmVDYWNoZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcApAQCAtNjA1LDggKzYwNSwxMSBAQCB2b2lkIENh
Y2hlczo6cmVtb3ZlQ2FjaGVFbnRyeShjb25zdCBOZXR3b3JrQ2FjaGU6OktleSYga2V5KQogICAg
IG1fc3RvcmFnZS0+cmVtb3ZlKGtleSk7CiB9CiAKLXZvaWQgQ2FjaGVzOjpyZXNldFNwYWNlVXNl
ZCgpCit2b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsK
KyAgICBpZiAoY29uZGl0aW9uID09IENvbmRpdGlvbjo6SW5kZXhlZERCT25seSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgbV9zaXplID0gMDsKICAgICBpZiAobV9xdW90YU1hbmFnZXIpIHsKICAg
ICAgICAgbV9xdW90YU1hbmFnZXItPnJlbW92ZVVzZXIoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGVzLmgKaW5kZXggM2M0NTFhNzIzZTFlOTJmNTU5ZjZmYmNlZjdmMWYzMzExODkwMmZhZS4u
OTk1MmExZjExOTFhYzE5ZGQxMzQ3NmIzOGQ5ZWJiNGIzYzJlMGIyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIo
V1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJNZW1vcnlS
ZXByZXNlbnRhdGlvbigpOwotICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoKTsKKyAgICB2b2lkIHJl
c2V0U3BhY2VVc2VkKENvbmRpdGlvbiBjb25kaXRpb24gPSBDb25kaXRpb246Ok5vbmUpIGZpbmFs
OwogCiAgICAgdWludDY0X3Qgc3RvcmFnZVNpemUoKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379757</attachid>
            <date>2019-09-27 13:23:56 -0700</date>
            <delta_ts>2019-09-27 18:31:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190927132356.patch</filename>
            <type>text/plain</type>
            <size>50121</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc3OTllZTlhYjAxOTlk
MzJmNTAwMjEyZmNhOWJjODhhZDJhZDdiNS4uYzRjZmJlYTg4MTE1ZTdmODliYzUyNTY3YmEzMzAy
YzFmMTBmN2I2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE5LTA5LTI3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERCIG9ubHkgd2hlbiBlc3RpbWF0
ZWQgaW5jcmVhc2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2UgcmVhZCBzaXpl
IG9mIEluZGV4ZWREQiBkYXRhYmFzZSBmaWxlcyB3aGVuIGEgZGF0YWJhc2Ugb3BlcmF0aW9uIGlz
IGNvbXBsZXRlZC4gVGhpcyBmaWxlIHN5c3RlbQorICAgICAgICBvcGVyYXRpb24gaXMgc2xvdy4K
KyAgICAgICAgCisgICAgICAgIEFuIGVmZmljaWVudCBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRl
IHRoZSBzcGFjZSBhdmFpbGFibGUsIGVzdGltYXRlIHNwYWNlIGluY3JlYXNlIGZvciBlYWNoIG9w
ZWFydGlvbiwgYW5kIGdldAorICAgICAgICB0aGUgYWNjdXJhdGUgZmlsZSBzaXplIG9ubHkgd2hl
biB0aGUgYWNjdW11bGF0ZWQgZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNl
IGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc2l6ZSBlc3RpbWF0
ZSBmb3IgSURCIHRhc2tzIG1vcmUgYWNjdXJhdGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyB0ZXN0LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2Vy
OjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVu
Y2hlY2tlZFB1dEluZGV4S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6ZXN0aW1hdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1
cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVs
ZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpv
cGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVy
UXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4
QWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVu
YW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cG9zdERhdGFiYXNlVGFza1JlcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFj
ZVVzZWRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjpJREJFcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkVycm9yOjpJREJFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6c2l6
ZSBjb25zdCk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVz
dHMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1
b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQpOgorCiAyMDE5LTA5LTI3ICBEZXZpbiBSb3Vzc28gIDxk
cm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBGbGFreSBUZXN0OiBpbnNwZWN0b3IvY2FudmFz
L3VwZGF0ZVNoYWRlci5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM4OTI3NzgwODlhYTI2ZGNkMWU3ZWIyNzY0
ODRiOGIyYzNhZGJkM2QuLmUyYTAxZTRlZDdiMWM1OWRhZTQ1ZjA3NzgxMzY4OWU5MDk4NGMzZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDktMjcgIFNpaHVpIExpdSAgPHNpaHVp
X2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlIGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERC
IG9ubHkgd2hlbiBlc3RpbWF0ZWQgaW5jcmVhc2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxh
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5
NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6CisKIDIw
MTktMDktMjcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbaU9TXTogV2hlbiBpbnNlcnRpbmcgYSBwaG90byBhbmQgdGhlbiBpbnNlcnRpbmcg
YXV0by1jb3JyZWN0ZWQgdGV4dCwgdGhlIHBob3RvIGlzIHJlbW92ZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXgg
YjU5ZWQ3ZjIyNDQ3MDQxNDdmZDE5MGExZDE3ZmE4OTRkMzlmY2IwYy4uMTVlYjkzZDFlZWRmNmJj
MGNlY2FhYjE5ZWUyODA1ZjllNzUwOTZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTcwOSw3ICs3MDksNyBA
QCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcigpCiAgICAgICAgIG1fbWFuYWdlci0+
cmVtb3ZlVXNlcigqdGhpcyk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0
U3BhY2VVc2VkKCkKK3ZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKENv
bmRpdGlvbikKIHsKICAgICBtX3NwYWNlVXNlZCA9IDA7CiAgICAgbV9lc3RpbWF0ZWRTcGFjZUlu
Y3JlYXNlID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuaAppbmRleCAxOWU2OTYyZWQxOWFiYTU0MDMyY2EwNDQ3MjRlZDExMTUz
NTRhNWFmLi43NmE1MjNkNjYyYjk5ZWQ1NDAzYTZhMTVkZTlhNzQxMmQ1NDQyZDc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZVF1b3RhTWFuYWdl
ciogbWFuYWdlcigpIHsgcmV0dXJuIG1fbWFuYWdlci5nZXQoKTsgfQogCiAgICAgICAgIHZvaWQg
c2V0U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkgeyBtX3NwYWNlVXNlZCA9IHNwYWNlVXNl
ZDsgfQotICAgICAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CisgICAgICAgIHZvaWQgcmVzZXRT
cGFjZVVzZWQoQ29uZGl0aW9uIGNvbmRpdGlvbiA9IENvbmRpdGlvbjo6Tm9uZSkgZmluYWw7CiAK
ICAgICAgICAgdm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBpbmNyZWFz
ZSkgeyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgKz0gaW5jcmVhc2U7IH0KICAgICAgICAgdm9p
ZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZCh1aW50NjRfdCBkZWNyZWFzZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMjc5YjMxNTkxNmJkMzlkOGQ0YTg2MDZlNzA1
ZGI3ZTU1ZDE5YWU3MC4uOTFkMDIxYTI2NWUxMGQ0NWFiNzZlNGEyY2YyOTA3YzQxNzQyMzg0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk4NCw3ICs5ODQsOCBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdAogCiAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5n
T2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHVpbnQ2
NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCkgKyBrZXlQYXRoQmxv
Yi0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXpl
SW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVP
YmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQpAQCAtMTEwNSw5ICsxMTA2LDEz
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBTdHJp
bmcgb2xkTmFtZTsKKyAgICBpZiAoYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUlu
Zm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcikpCisg
ICAgICAgIG9sZE5hbWUgPSBvYmplY3RTdG9yZUluZm8tPm5hbWUoKTsKICAgICBtX2RhdGFiYXNl
SW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsK
IAotICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0g
bmV3TmFtZS5zaXplSW5CeXRlcygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygpID8gbmV3TmFtZS5z
aXplSW5CeXRlcygpIC0gb2xkTmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAgICByZXR1cm4gSURC
RXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
RCkKQEAgLTExODQsNiArMTE4OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAo
JWkpIC0gJXMiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9z
IH07CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJ
bkJ5dGVzKCkgKyBrZXlQYXRoQmxvYi0+c2l6ZSgpOwogCiAgICAgLy8gV3JpdGUgaW5kZXggcmVj
b3JkcyBmb3IgYW55IHJlY29yZHMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoaXMgb2JqZWN0IHN0
b3JlLgogCkBAIC0xMjE0LDYgKzEyMjAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNl
ICs9IGVycm9yLnNpemUoKTsKIAogICAgICAgICBpZiAoIWN1cnNvci0+YWR2YW5jZSgxKSkgewog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZHZhbmNpbmcgY3Vyc29yIHdoaWxlIGluZGV4
aW5nIGV4aXN0aW5nIHJlY29yZHMgZm9yIG5ldyBpbmRleC4iKTsKQEAgLTEyMzEsNyArMTIzOCw3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKICAg
ICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKIAotICAgIHJldHVybiBJREJF
cnJvciB7IH07CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJ
bmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tl
ZEhhc0luZGV4UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCS2V5RGF0
YSYgaW5kZXhLZXksIGJvb2wmIGhhc1JlY29yZCkKQEAgLTEyOTEsNiArMTI5OCw3IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURC
SW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1aW50NjRfdCBzaXpl
SW5jcmVhc2UgPSAwOwogICAgIGZvciAoYXV0byYgaW5kZXhLZXkgOiBpbmRleEtleXMpIHsKICAg
ICAgICAgaWYgKCFpbmRleEtleS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTEyOTksOSArMTMwNywxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hl
Y2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgYwogICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHV0IGluZGV4IHJlY29yZCBmb3IgbmV3bHkgY3JlYXRlZCBp
bmRleCIpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIHNp
emVJbmNyZWFzZSArPSBlcnJvci5zaXplKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9y
IHsgfTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3Jl
YXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0
SW5kZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0
IFdlYkNvcmU6OklEQktleURhdGEmIGtleVZhbHVlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRh
JiBpbmRleEtleSwgaW50NjRfdCByZWNvcmRJRCkKQEAgLTEzMzQsNyArMTM0Myw4IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW50NjRf
dCBvYmplY3RTdG9yZUlELCBpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSURCRXJy
b3IgeyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZGV4S2V5QnVmZmVyLT5zaXpl
KCkgKyB2YWx1ZUJ1ZmZlci0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVs
bG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogCkBAIC0xNDE5LDkgKzE0MjksMTEgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgfQogICAgIH0KIAorICAgIGF1dG8gb2xk
TmFtZSA9IGluZGV4SW5mby0+bmFtZSgpOwogICAgIGluZGV4SW5mby0+cmVuYW1lKG5ld05hbWUp
OwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2Ug
PSBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1l
LnNpemVJbkJ5dGVzKCkgLSBvbGROYW1lLnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBJ
REJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBrZXlFeGlzdHMpCkBA
IC0xNjg4LDYgKzE3MDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogCiAgICAgSURCRXJy
b3IgZXJyb3I7CiAgICAgYm9vbCBhbnlSZWNvcmRzU3VjY2VlZGVkID0gZmFsc2U7CisgICAgdWlu
dDY0X3Qgc2l6ZUluY3JlYXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogaW5mby5pbmRl
eE1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5OwogICAgICAgICBn
ZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRl
KCksIGluZGV4LCBqc1ZhbHVlLCBpbmRleEtleSwgaW5mby5rZXlQYXRoKCksIGtleSk7CkBAIC0x
Njk5LDYgKzE3MTIsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgICAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgc2l6ZUluY3JlYXNl
ICs9IGVycm9yLnNpemUoKTsKICAgICAgICAgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IHRydWU7CiAg
ICAgfQogCkBAIC0xNzE2LDcgKzE3MzAsMTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBlcnJvcjsKKyAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6
Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5m
bywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAt
MTc1Nyw2ICsxNzc0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNv
cmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICByZWNv
cmRJRCA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0KKyAgICB1aW50NjRf
dCBzaXplSW5jcmVhc2UgPSBrZXlCdWZmZXItPnNpemUoKSArIHZhbHVlLmRhdGEoKS5kYXRhKCkt
PnNpemUoKTsKIAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3Jk
KG9iamVjdFN0b3JlSW5mbywga2V5RGF0YSwgdmFsdWUuZGF0YSgpLCByZWNvcmRJRCk7CiAKQEAg
LTE3NzIsNiArMTc5MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICAgICAgcmV0
dXJuIGVycm9yOwogICAgIH0KKyAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iuc2l6ZSgpOwogCiAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzID0gdmFsdWUuYmxvYlVSTHMoKTsKICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVzID0gdmFsdWUuYmxvYkZpbGVQYXRocygp
OwpAQCAtMTc4Nyw2ICsxODA2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjph
ZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3Jk
IEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIl9zIH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
KyAgICAgICAgc2l6ZUluY3JlYXNlICs9IHVybC5zaXplSW5CeXRlcygpOwogICAgICAgICBpbnQ2
NF90IHBvdGVudGlhbEZpbGVOYW1lSW50ZWdlciA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJ
RCgpOwogCiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxv
YlVSTCwgbm90aGluZyBsZWZ0IHRvIGRvLgpAQCAtMTgyMiwxMSArMTg0MiwxMiBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aQogICAgICAgICB9CiAKICAgICAgICAgdHJhbnNhY3Rpb24tPmFkZEJs
b2JGaWxlKGJsb2JGaWxlc1tpXSwgc3RvcmVkRmlsZW5hbWUpOworICAgICAgICBzaXplSW5jcmVh
c2UgKz0gKHVybC5zaXplSW5CeXRlcygpICsgc3RvcmVkRmlsZW5hbWUuc2l6ZUluQnl0ZXMoKSk7
CiAgICAgfQogCiAgICAgdHJhbnNhY3Rpb24tPm5vdGlmeUN1cnNvcnNPZkNoYW5nZXMob2JqZWN0
U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJu
IElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxz
LCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CmluZGV4IGQ4NWIwMDE0OGEyYTVjMzA2MGJhNTBjMGUxMjIwNzVjNjM1YmJjNGYuLmMxYmQwNjcx
MjQzNDVjZDRkMWQxZjEwNGEwNDE0MGU0ZDc0OTUzMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcApAQCAtNTUsNiArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIElE
QlNlcnZlciB7CiAKIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0V3JpdGVPcGVyYXRpb25D
b3N0ID0gNDsKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3Qg
PSAxMCAqIEtCOwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJ
REJLZXlEYXRhJiBrZXlEYXRhKQogewpAQCAtODgsMTAgKzg5LDIzIEBAIHN0YXRpYyBpbmxpbmUg
dWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4g
c2l6ZTsKIH0KIAorc3RhdGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlQYXRoLCBb
XShjb25zdCBTdHJpbmcmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2l6ZUluQnl0ZXMo
KTsKKyAgICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsKKyAgICAgICAgdWlu
dDY0X3Qgc2l6ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpCisgICAgICAg
ICAgICBzaXplICs9IHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHNpemU7Cisg
ICAgfSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElE
QkluZGV4SW5mbyYgaW5mbykKIHsKICAgICB1aW50NjRfdCBzaXplID0gNDsKICAgICBzaXplICs9
IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoaW5m
by5rZXlQYXRoKCkpOwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC05OSw5ICsxMTMsOCBAQCBz
dGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mIGluZm8pCiB7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6ZSArPSBpbmZvLm5h
bWUoKS5zaXplSW5CeXRlcygpOwotICAgIC8vIEZJWE1FOiBlc3RpbWF0ZSBrZXlQYXRoLgotICAg
IGZvciAoYXV0byYgaW5kZXhJbmZvIDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKQotICAgICAg
ICBzaXplICs9IGVzdGltYXRlU2l6ZShpbmRleEluZm8pOworICAgIGlmIChhdXRvIGtleVBhdGgg
PSBpbmZvLmtleVBhdGgoKSkKKyAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoKmtleVBhdGgp
OwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC0yMDcsNiArMjIwLDIyIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3RpCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92
ZShjYWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5j
cmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAg
IG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2lu
KCksIHRhc2tTaXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50
aWZpZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3Bh
Y2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0dWFsVGFza1Np
emUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5m
aW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNlVGFza3MuZW5kKCkpIHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAg
bV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgYWN0dWFs
VGFza1NpemUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0
ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJy
ZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAg
LTIxOSw3ICsyNDgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9w
ZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSB0cnVl
OwogICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlzIGlzIGFuIGV4aXN0
aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgogICAgICAgICAgICAgLy8gV2Ugc2V0IGEgc21hbGwgY29z
dCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmluaXRlIG51bWJlciBv
ZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlm
aWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CisgICAgICAgICAg
ICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdE9w
ZW5PcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2l6
ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdF0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAg
ICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogCkBAIC0yMzUsNyArMjY0LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1
cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVj
aXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFj
a2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjYWxs
YmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCBzaXplKTsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9p
ZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9CkBAIC0zNDgsNyArMzc5LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRp
ZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNr
aW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVs
bHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0
aW9ucyA9IGZhbHNlOwpAQCAtMzY0LDcgKzM5NCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZp
CiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwogICAg
ICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX25ld0Rh
dGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAgICAgfQogCiAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0ZWRWZXJzaW9uKSk7CkBA
IC00MDAsMTAgKzQyOSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xv
c2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRk
b3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAgICAgIG1f
bmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotICAgIH0K
IAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBv
cnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CkBAIC00MjIsOCArNDQ5LDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSgpCiB7CiAgICAgQVNT
RVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzRW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZVJlcGx5
UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKIH0KIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0
ZWRWZXJzaW9uKQpAQCAtNDU1LDggKzQ4MCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKICAgICAgICAgbV9j
dXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdXBkYXRlU3BhY2VV
c2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzcyA9IGZh
bHNlOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCkBAIC01MzcsMTQgKzU2
MCwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjphbGxDb25uZWN0aW9uc0FyZUNsb3NlZE9y
Q2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1aW50NjRfdCBn
ZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpCit1aW50NjRfdCBVbmlxdWVJREJEYXRh
YmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRJRCA9IDA7CiAgICAg
cmV0dXJuICsrY3VycmVudElEOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3Qg
dGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2Vk
Rm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVy
cm9yKCkpOwpAQCAtNTU1LDE2ICs1NzgsMTEgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6
OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHUKICAg
ICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1f
ZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAg
IGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFj
ZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgICAgIG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci0gICAgfQot
CiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVudGlmaWVyKTsKICAgICByZXR1cm4gaWRl
bnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3QgdGFza1NpemUp
Cit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtl
eURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSwg
eyB9KTsKQEAgLTU3NSwxMSArNTkzLDYgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywKICAgICBB
U1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgbV9r
ZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAg
ICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRp
bmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0K
LQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlk
ZW50aWZpZXI7CiB9CkBAIC03ODAsNyArNzkzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8K
ICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxl
YWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwpAQCAtNzkyLDE1ICs4MDUsMTYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGlkZW50aWZpZXIKIAogICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2ZSBp
bml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUKICAgICAvLyBzaXpl
IG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNraW5n
U3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAgIGF1dG8gZGF0YWJhc2VTaXplQmVmb3JlT3BlbiA9
IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAogICAgIElEQkRhdGFiYXNlSW5mbyBk
YXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFi
bGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAgYXV0byBhY3R1YWxU
YXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAwIDogZGVmYXVsdE9wZW5PcGVyYXRp
b25Db3N0OworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJ
bmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRlbnRpZmllcikpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNv
bnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUsIHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUiKTsKQEAgLTgxMSw3ICs4MjUsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFT
U0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3Rv
cmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CisgICAgZmluaXNo
U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBhY3R1YWxUYXNrU2l6ZSk7CiAK
ICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
ODM2LDEwICs4NTAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFz
a1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lE
LCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxs
YmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAg
LTg0OSw5ICs4NjQsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsK
IAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmNyZWF0
ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CisgICAgYXV0byBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8p
KTsKIH0KIApAQCAtODYwLDEwICs4NzQsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYg
KGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKworICAgIElEQkVycm9yIGNyZWF0ZUVycm9yOworICAg
IGlmIChjcmVhdGVFcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4
aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFj
a0lkZW50aWZpZXIsIGNyZWF0ZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNr
KQpAQCAtOTM1LDcgKzk1Miw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVj
dFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90
IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9y
Q2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2Fs
bGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2
NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NDUsNiAr
OTYyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1
b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXEKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7
CiB9CiAKQEAgLTk1NCw5ICs5NzIsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0
U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3Rv
cmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPnJl
bmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVycm9yIGVycm9yOwogICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtOTY1LDEwICs5ODIsMTMg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKwor
ICAgIElEQkVycm9yIHJlbmFtZUVycm9yOworICAgIGlmIChyZW5hbWVFcnJvci5pc051bGwoKSkK
ICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50
aWZpZXIsIHJlbmFtZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJP
YmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQpAQCAt
MTAzMCw5ICsxMDUwLDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXpl
LCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRh
c2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJl
dHVybjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsK
ICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIApAQCAtMTA2Niw2ICsxMDg3LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICAgICAgb2JqZWN0U3RvcmVJbmZvLT5hZGRFeGlz
dGluZ0luZGV4KGluZm8pOwogICAgIH0KIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFj
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIApAQCAtMTE0Nyw3ICsxMTY5LDcgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1l
SW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNh
bGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTE2Myw2ICsx
MTg1LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hl
Y2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAg
IHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5m
bygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIs
IG5ld05hbWUpKTsKIH0KIApAQCAtMTE3Miw5ICsxMTk1LDggQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSUQKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVJlbmFtZUluZGV4Iik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFj
a2luZ1N0b3JlLT5yZW5hbWVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOwogCi0gICAgSURCRXJy
b3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlm
aWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTExODMsNyArMTIwNSwxMCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4Iik7CiAK
LSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnNpemUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVF
cnJvcjsKKyAgICBpZiAocmVuYW1lRXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2Jq
ZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3Jl
KG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8p
OwogICAgICAgICBpZiAob2JqZWN0U3RvcmVJbmZvKSB7CkBAIC0xMTkzLDcgKzEyMTgsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgcGVyZm9ybUVy
cm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9y
Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCByZW5hbWVFcnJvcik7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNr
KQpAQCAtMTIxMyw5ICsxMjM4LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zCiAKIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tT
aXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewot
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92
ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNr
SUQpCiAgICAgICAgIHJldHVybjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQs
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApA
QCAtMTI5MSw4ICsxMzE3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRP
ckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5m
by0+YXV0b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlw
ZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtl
eUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRp
Zmllciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmpl
Y3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVk
REI6OktleVR5cGU6Ok51bWJlcikgeworICAgICAgICBhdXRvIHVwZGF0ZUVycm9yID0gbV9iYWNr
aW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAg
aWYgKCF1cGRhdGVFcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIGVycm9yID0gdXBkYXRlRXJy
b3I7CisgICAgfQogCiAgICAgZ2VuZXJhdGVkS2V5UmVzZXR0ZXIucmVsZWFzZSgpOwogICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCB1c2VkS2V5KSk7CkBAIC0xMzAzLDYgKzEzMzIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJ
RAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKKyAgICBmaW5pc2hT
cGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnNpemUoKSk7CiAgICAg
cGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHRL
ZXkpOwogfQogCkBAIC0yMDk3LDkgKzIxMjcsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
b3N0RGF0YWJhc2VUYXNrKENyb3NzVGhyZWFkVGFzayYmIHRhc2spCiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseShDcm9zc1RocmVhZFRhc2smJiB0YXNrKQog
ewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBt
X2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0KICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1
ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgbV9zZXJ2ZXItPnBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZXhl
Y3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSkpOwogfQpAQCAtMjE2NCw4ICsyMTkxLDkgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKIAogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdU
YXNrcy5jbGVhcigpOwotICAgIG1fc2VydmVyLT5yZXNldFNwYWNlVXNlZChtX2lkZW50aWZpZXIu
b3JpZ2luKCkpOworICAgIGZvciAoYXV0byBzaXplIDogbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRh
c2tzLnZhbHVlcygpKQorICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVz
ZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBzaXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNlVGFza3MuY2xlYXIoKTsKIAogICAgIC8vIEVycm9yIG91dCBhbGwgdHJhbnNhY3Rpb25zCiAg
ICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1faW5Qcm9ncmVzc1RyYW5z
YWN0aW9ucy5rZXlzKCkpKQpAQCAtMjI0MSwzMyArMjI2OSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAgICAgcG9zdERhdGFiYXNlVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9wdGlv
bmFsQ2FsbGJhY2tJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICBpZiAob3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpIHsKLSAgICAgICAgdWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyID0gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIudmFsdWUoKTsK
LSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmZp
bmQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmVuZCgpKSB7Ci0gICAgICAgICAgICBtX3NlcnZlci0+ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+
dmFsdWUpOwotICAgICAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MucmVtb3Zl
KGl0ZXJhdG9yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVpbnQ2NF90IGRhdGFiYXNlU2l6
ZSA9IG1fbmV3RGF0YWJhc2VTaXplOwotICAgIGlmIChkYXRhYmFzZVNpemUgIT0gbV9jdXJyZW50
RGF0YWJhc2VTaXplKSB7Ci0gICAgICAgIGlmIChkYXRhYmFzZVNpemUgPiBtX2N1cnJlbnREYXRh
YmFzZVNpemUpCi0gICAgICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBkYXRhYmFzZVNpemUgLSBtX2N1cnJlbnREYXRhYmFzZVNpemUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VTcGFjZVVzZWQobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBtX2N1cnJlbnREYXRhYmFzZVNpemUgLSBkYXRhYmFzZVNpemUp
OwotICAgICAgICBtX2N1cnJlbnREYXRhYmFzZVNpemUgPSBkYXRhYmFzZVNpemU7Ci0gICAgfQot
fQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKLSAgICB1cGRh
dGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgYXV0byBjYWxs
YmFjayA9IG1fZXJyb3JDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIEFT
U0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKICAgICBpZiAoY2Fs
bGJhY2spIHsKQEAgLTIyNzksOCArMjI4Miw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCS2V5RGF0
YSYgcmVzdWx0S2V5KQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRl
bnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0gbV9rZXlEYXRhQ2FsbGJhY2tzLnRha2Uo
Y2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2Vk
Rm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0yMzI1LDggKzIzMjYsNiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ291bnRDYWxsYmFjayh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdl
dEVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogewotICAgIHVwZGF0
ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBBU1NFUlQobV9l
cnJvckNhbGxiYWNrcy5jb250YWlucyhjYWxsYmFja0lkZW50aWZpZXIpKTsKICAgICBBU1NFUlQo
bV9jYWxsYmFja1F1ZXVlLmxhc3QoKSA9PSBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIG1fY2Fs
bGJhY2tRdWV1ZS5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDUzYjIx
ZGZlNGQyMWRhNTVmZmNhNmYwNmZiMDZiMjI3NWMxZWNmOGQuLjEwNGUyZjdhYjFmYWY2ZTRkZWRi
ZjIyMDU0NjkxMzJhNTY5NjBjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xMTYsOCAr
MTE2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGU7IH0KIAotICAgIHVpbnQ2NF90
IHNwYWNlVXNlZCgpIGNvbnN0OwotCiAgICAgdm9pZCBmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMo
KTsKIAogcHJpdmF0ZToKQEAgLTE2MCw3ICsxNTgsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRGF0
YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcik7
CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJU
cmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4OCw3ICsxODYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8g
TWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWlu
dDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgZGlkT3BlbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2
NF90IGFjdHVhbFRhc2tTaXplLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZv
aWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2b2lk
IGRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2
b2lkIGRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG5ld05hbWUpOwpAQCAtMjExLDggKzIwOSw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBkaWRQZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQg
ZGlkU2h1dGRvd25Gb3JDbG9zZSgpOwogCi0gICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKEVycm9yQ2FsbGJhY2smJiwgdWludDY0X3QgdGFza1NpemUgPSAwKTsKLSAgICB1aW50
NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYsIHVpbnQ2NF90
IHRhc2tTaXplID0gMCk7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVy
cm9yQ2FsbGJhY2smJik7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtl
eURhdGFDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
R2V0QWxsUmVzdWx0c0NhbGxiYWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihHZXRSZXN1bHRDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoQ291bnRDYWxsYmFjayYmKTsKQEAgLTI0OSw3ICsyNDcsMTAgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgcmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7CiAgICAgdm9pZCB3YWl0Rm9y
UmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwotICAgIHZvaWQg
dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9wdGlvbmFsQ2FsbGJh
Y2tJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIHN0YXJ0U3BhY2VJbmNyZWFz
ZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpOworICAgIHZvaWQg
ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0
dWFsVGFza1NpemUpOworCisgICAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJh
Y2tJZGVudGlmaWVyKCk7CiAKICAgICBSZWY8SURCU2VydmVyPiBtX3NlcnZlcjsKICAgICBJREJE
YXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwpAQCAtMzAyLDcgKzMwMyw3IEBAIHByaXZh
dGU6CiAKICAgICBIYXNoU2V0PElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRj
aGVzOwogCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5j
cmVhc2luZ1Rhc2tzOworICAgIEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdT
cGFjZUluY3JlYXNlVGFza3M7CiAgICAgdWludDY0X3QgbV9jdXJyZW50RGF0YWJhc2VTaXplIHsg
MCB9OwogICAgIHVpbnQ2NF90IG1fbmV3RGF0YWJhc2VTaXplIHsgMCB9OwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCmlu
ZGV4IDY1MmQwYTgxN2Y1YzUzYzcwMzgzZjAxNGUxZWViYTE4MGEyNjhkNGMuLjcxMTg0Y2Y3ODJi
YWUyNDU5NjAxY2JiYmQ4N2FkMTdjM2JkMDg4MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcApAQCAtMzIsMTUgKzMyLDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRXJyb3I6OklEQkVycm9yKE9wdGlvbmFs
PEV4Y2VwdGlvbkNvZGU+IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0lEQkVycm9yOjpJ
REJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIHVpbnQ2NF90IHNpemUpCiAgICAgOiBtX2NvZGUoY29kZSkKICAgICAsIG1fbWVzc2FnZSht
ZXNzYWdlKQorICAgICwgbV9zaXplKHNpemUpCiB7CiB9CiAKIElEQkVycm9yIElEQkVycm9yOjpp
c29sYXRlZENvcHkoKSBjb25zdAogewotICAgIHJldHVybiBJREJFcnJvciB7IG1fY29kZSwgbV9t
ZXNzYWdlLmlzb2xhdGVkQ29weSgpIH07CisgICAgcmV0dXJuIElEQkVycm9yIHsgbV9jb2RlLCBt
X21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCksIG1fc2l6ZSB9OwogfQogCiBTdHJpbmcgSURCRXJyb3I6
Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRXJyb3IuaAppbmRleCAzYTk1YmIzODA1MGRlYWIyOGMyZGMxYTdhZTY1ZmUyN2Y2
YWY4ODU2Li5mMGU1NzUxZmM0ODRhMDE2M2RiOGQ5OTEyMWY3Mjg4MWU2YWQxOWFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaApA
QCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkVycm9yIHsK
IHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25hbDxF
eGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0geyB9
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRp
b25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0geyB9LCB1aW50
NjRfdCBzaXplID0gMCk7CiAKICAgICBzdGF0aWMgSURCRXJyb3IgdXNlckRlbGV0ZUVycm9yKCkK
ICAgICB7CkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbWVzc2FnZSgpIGNv
bnN0OwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlOyB9CisgICAg
dWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgSURCRXJyb3Ig
aXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKQEAgLTYzLDYgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBtX2NvZGU7CiAgICAgU3RyaW5nIG1fbWVz
c2FnZTsKKyAgICB1aW50NjRfdCBtX3NpemU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5k
ZXggNzY3YWQyZWFmNGFjY2I4MzE5MDQ0MjI4OTcwNjk0OWI3MGIzNDMwZS4uMjMzZmQ0MmZlNzhi
ZTAyZWQ1NmM4NjE5OWZhNDkzMTMxYjQ2ZDQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC04NCw4ICs4NCw3IEBAIHZvaWQgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2Vy
KQogICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNh
Z2UoKTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNob3VsZERlcXVldWVG
aXJzdFBlbmRpbmdSZXF1ZXN0OjpObyk7CisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
eyB9KTsKICAgICB9KTsKIH0KIApAQCAtMTE5LDcgKzExOCw3IEBAIHZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNl
cnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVz
dHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOworICAgICAgICAg
ICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAgICAgICAgfSk7CiAg
ICAgfQogfQpAQCAtMTI3LDcgKzEyNiw3IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVt
b3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7CiAgICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShj
YWxsYmFjaykgfSk7CisgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5j
cmVhc2UsIFdURk1vdmUoY2FsbGJhY2spLCBQZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlVuaGFuZGxl
ZH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzksMTMgKzEzOCwxNyBAQCB2b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNl
LCBSZXF1ZXN0Q2FsbGJhY2smJgogICAgIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7CiAKICAg
ICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJh
Y2spIH0pOworICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNl
LCBXVEZNb3ZlKGNhbGxiYWNrKSwgUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVbmhhbmRsZWR9KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2Uo
c3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3Bh
Y2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFj
ZShzcGFjZUluY3JlYXNlKTsKKyAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3Bh
Y2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjayksIFBlbmRpbmdSZXF1ZXN0OjpTdGF0ZTo6VXNl
clNwYWNlVXNlZFJlc2V0IH0pOworCisgICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3Qg
YWdhaW4gYWZ0ZXIgbWFraW5nIHN1cmUgdXNlcidzIHVzYWdlIGlzIGFjY3VyYXRlLgorICAgICAg
ICBmb3IgKGF1dG8gdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKKyAgICAgICAgICAgIHVz
ZXItPnJlc2V0U3BhY2VVc2VkKFN0b3JhZ2VRdW90YVVzZXI6OkNvbmRpdGlvbjo6SW5kZXhlZERC
T25seSk7CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTY2LDExICsxNjksMTEgQEAg
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJ
bmNyZWFzZSkKICAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlIHJlY2VpdmVkIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhp
cywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKIAogICAgICAgICBtX2lzV2FpdGluZ0ZvclNw
YWNlSW5jcmVhc2VSZXNwb25zZSA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVl
c3RzKG5ld1F1b3RhLCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKTsKKyAg
ICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSk7CiAgICAgfSk7CiB9CiAKLXZv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1
aW50NjRfdD4gbmV3UXVvdGEsIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHNob3Vs
ZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKIHsKICAg
ICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0x
ODQsNyArMTg3LDEyIEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdS
ZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNoCiAgICAgaWYgKCFtX3BlbmRp
bmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0ID09IFNob3VsZERlcXVldWVGaXJz
dFBlbmRpbmdSZXF1ZXN0OjpZZXMpIHsKKyAgICBpZiAoIW1faGFzU3RhcnRlZEhhbmRsaW5nUmVx
dWVzdHMgJiYgIW1fcXVvdGEpIHsKKyAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2Fn
ZSgpOworICAgICAgICBtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKS5zdGF0ZSA9PSBQZW5kaW5nUmVx
dWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQpIHsKICAgICAgICAgYXV0byByZXF1
ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIGJvb2wgc2hvdWxk
QWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVh
c2UpOwogCkBAIC0xOTcsOSArMjA1LDE4IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNoCiAgICAg
ICAgIGF1dG8mIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwogCiAgICAgICAg
IGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgeworICAg
ICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdGUgPT0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVbmhh
bmRsZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgcHJvY2Vzc2luZyByZXF1ZXN0IGFnYWlu
IGFmdGVyIG1ha2luZyBzdXJlIHVzZXIncyB1c2FnZSBpcyBhY2N1cmF0ZS4KKyAgICAgICAgICAg
ICAgICByZXF1ZXN0LnN0YXRlID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVc2VyU3BhY2VVc2Vk
UmVzZXQ7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91
c2VycykpCisgICAgICAgICAgICAgICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKFN0b3JhZ2VR
dW90YVVzZXI6OkNvbmRpdGlvbjo6SW5kZXhlZERCT25seSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXF1ZXN0LnN0YXRlID0gUGVuZGlu
Z1JlcXVlc3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkOwogICAgICAgICAgICAgdWlu
dDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3Qg
OiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHJl
cXVlc3Quc3BhY2VJbmNyZWFzZTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVl
c3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9
IHBlbmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CiAgICAgICAgICAgICBhc2tGb3JNb3JlU3Bh
Y2Uoc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXggOWY2NDYzM2Vk
NjZjYzEyYTkyODNjMDg5MWJkMjU1YWU5MzA0MmFiNy4uZDgzODI4OGU1MTA3Nzg1ZjUzMGE3YzM4
NDczOTA5MWU1M2RkMzE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFza1VzZXJU
b0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYpOwogCiAgICAgZW51bSBjbGFzcyBTaG91bGRE
ZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHByb2Nlc3NQ
ZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5k
aW5nUmVxdWVzdCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVp
bnQ2NF90Pik7CiAKICAgICB1aW50NjRfdCBtX3F1b3RhIHsgMCB9OwogCkBAIC04MCwxMSArODAs
MTUgQEAgcHJpdmF0ZToKIAogICAgIGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsg
Tm8sIFllcyB9OwogICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXpl
ZENhbGxlZD4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PGNvbnN0
IFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOworICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNl
cio+IG1fdXNlcnM7CisKKyAgICBib29sIG1faGFzU3RhcnRlZEhhbmRsaW5nUmVxdWVzdHMgeyBm
YWxzZSB9OwogCiAgICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsKKyAgICAgICAgZW51bSBjbGFz
cyBTdGF0ZSB7IFVuaGFuZGxlZCwgVXNlclNwYWNlVXNlZFJlc2V0LCBTcGFjZUluY3JlYXNlUmVx
dWVzdGVkIH07CiAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7CiAgICAgICAgIFJlcXVl
c3RDYWxsYmFjayBjYWxsYmFjazsKKyAgICAgICAgU3RhdGUgc3RhdGU7CiAgICAgfTsKICAgICBE
ZXF1ZTxQZW5kaW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAppbmRleCBiNDIzMGM1ZTEyZDA5NGQ2OTllMWUy
OTk3OTE2NGFmNWI3YzgzOGUwLi5kZmQxMTM1ZThiYWJmNDMyZmQzOWNjMzRjNzhjMTIwMDY1ZDVj
M2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaApAQCAtMzQs
NiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RvcmFnZVF1b3RhVXNlcigpID0gZGVm
YXVsdDsKIAogICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgPSAwOworICAg
IGVudW0gY2xhc3MgQ29uZGl0aW9uIHsgTm9uZSwgSW5kZXhlZERCT25seSB9OworICAgIHZpcnR1
YWwgdm9pZCByZXNldFNwYWNlVXNlZChDb25kaXRpb24pIHsgcmV0dXJuOyB9CiAgICAgdmlydHVh
bCB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJh
Y2spIHsgY2FsbGJhY2soKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmlu
ZGV4IDIzODc5NDE2ZmZkYzNkMjEzMDY3ZDFlMjc5NTE3ZWUxNGNiYjVhNmMuLjEzMjZhZDVlMjJl
MWExY2NkNzE3OTQ3ZjM1NDE3OTk4OTEwMTYzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
cy5jcHAKQEAgLTYwNSw4ICs2MDUsMTEgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnko
Y29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkp
OwogfQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQordm9pZCBDYWNoZXM6OnJlc2V0
U3BhY2VVc2VkKENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgaWYgKGNvbmRpdGlvbiA9PSBD
b25kaXRpb246OkluZGV4ZWREQk9ubHkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc2l6ZSA9
IDA7CiAgICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7CiAgICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5y
ZW1vdmVVc2VyKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IDNjNDUxYTcy
M2UxZTkyZjU1OWY2ZmJjZWY3ZjFmMzMxMTg5MDJmYWUuLjk5NTJhMWYxMTkxYWMxOWRkMTM0NzZi
MzhkOWViYjRiM2MyZTBiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtNzgsNyAr
NzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICB2
b2lkIHJlc2V0U3BhY2VVc2VkKCk7CisgICAgdm9pZCByZXNldFNwYWNlVXNlZChDb25kaXRpb24g
Y29uZGl0aW9uID0gQ29uZGl0aW9uOjpOb25lKSBmaW5hbDsKIAogICAgIHVpbnQ2NF90IHN0b3Jh
Z2VTaXplKCkgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379781</attachid>
            <date>2019-09-27 18:31:29 -0700</date>
            <delta_ts>2019-09-29 13:18:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190927183128.patch</filename>
            <type>text/plain</type>
            <size>51252</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc3OTllZTlhYjAxOTlk
MzJmNTAwMjEyZmNhOWJjODhhZDJhZDdiNS4uMmNkMzkxYmNiYmE4MmVjNTQ3NjA1MDYyMjFiYjdm
OTk4NjY0OTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE5LTA5LTI3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERCIG9ubHkgd2hlbiBlc3RpbWF0
ZWQgaW5jcmVhc2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2UgcmVhZCBzaXpl
IG9mIEluZGV4ZWREQiBkYXRhYmFzZSBmaWxlcyB3aGVuIGEgZGF0YWJhc2Ugb3BlcmF0aW9uIGlz
IGNvbXBsZXRlZC4gVGhpcyBmaWxlIHN5c3RlbQorICAgICAgICBvcGVyYXRpb24gaXMgc2xvdy4K
KyAgICAgICAgCisgICAgICAgIEFuIGVmZmljaWVudCBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRl
IHRoZSBzcGFjZSBhdmFpbGFibGUsIGVzdGltYXRlIHNwYWNlIGluY3JlYXNlIGZvciBlYWNoIG9w
ZWFydGlvbiwgYW5kIGdldAorICAgICAgICB0aGUgYWNjdXJhdGUgZmlsZSBzaXplIG9ubHkgd2hl
biB0aGUgYWNjdW11bGF0ZWQgZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNl
IGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc2l6ZSBlc3RpbWF0
ZSBmb3IgSURCIHRhc2tzIG1vcmUgYWNjdXJhdGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyB0ZXN0LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2Vy
OjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpy
ZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjplc3RpbWF0ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFj
ZUluY3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
U2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9y
ZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hl
Y2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2Vy
RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlm
aWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
RXJyb3I6OklEQkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjppc29sYXRlZENv
cHkgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OklEQkVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkVycm9yOjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
VXNlclRvSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpyZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tG
b3JNb3JlU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5h
Z2VyLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6CisKIDIwMTktMDktMjcg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIEZsYWt5IFRlc3Q6
IGluc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMzg5Mjc3ODA4
OWFhMjZkY2QxZTdlYjI3NjQ4NGI4YjJjM2FkYmQzZC4uZTJhMDFlNGVkN2IxYzU5ZGFlNDVmMDc3
ODEzNjg5ZTkwOTg0YzNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wOS0yNyAg
U2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgZGlzayB1
c2FnZSBvZiBJbmRleGVkREIgb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBpcyBiaWdnZXIg
dGhhbiBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OnJlc2V0U3Bh
Y2VVc2VkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZXMuaDoKKwogMjAxOS0wOS0yNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdOiBXaGVuIGluc2VydGluZyBhIHBob3RvIGFu
ZCB0aGVuIGluc2VydGluZyBhdXRvLWNvcnJlY3RlZCB0ZXh0LCB0aGUgcGhvdG8gaXMgcmVtb3Zl
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAppbmRleCBiNTllZDdmMjI0NDcwNDE0N2ZkMTkwYTFkMTdmYTg5NGQzOWZjYjBj
Li5kNDA2ZmQ4MWFkOGQyZTgwNTZhNjI4NjVmMWRjMzk0OTBiNWVhZjYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApA
QCAtNzA5LDExICs3MDksOCBAQCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcigpCiAg
ICAgICAgIG1fbWFuYWdlci0+cmVtb3ZlVXNlcigqdGhpcyk7CiB9CiAKLXZvaWQgSURCU2VydmVy
OjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKK3ZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6
OnJlc2V0U3BhY2VVc2VkKENvbmRpdGlvbikKIHsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAg
bV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKLQogICAgIGlmICghbV9tYW5hZ2VyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTc2MSw2ICs3NTgsNyBAQCB2b2lkIElEQlNlcnZlcjo6UXVvdGFV
c2VyOjppbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkKIHsKICAgICBBU1NF
UlQobV9pc0luaXRpYWxpemVkIHx8ICFtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UpOwogICAgIG1f
c3BhY2VVc2VkID0gc3BhY2VVc2VkOworICAgIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA9IDA7
CiAgICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKIAogICAgIGlmIChhdXRvIGNhbGxiYWNrID0g
V1RGTW92ZShtX2luaXRpYWxpemF0aW9uQ2FsbGJhY2spKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDE5ZTY5NjJlZDE5
YWJhNTQwMzJjYTA0NDcyNGVkMTExNTM1NGE1YWYuLjgyZTFiZGZlNmMyNDMzNDQ5MWZlOTBiY2Zk
NDE3MTcwYjFhMDE3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogICAg
ICAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2VyKCkgeyByZXR1cm4gbV9tYW5hZ2VyLmdl
dCgpOyB9CiAKICAgICAgICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7
IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9Ci0gICAgICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQo
KTsKKyAgICAgICAgdm9pZCByZXNldFNwYWNlVXNlZChDb25kaXRpb24gY29uZGl0aW9uID0gQ29u
ZGl0aW9uOjpOb25lKSBmaW5hbDsKIAogICAgICAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3Bh
Y2VVc2VkKHVpbnQ2NF90IGluY3JlYXNlKSB7IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSArPSBp
bmNyZWFzZTsgfQogICAgICAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2
NF90IGRlY3JlYXNlKQpAQCAtMTY3LDcgKzE2NywxMCBAQCBwcml2YXRlOgogICAgICAgICB2b2lk
IGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3Bh
Y2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOyB9CisgICAgICAgIHVpbnQ2NF90IHNw
YWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6
ZWQpOworICAgICAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUlu
Y3JlYXNlOworICAgICAgICB9CiAgICAgICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CiAKICAgICAgICAgSURCU2VydmVyJiBtX3NlcnZl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMjc5YjMxNTkxNmJkMzlk
OGQ0YTg2MDZlNzA1ZGI3ZTU1ZDE5YWU3MC4uOTFkMDIxYTI2NWUxMGQ0NWFiNzZlNGEyY2YyOTA3
YzQxNzQyMzg0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk4NCw3
ICs5ODQsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogCiAgICAgbV9kYXRhYmFzZUluZm8t
PmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9
OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCkg
KyBrZXlQYXRoQmxvYi0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9w
dCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQpAQCAtMTEw
NSw5ICsxMTA2LDEzIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2Jq
ZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBTdHJpbmcgb2xkTmFtZTsKKyAgICBpZiAoYXV0byogb2JqZWN0U3RvcmVJbmZvID0g
bV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRl
bnRpZmllcikpCisgICAgICAgIG9sZE5hbWUgPSBvYmplY3RTdG9yZUluZm8tPm5hbWUoKTsKICAg
ICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lKTsKIAotICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6
ZUluY3JlYXNlID0gbmV3TmFtZS5zaXplSW5CeXRlcygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygp
ID8gbmV3TmFtZS5zaXplSW5CeXRlcygpIC0gb2xkTmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAg
ICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9
CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJRCkKQEAgLTExODQsNiArMTE4OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjCiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4
SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBy
ZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGlu
IGRhdGFiYXNlIl9zIH07CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8u
bmFtZSgpLnNpemVJbkJ5dGVzKCkgKyBrZXlQYXRoQmxvYi0+c2l6ZSgpOwogCiAgICAgLy8gV3Jp
dGUgaW5kZXggcmVjb3JkcyBmb3IgYW55IHJlY29yZHMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRo
aXMgb2JqZWN0IHN0b3JlLgogCkBAIC0xMjE0LDYgKzEyMjAsNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhYwogCiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAg
c2l6ZUluY3JlYXNlICs9IGVycm9yLnNpemUoKTsKIAogICAgICAgICBpZiAoIWN1cnNvci0+YWR2
YW5jZSgxKSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZHZhbmNpbmcgY3Vyc29y
IHdoaWxlIGluZGV4aW5nIGV4aXN0aW5nIHJlY29yZHMgZm9yIG5ldyBpbmRleC4iKTsKQEAgLTEy
MzEsNyArMTIzOCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5k
ZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgQVNTRVJUKG9iamVj
dFN0b3JlKTsKICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKIAotICAg
IHJldHVybiBJREJFcnJvciB7IH07CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0
LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnVuY2hlY2tlZEhhc0luZGV4UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29u
c3QgSURCS2V5RGF0YSYgaW5kZXhLZXksIGJvb2wmIGhhc1JlY29yZCkKQEAgLTEyOTEsNiArMTI5
OCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhL
ZXkoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1
aW50NjRfdCBzaXplSW5jcmVhc2UgPSAwOwogICAgIGZvciAoYXV0byYgaW5kZXhLZXkgOiBpbmRl
eEtleXMpIHsKICAgICAgICAgaWYgKCFpbmRleEtleS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTEyOTksOSArMTMwNywxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgYwog
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHV0IGluZGV4IHJlY29yZCBmb3IgbmV3
bHkgY3JlYXRlZCBpbmRleCIpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9
CisgICAgICAgIHNpemVJbmNyZWFzZSArPSBlcnJvci5zaXplKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIElEQkVycm9yIHsgfTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQsIHsg
fSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGlu
ZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGtleVZhbHVlLCBjb25zdCBXZWJDb3Jl
OjpJREJLZXlEYXRhJiBpbmRleEtleSwgaW50NjRfdCByZWNvcmRJRCkKQEAgLTEzMzQsNyArMTM0
Myw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhS
ZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZGV4S2V5
QnVmZmVyLT5zaXplKCkgKyB2YWx1ZUJ1ZmZlci0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJv
ciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogCkBAIC0xNDE5LDkg
KzE0MjksMTEgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGF1dG8gb2xkTmFtZSA9IGluZGV4SW5mby0+bmFtZSgpOwogICAgIGluZGV4SW5mby0+cmVu
YW1lKG5ld05hbWUpOwogCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBz
aXplSW5jcmVhc2UgPSBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5dGVz
KCkgPyBuZXdOYW1lLnNpemVJbkJ5dGVzKCkgLSBvbGROYW1lLnNpemVJbkJ5dGVzKCkgOiAwOwor
ICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsK
IH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBr
ZXlFeGlzdHMpCkBAIC0xNjg4LDYgKzE3MDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3Rvcgog
CiAgICAgSURCRXJyb3IgZXJyb3I7CiAgICAgYm9vbCBhbnlSZWNvcmRzU3VjY2VlZGVkID0gZmFs
c2U7CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4
IDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5
OwogICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4
dC0+ZXhlY1N0YXRlKCksIGluZGV4LCBqc1ZhbHVlLCBpbmRleEtleSwgaW5mby5rZXlQYXRoKCks
IGtleSk7CkBAIC0xNjk5LDYgKzE3MTIsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAg
c2l6ZUluY3JlYXNlICs9IGVycm9yLnNpemUoKTsKICAgICAgICAgYW55UmVjb3Jkc1N1Y2NlZWRl
ZCA9IHRydWU7CiAgICAgfQogCkBAIC0xNzE2LDcgKzE3MzAsMTAgQEAgSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9i
amVjdFN0b3IKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBlcnJvcjsKKyAgICBpZiAo
IWVycm9yLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICByZXR1cm4gSURC
RXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9i
amVjdFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUm
IHZhbHVlKQpAQCAtMTc1Nyw2ICsxNzc0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAog
ICAgICAgICByZWNvcmRJRCA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0K
KyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBrZXlCdWZmZXItPnNpemUoKSArIHZhbHVlLmRh
dGEoKS5kYXRhKCktPnNpemUoKTsKIAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVz
Rm9yQWRkUmVjb3JkKG9iamVjdFN0b3JlSW5mbywga2V5RGF0YSwgdmFsdWUuZGF0YSgpLCByZWNv
cmRJRCk7CiAKQEAgLTE3NzIsNiArMTc5MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAK
ICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgIH0KKyAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iu
c2l6ZSgpOwogCiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzID0gdmFsdWUuYmxv
YlVSTHMoKTsKICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVzID0gdmFsdWUuYmxv
YkZpbGVQYXRocygpOwpAQCAtMTc4Nyw2ICsxODA2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGkKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFi
bGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIl9zIH07CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNlICs9IHVybC5zaXplSW5CeXRlcygpOwog
ICAgICAgICBpbnQ2NF90IHBvdGVudGlhbEZpbGVOYW1lSW50ZWdlciA9IG1fc3FsaXRlREItPmxh
c3RJbnNlcnRSb3dJRCgpOwogCiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUg
Zm9yIHRoaXMgYmxvYlVSTCwgbm90aGluZyBsZWZ0IHRvIGRvLgpAQCAtMTgyMiwxMSArMTg0Miwx
MiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICB9CiAKICAgICAgICAgdHJhbnNh
Y3Rpb24tPmFkZEJsb2JGaWxlKGJsb2JGaWxlc1tpXSwgc3RvcmVkRmlsZW5hbWUpOworICAgICAg
ICBzaXplSW5jcmVhc2UgKz0gKHVybC5zaXplSW5CeXRlcygpICsgc3RvcmVkRmlsZW5hbWUuc2l6
ZUluQnl0ZXMoKSk7CiAgICAgfQogCiAgICAgdHJhbnNhY3Rpb24tPm5vdGlmeUN1cnNvcnNPZkNo
YW5nZXMob2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gZXJyb3I7
CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9
OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9y
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmlu
Zz4mIGJsb2JVUkxzLCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCmluZGV4IGQ4NWIwMDE0OGEyYTVjMzA2MGJhNTBjMGUxMjIwNzVjNjM1YmJj
NGYuLjFmYzY3MTVlZmMyY2UwNjk0NzkxZmI3MmJmM2YwZmM2MTAzNWM3NTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcApAQCAtNTUsNiArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
bmFtZXNwYWNlIElEQlNlcnZlciB7CiAKIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0V3Jp
dGVPcGVyYXRpb25Db3N0ID0gNDsKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0T3Blbk9w
ZXJhdGlvbkNvc3QgPSAxMCAqIEtCOwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRl
U2l6ZShjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQogewpAQCAtODgsMTAgKzg5LDIzIEBAIHN0
YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkK
ICAgICByZXR1cm4gc2l6ZTsKIH0KIAorc3RhdGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNp
emUoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihrZXlQYXRoLCBbXShjb25zdCBTdHJpbmcmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGgu
c2l6ZUluQnl0ZXMoKTsKKyAgICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsK
KyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byBwYXRoIDogcGF0
aHMpCisgICAgICAgICAgICBzaXplICs9IHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgcmV0
dXJuIHNpemU7CisgICAgfSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVT
aXplKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKICAgICB1aW50NjRfdCBzaXplID0gNDsK
ICAgICBzaXplICs9IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZSArPSBlc3Rp
bWF0ZVNpemUoaW5mby5rZXlQYXRoKCkpOwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC05OSw5
ICsxMTMsOCBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mIGluZm8pCiB7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6
ZSArPSBpbmZvLm5hbWUoKS5zaXplSW5CeXRlcygpOwotICAgIC8vIEZJWE1FOiBlc3RpbWF0ZSBr
ZXlQYXRoLgotICAgIGZvciAoYXV0byYgaW5kZXhJbmZvIDogaW5mby5pbmRleE1hcCgpLnZhbHVl
cygpKQotICAgICAgICBzaXplICs9IGVzdGltYXRlU2l6ZShpbmRleEluZm8pOworICAgIGlmIChh
dXRvIGtleVBhdGggPSBpbmZvLmtleVBhdGgoKSkKKyAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZVNp
emUoKmtleVBhdGgpOwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC0yMDcsNiArMjIwLDIyIEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3RpCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAw
LCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpz
dGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tT
aXplKQoreworICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50
aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFz
a3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3Qg
YWN0dWFsVGFza1NpemUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5j
cmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRp
bmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkpIHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNl
UG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVl
KTsKKyAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmln
aW4oKSwgYWN0dWFsVGFza1NpemUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFz
a3MucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIiht
YWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uICglcCki
LCB0aGlzKTsKQEAgLTIxOSw3ICsyNDgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgbV9pc09wZW5pbmdCYWNraW5n
U3RvcmUgPSB0cnVlOwogICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhlciB0aGlz
IGlzIGFuIGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgogICAgICAgICAgICAgLy8gV2Ugc2V0
IGEgc21hbGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFuIGluZmlu
aXRlIG51bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3Bh
Y2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0LCBbdGhp
cywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7
CisgICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cih0aGlzKSwgc2l6ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdF0oYXV0byBkZWNpc2lvbikg
bXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yMzUsNyArMjY0LDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZp
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFj
a0lELCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tp
bmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiAgICAgICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0zNDgsNyArMzc5LDYgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VT
aXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2lu
Z1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFu
ZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwpAQCAtMzY0LDcgKzM5NCw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVy
c2lvbigpOwogICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAg
ICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAg
ICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0ZWRW
ZXJzaW9uKSk7CkBAIC00MDAsMTAgKzQyOSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNo
dXRkb3duRm9yQ2xvc2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0
YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewor
ICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7
Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6
ZSgpOwotICAgIH0KIAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tp
bmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CkBAIC00MjIs
OCArNDQ5LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSgp
CiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzRW1wdHkoKSk7CiAgICAgbV9k
YXRhYmFzZVJlcGx5UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQo
KTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVp
bnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQpAQCAtNDU1LDggKzQ4MCw2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikK
ICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAg
dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Q
cm9ncmVzcyA9IGZhbHNlOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCkBA
IC01MzcsMTQgKzU2MCwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjphbGxDb25uZWN0aW9u
c0FyZUNsb3NlZE9yQ2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp
YyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpCit1aW50NjRfdCBV
bmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRJ
RCA9IDA7CiAgICAgcmV0dXJuICsrY3VycmVudElEOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJE
YXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFj
aywgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAo
bV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6
dXNlckRlbGV0ZUVycm9yKCkpOwpAQCAtNTU1LDE2ICs1NzgsMTEgQEAgdWludDY0X3QgVW5pcXVl
SURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2Fs
bGJhY2ssIHUKICAgICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmll
cikpOwogICAgIG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJh
Y2spKTsKIAotICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAg
ICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6
ZSk7Ci0gICAgfQotCiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVudGlmaWVyKTsKICAg
ICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0
b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0
X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlmIChtX2hhcmRD
bG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVs
ZXRlRXJyb3IoKSwgeyB9KTsKQEAgLTU3NSwxMSArNTkzLDYgQEAgdWludDY0X3QgVW5pcXVlSURC
RGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxs
YmFjaywKICAgICBBU1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVy
KSk7CiAgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNl
UG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAg
ICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1Np
emUpOwotICAgIH0KLQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAg
ICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkBAIC03ODAsNyArNzkzLDcgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihj
b25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVu
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7CiAg
ICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwpAQCAtNzkyLDE1
ICs4MDUsMTcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKIAogICAgIC8vIFF1b3RhVXNlciBz
aG91bGQgaGF2ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlucyB0aGUK
ICAgICAvLyBzaXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJhc2VTaXpl
ID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAgIGF1dG8gZGF0YWJhc2VTaXpl
QmVmb3JlT3BlbiA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAogICAgIElEQkRh
dGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAg
YXV0byBkYXRhYmFzZVNpemVBZnRlck9wZW4gPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXpl
KCk7CisgICAgYXV0byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUFmdGVyT3BlbiA+IGRh
dGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAoZGF0YWJhc2VTaXplQWZ0ZXJPcGVuIC0gZGF0YWJhc2VT
aXplQmVmb3JlT3BlbikgOiAwOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9y
ZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRlbnRpZmll
cikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQordm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlu
Zm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9w
ZW5CYWNraW5nU3RvcmUiKTsKQEAgLTgxMSw3ICs4MjYsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29u
c3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5p
bmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7
CisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBhY3R1YWxU
YXNrU2l6ZSk7CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAg
cmV0dXJuOwpAQCAtODM2LDEwICs4NTEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2so
dWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJh
Y2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJv
cihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQg
PSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICgh
Y2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFz
ayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVj
dFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZv
KSk7CiB9CiAKQEAgLTg0OSw5ICs4NjUsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAg
IExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5n
U3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7Cisg
ICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIGluZm8pKTsKIH0KIApAQCAtODYwLDEwICs4NzUsMTMgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIs
ICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIp
OwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNr
KGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKworICAgIElEQkVycm9yIGNyZWF0
ZUVycm9yOworICAgIGlmIChjcmVhdGVFcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFz
ZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICBwZXJmb3JtRXJyb3JD
YWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxs
YmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGNyZWF0ZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQpAQCAtOTM1LDcgKzk1Myw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnJlbmFtZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNo
ZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5l
d05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJ
RCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUp
OworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwog
CkBAIC05NDUsNiArOTYzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0
U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXEKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFz
a1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk1NCw5ICs5NzMsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAg
bV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNr
aW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVycm9yIGVycm9yOwogICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtOTY1
LDEwICs5ODMsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgp
KQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iu
c2l6ZSgpKTsKKworICAgIElEQkVycm9yIHJlbmFtZUVycm9yOworICAgIGlmIChyZW5hbWVFcnJv
ci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9i
amVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBwZXJmb3JtRXJyb3JDYWxsYmFj
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhj
YWxsYmFja0lkZW50aWZpZXIsIHJlbmFtZUVycm9yKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBFcnJvckNhbGxiYWNrIGNh
bGxiYWNrKQpAQCAtMTAzMCw5ICsxMDUxLDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNy
ZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2
NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
Y29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAg
IHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShj
YWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQp
CiAgICAgICAgIHJldHVybjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQs
IHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSUQs
IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIApAQCAtMTA2Niw2
ICsxMDg4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICAgICAgb2JqZWN0U3RvcmVJ
bmZvLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOwogICAgIH0KIAorICAgIGZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKICAgICBwZXJmb3Jt
RXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIApAQCAtMTE0Nyw3
ICsxMTcwLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKIAogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQg
PSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsK
KyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1v
dmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTE2Myw2ICsxMTg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhB
ZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkQKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFz
a1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJRCwgdHJh
bnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRl
eElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtMTE3Miw5ICsxMTk2LDggQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSUQKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUp
OwotICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIs
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBh
dXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOwog
Ci0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTExODMsNyArMTIwNiwxMCBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFt
ZUluZGV4Iik7CiAKLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKKyAgICBmaW5pc2hTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnNpemUoKSk7CisKKyAgICBJREJF
cnJvciByZW5hbWVFcnJvcjsKKyAgICBpZiAocmVuYW1lRXJyb3IuaXNOdWxsKCkpIHsKICAgICAg
ICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGlu
Z09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFTU0VSVChvYmpl
Y3RTdG9yZUluZm8pOwogICAgICAgICBpZiAob2JqZWN0U3RvcmVJbmZvKSB7CkBAIC0xMTkzLDcg
KzEyMTksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAg
cGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCByZW5hbWVFcnJvcik7CiB9
CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxi
YWNrIGNhbGxiYWNrKQpAQCAtMTIxMyw5ICsxMjM5LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVp
bnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNh
bGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBp
ZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VU
YXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0
RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1v
ZGUpKTsKIH0KIApAQCAtMTI5MSw4ICsxMzE4LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9i
amVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4
ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5t
YXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAgaWYgKG92ZXJ3cml0ZU1v
ZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1
cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUo
KSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcikgeworICAgICAgICBhdXRvIHVwZGF0ZUVy
cm9yID0gbV9iYWNraW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlEYXRhLm51bWJlcigp
KTsKKyAgICAgICAgaWYgKCF1cGRhdGVFcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIGVycm9y
ID0gdXBkYXRlRXJyb3I7CisgICAgfQogCiAgICAgZ2VuZXJhdGVkS2V5UmVzZXR0ZXIucmVsZWFz
ZSgpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CkBAIC0xMzAzLDYgKzEzMzMsNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJRAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAK
KyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnNp
emUoKSk7CiAgICAgcGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCByZXN1bHRLZXkpOwogfQogCkBAIC0yMDk3LDkgKzIxMjgsNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKENyb3NzVGhyZWFkVGFzayYmIHRhc2spCiAKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseShDcm9zc1RocmVhZFRh
c2smJiB0YXNrKQogewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9uZXdEYXRh
YmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0KICAgICBtX2RhdGFi
YXNlUmVwbHlRdWV1ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgbV9zZXJ2ZXItPnBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSkpOwogfQpAQCAtMjE2NCw4ICsy
MTkyLDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVs
ZXRlKCkKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX3BlbmRpbmdTcGFj
ZUluY3JlYXNpbmdUYXNrcy5jbGVhcigpOwotICAgIG1fc2VydmVyLT5yZXNldFNwYWNlVXNlZCht
X2lkZW50aWZpZXIub3JpZ2luKCkpOworICAgIGZvciAoYXV0byBzaXplIDogbV9wZW5kaW5nU3Bh
Y2VJbmNyZWFzZVRhc2tzLnZhbHVlcygpKQorICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3Rl
bnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBzaXplKTsKKyAgICBtX3BlbmRp
bmdTcGFjZUluY3JlYXNlVGFza3MuY2xlYXIoKTsKIAogICAgIC8vIEVycm9yIG91dCBhbGwgdHJh
bnNhY3Rpb25zCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1faW5Q
cm9ncmVzc1RyYW5zYWN0aW9ucy5rZXlzKCkpKQpAQCAtMjI0MSwzMyArMjI3MCw4IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAgICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUpKTsKIH0KIAotdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8dWlu
dDY0X3Q+IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBpZiAob3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpIHsKLSAgICAg
ICAgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyID0gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZp
ZXIudmFsdWUoKTsKLSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVh
c2luZ1Rhc2tzLmZpbmQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9y
ICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmVuZCgpKSB7Ci0gICAgICAgICAgICBt
X3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigp
LCBpdGVyYXRvci0+dmFsdWUpOwotICAgICAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5n
VGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVpbnQ2NF90
IGRhdGFiYXNlU2l6ZSA9IG1fbmV3RGF0YWJhc2VTaXplOwotICAgIGlmIChkYXRhYmFzZVNpemUg
IT0gbV9jdXJyZW50RGF0YWJhc2VTaXplKSB7Ci0gICAgICAgIGlmIChkYXRhYmFzZVNpemUgPiBt
X2N1cnJlbnREYXRhYmFzZVNpemUpCi0gICAgICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFj
ZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkYXRhYmFzZVNpemUgLSBtX2N1cnJlbnREYXRh
YmFzZVNpemUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VT
cGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBtX2N1cnJlbnREYXRhYmFzZVNpemUgLSBk
YXRhYmFzZVNpemUpOwotICAgICAgICBtX2N1cnJlbnREYXRhYmFzZVNpemUgPSBkYXRhYmFzZVNp
emU7Ci0gICAgfQotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvcikK
IHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAg
ICAgYXV0byBjYWxsYmFjayA9IG1fZXJyb3JDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50aWZp
ZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsK
ICAgICBpZiAoY2FsbGJhY2spIHsKQEAgLTIyNzksOCArMjI4Myw2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFj
ayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29u
c3QgSURCS2V5RGF0YSYgcmVzdWx0S2V5KQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVk
KGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0gbV9rZXlEYXRhQ2Fs
bGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sgfHwg
bV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0yMzI1
LDggKzIzMjcsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ291bnRDYWxsYmFj
ayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQog
ewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAg
ICBBU1NFUlQobV9lcnJvckNhbGxiYWNrcy5jb250YWlucyhjYWxsYmFja0lkZW50aWZpZXIpKTsK
ICAgICBBU1NFUlQobV9jYWxsYmFja1F1ZXVlLmxhc3QoKSA9PSBjYWxsYmFja0lkZW50aWZpZXIp
OwogICAgIG1fY2FsbGJhY2tRdWV1ZS5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CmluZGV4IDUzYjIxZGZlNGQyMWRhNTVmZmNhNmYwNmZiMDZiMjI3NWMxZWNmOGQuLjEwNGUyZjdh
YjFmYWY2ZTRkZWRiZjIyMDU0NjkxMzJhNTY5NjBjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CkBAIC0xMTYsOCArMTE2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkQ2xvc2VkRm9yVXNl
ckRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGU7IH0KIAot
ICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0OwotCiAgICAgdm9pZCBmaW5pc2hBY3RpdmVU
cmFuc2FjdGlvbnMoKTsKIAogcHJpdmF0ZToKQEAgLTE2MCw3ICsxNTgsNyBAQCBwcml2YXRlOgog
CiAgICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBvcGVuQmFj
a2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9y
ZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4OCw3ICsxODYsNyBAQCBwcml2YXRl
OgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAgdm9pZCBkaWREZWxldGVCYWNr
aW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAgIHZvaWQgZGlkT3BlbkJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJFcnJvciYpOworICAgIHZv
aWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJREJF
cnJvciYsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8m
KTsKICAgICB2b2lkIGRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwpAQCAtMjExLDggKzIwOSw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBkaWRQZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgp
OwogICAgIHZvaWQgZGlkU2h1dGRvd25Gb3JDbG9zZSgpOwogCi0gICAgdWludDY0X3Qgc3RvcmVD
YWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiwgdWludDY0X3QgdGFza1NpemUgPSAw
KTsKLSAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNr
JiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJik7CisgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoR2V0QWxsUmVzdWx0c0NhbGxiYWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3Jl
Q2FsbGJhY2tPckZpcmVFcnJvcihHZXRSZXN1bHRDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoQ291bnRDYWxsYmFjayYmKTsKQEAgLTI0OSw3ICsyNDcs
MTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7CiAgICAg
dm9pZCB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxJREJFcnJvcj4mJik+JiYp
OwotICAgIHZvaWQgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9w
dGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIHN0YXJ0
U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUp
OworICAgIHZvaWQgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwg
dWludDY0X3QgYWN0dWFsVGFza1NpemUpOworCisgICAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRl
VW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CiAKICAgICBSZWY8SURCU2VydmVyPiBtX3NlcnZl
cjsKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwpAQCAtMzAyLDcgKzMw
Myw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9j
dXJzb3JQcmVmZXRjaGVzOwogCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+IG1fcGVu
ZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzOworICAgIEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90
PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3M7CiAgICAgdWludDY0X3QgbV9jdXJyZW50RGF0
YWJhc2VTaXplIHsgMCB9OwogICAgIHVpbnQ2NF90IG1fbmV3RGF0YWJhc2VTaXplIHsgMCB9Owog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJFcnJvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
RXJyb3IuY3BwCmluZGV4IDY1MmQwYTgxN2Y1YzUzYzcwMzgzZjAxNGUxZWViYTE4MGEyNjhkNGMu
LjcxMTg0Y2Y3ODJiYWUyNDU5NjAxY2JiYmQ4N2FkMTdjM2JkMDg4MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcApAQCAt
MzIsMTUgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRXJyb3I6OklEQkVy
cm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K0lEQkVycm9yOjpJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIHVpbnQ2NF90IHNpemUpCiAgICAgOiBtX2NvZGUoY29kZSkKICAgICAs
IG1fbWVzc2FnZShtZXNzYWdlKQorICAgICwgbV9zaXplKHNpemUpCiB7CiB9CiAKIElEQkVycm9y
IElEQkVycm9yOjppc29sYXRlZENvcHkoKSBjb25zdAogewotICAgIHJldHVybiBJREJFcnJvciB7
IG1fY29kZSwgbV9tZXNzYWdlLmlzb2xhdGVkQ29weSgpIH07CisgICAgcmV0dXJuIElEQkVycm9y
IHsgbV9jb2RlLCBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCksIG1fc2l6ZSB9OwogfQogCiBTdHJp
bmcgSURCRXJyb3I6Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAppbmRleCAzYTk1YmIzODA1MGRlYWIyOGMyZGMx
YTdhZTY1ZmUyN2Y2YWY4ODU2Li5mMGU1NzUxZmM0ODRhMDE2M2RiOGQ5OTEyMWY3Mjg4MWU2YWQx
OWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCRXJyb3IuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IElEQkVycm9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJv
cihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBJREJFcnJvcihPcHRp
b25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
ID0geyB9LCB1aW50NjRfdCBzaXplID0gMCk7CiAKICAgICBzdGF0aWMgSURCRXJyb3IgdXNlckRl
bGV0ZUVycm9yKCkKICAgICB7CkBAIC01NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
bWVzc2FnZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9j
b2RlOyB9CisgICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAg
ICAgSURCRXJyb3IgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKQEAgLTYzLDYgKzY0LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBtX2NvZGU7CiAgICAg
U3RyaW5nIG1fbWVzc2FnZTsKKyAgICB1aW50NjRfdCBtX3NpemU7CiB9OwogCiB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHAKaW5kZXggNzY3YWQyZWFmNGFjY2I4MzE5MDQ0MjI4OTcwNjk0OWI3MGIzNDMwZS4u
ZDRhZGZhMmU2MjExYzE4NTMwNGI0ZmJlZDdjZmQ3OGE2YWIzMTAzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC04NCw4ICs4NCw3IEBA
IHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVv
dGFVc2VyJiB1c2VyKQogICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHVwZGF0ZVF1b3RhQmFz
ZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNo
b3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpObyk7CisgICAgICAgIHByb2Nlc3NQZW5k
aW5nUmVxdWVzdHMoeyB9KTsKICAgICB9KTsKIH0KIApAQCAtMTE5LDcgKzExOCw3IEBAIHZvaWQg
U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRp
YWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQ
ZW5kaW5nUmVxdWVzdHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8p
OworICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAg
ICAgICAgfSk7CiAgICAgfQogfQpAQCAtMTI3LDcgKzEyNiw3IEBAIHZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogdm9pZCBTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVz
dENhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFz
ZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7CisgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVu
ZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spLCBQZW5kaW5nUmVxdWVzdDo6U3Rh
dGU6OlVuaGFuZGxlZH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzksMTMgKzEz
OCwyMiBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBz
cGFjZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJgogICAgIGluaXRpYWxpemVVc2Vyc0lmTmVl
ZGVkKCk7CiAKICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdU
Rk1vdmUoY2FsbGJhY2spIH0pOworICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBz
cGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpV
bmhhbmRsZWR9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmICghbV9oYXNTdGFy
dGVkSGFuZGxpbmdSZXF1ZXN0cyAmJiAhbV9xdW90YSkgeworICAgICAgICB1cGRhdGVRdW90YUJh
c2VkT25TcGFjZVVzYWdlKCk7CisgICAgICAgIG1faGFzU3RhcnRlZEhhbmRsaW5nUmVxdWVzdHMg
PSB0cnVlOworICAgIH0KKwogICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNy
ZWFzZSkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFz
ZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUlu
Y3JlYXNlKTsKKyAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFz
ZSwgV1RGTW92ZShjYWxsYmFjayksIFBlbmRpbmdSZXF1ZXN0OjpTdGF0ZTo6VXNlclNwYWNlVXNl
ZFJlc2V0IH0pOworCisgICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0
ZXIgbWFraW5nIHN1cmUgdXNlcidzIHVzYWdlIGlzIGFjY3VyYXRlLgorICAgICAgICBmb3IgKGF1
dG8gdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKKyAgICAgICAgICAgIHVzZXItPnJlc2V0
U3BhY2VVc2VkKFN0b3JhZ2VRdW90YVVzZXI6OkNvbmRpdGlvbjo6SW5kZXhlZERCT25seSk7CisK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTY2LDExICsxNzQsMTEgQEAgdm9pZCBTdG9y
YWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkK
ICAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6
YXNrRm9yTW9yZVNwYWNlIHJlY2VpdmVkIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhpcywgbmV3UXVv
dGEgPyAqbmV3UXVvdGEgOiAwKTsKIAogICAgICAgICBtX2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVh
c2VSZXNwb25zZSA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1
b3RhLCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKTsKKyAgICAgICAgcHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4g
bmV3UXVvdGEsIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHNob3VsZERlcXVldWVG
aXJzdFBlbmRpbmdSZXF1ZXN0KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKIHsKICAgICBpZiAobV9w
ZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xODQsNyArMTky
LDEyIEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhP
cHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNoCiAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNob3Vs
ZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0ID09IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdS
ZXF1ZXN0OjpZZXMpIHsKKyAgICBpZiAoIW1faGFzU3RhcnRlZEhhbmRsaW5nUmVxdWVzdHMgJiYg
IW1fcXVvdGEpIHsKKyAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOworICAg
ICAgICBtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAobV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKS5zdGF0ZSA9PSBQZW5kaW5nUmVxdWVzdDo6U3Rh
dGU6OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQpIHsKICAgICAgICAgYXV0byByZXF1ZXN0ID0gbV9w
ZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIGJvb2wgc2hvdWxkQWxsb3dSZXF1
ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpOwogCkBA
IC0xOTcsOSArMjEwLDE4IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNoCiAgICAgICAgIGF1dG8m
IHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwogCiAgICAgICAgIGlmIChzaG91
bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgeworICAgICAgICAgICAg
aWYgKHJlcXVlc3Quc3RhdGUgPT0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVbmhhbmRsZWQpIHsK
KyAgICAgICAgICAgICAgICAvLyBUcnkgcHJvY2Vzc2luZyByZXF1ZXN0IGFnYWluIGFmdGVyIG1h
a2luZyBzdXJlIHVzZXIncyB1c2FnZSBpcyBhY2N1cmF0ZS4KKyAgICAgICAgICAgICAgICByZXF1
ZXN0LnN0YXRlID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVc2VyU3BhY2VVc2VkUmVzZXQ7Cisg
ICAgICAgICAgICAgICAgZm9yIChhdXRvIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCisg
ICAgICAgICAgICAgICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKFN0b3JhZ2VRdW90YVVzZXI6
OkNvbmRpdGlvbjo6SW5kZXhlZERCT25seSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXF1ZXN0LnN0YXRlID0gUGVuZGluZ1JlcXVlc3Q6
OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkOwogICAgICAgICAgICAgdWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRp
bmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHJlcXVlc3Quc3Bh
Y2VJbmNyZWFzZTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBtX3Bl
bmRpbmdSZXF1ZXN0cykKKyAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRpbmdS
ZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CiAgICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJ
bmNyZWFzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXggOWY2NDYzM2VkNjZjYzEyYTky
ODNjMDg5MWJkMjU1YWU5MzA0MmFiNy4uZDgzODI4OGU1MTA3Nzg1ZjUzMGE3YzM4NDczOTA5MWU1
M2RkMzE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
LmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFza1VzZXJUb0luaXRpYWxp
emUoU3RvcmFnZVF1b3RhVXNlciYpOwogCiAgICAgZW51bSBjbGFzcyBTaG91bGREZXF1ZXVlRmly
c3RQZW5kaW5nUmVxdWVzdCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVx
dWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVz
dCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90Pik7
CiAKICAgICB1aW50NjRfdCBtX3F1b3RhIHsgMCB9OwogCkBAIC04MCwxMSArODAsMTUgQEAgcHJp
dmF0ZToKIAogICAgIGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9
OwogICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4g
bV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PGNvbnN0IFN0b3JhZ2VR
dW90YVVzZXIqPiBtX3VzZXJzOworICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNlcio+IG1fdXNl
cnM7CisKKyAgICBib29sIG1faGFzU3RhcnRlZEhhbmRsaW5nUmVxdWVzdHMgeyBmYWxzZSB9Owog
CiAgICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsKKyAgICAgICAgZW51bSBjbGFzcyBTdGF0ZSB7
IFVuaGFuZGxlZCwgVXNlclNwYWNlVXNlZFJlc2V0LCBTcGFjZUluY3JlYXNlUmVxdWVzdGVkIH07
CiAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7CiAgICAgICAgIFJlcXVlc3RDYWxsYmFj
ayBjYWxsYmFjazsKKyAgICAgICAgU3RhdGUgc3RhdGU7CiAgICAgfTsKICAgICBEZXF1ZTxQZW5k
aW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YVVzZXIuaAppbmRleCBiNDIzMGM1ZTEyZDA5NGQ2OTllMWUyOTk3OTE2NGFm
NWI3YzgzOGUwLi5kZmQxMTM1ZThiYWJmNDMyZmQzOWNjMzRjNzhjMTIwMDY1ZDVjM2M2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaApAQCAtMzQsNiArMzQsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RvcmFnZVF1b3RhVXNlcigpID0gZGVmYXVsdDsKIAog
ICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgPSAwOworICAgIGVudW0gY2xh
c3MgQ29uZGl0aW9uIHsgTm9uZSwgSW5kZXhlZERCT25seSB9OworICAgIHZpcnR1YWwgdm9pZCBy
ZXNldFNwYWNlVXNlZChDb25kaXRpb24pIHsgcmV0dXJuOyB9CiAgICAgdmlydHVhbCB2b2lkIHdo
ZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spIHsgY2Fs
bGJhY2soKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCmluZGV4IDIzODc5
NDE2ZmZkYzNkMjEzMDY3ZDFlMjc5NTE3ZWUxNGNiYjVhNmMuLjEzMjZhZDVlMjJlMWExY2NkNzE3
OTQ3ZjM1NDE3OTk4OTEwMTYzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKQEAg
LTYwNSw4ICs2MDUsMTEgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNhY2hlRW50cnkoY29uc3QgTmV0
d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJlbW92ZShrZXkpOwogfQogCi12
b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQordm9pZCBDYWNoZXM6OnJlc2V0U3BhY2VVc2Vk
KENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgaWYgKGNvbmRpdGlvbiA9PSBDb25kaXRpb246
OkluZGV4ZWREQk9ubHkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc2l6ZSA9IDA7CiAgICAg
aWYgKG1fcXVvdGFNYW5hZ2VyKSB7CiAgICAgICAgIG1fcXVvdGFNYW5hZ2VyLT5yZW1vdmVVc2Vy
KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IDNjNDUxYTcyM2UxZTkyZjU1
OWY2ZmJjZWY3ZjFmMzMxMTg5MDJmYWUuLjk5NTJhMWYxMTkxYWMxOWRkMTM0NzZiMzhkOWViYjRi
M2MyZTBiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtNzgsNyArNzgsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24oKTsKLSAgICB2b2lkIHJlc2V0
U3BhY2VVc2VkKCk7CisgICAgdm9pZCByZXNldFNwYWNlVXNlZChDb25kaXRpb24gY29uZGl0aW9u
ID0gQ29uZGl0aW9uOjpOb25lKSBmaW5hbDsKIAogICAgIHVpbnQ2NF90IHN0b3JhZ2VTaXplKCkg
Y29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379819</attachid>
            <date>2019-09-29 13:18:31 -0700</date>
            <delta_ts>2019-09-30 13:07:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190929131828.patch</filename>
            <type>text/plain</type>
            <size>51270</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg5ZWNjNGE3ZmYzYjU2
ODlhNTdhZWE0M2RlYjE2ZGM1MTMyMjU3OS4uYjMwM2U3NWVhOThjZTkwODQwODdkYjhjMWY5NWQw
ZWJjMmUwOTE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE5LTA5LTI3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERCIG9ubHkgd2hlbiBlc3RpbWF0
ZWQgaW5jcmVhc2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2UgcmVhZCBzaXpl
IG9mIEluZGV4ZWREQiBkYXRhYmFzZSBmaWxlcyB3aGVuIGEgZGF0YWJhc2Ugb3BlcmF0aW9uIGlz
IGNvbXBsZXRlZC4gVGhpcyBmaWxlIHN5c3RlbQorICAgICAgICBvcGVyYXRpb24gaXMgc2xvdy4K
KyAgICAgICAgCisgICAgICAgIEFuIGVmZmljaWVudCBhbHRlcm5hdGl2ZSBpcyB0byBjb21wdXRl
IHRoZSBzcGFjZSBhdmFpbGFibGUsIGVzdGltYXRlIHNwYWNlIGluY3JlYXNlIGZvciBlYWNoIG9w
ZWFydGlvbiwgYW5kIGdldAorICAgICAgICB0aGUgYWNjdXJhdGUgZmlsZSBzaXplIG9ubHkgd2hl
biB0aGUgYWNjdW11bGF0ZWQgZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNl
IGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc2l6ZSBlc3RpbWF0
ZSBmb3IgSURCIHRhc2tzIG1vcmUgYWNjdXJhdGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyB0ZXN0LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2Vy
OjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6UXVvdGFVc2VyOjppbml0aWFsaXplU3BhY2VVc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpy
ZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjplc3RpbWF0ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFj
ZUluY3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
U2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9y
ZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFt
ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hl
Y2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2Vy
RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlm
aWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
RXJyb3I6OklEQkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjppc29sYXRlZENv
cHkgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OklEQkVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkVycm9yOjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
VXNlclRvSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpyZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJl
cXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tG
b3JNb3JlU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5h
Z2VyLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6CisKIDIwMTktMDktMjcg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBQYWdlcyB1c2luZyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgZmFpbCB0byBlbnRlciB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IDUzMmI0NDIzZTQ2ZGYzZDZhMjVlYmYwNzNlODMxOWNmM2RlNTRiZWYuLjFj
ZDYxZWU3ZmJhMmVlYWEzYzBlNWM0YWMwZTMxZDc0MTY2NjhkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTktMDktMjcgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisK
KyAgICAgICAgVXBkYXRlIGRpc2sgdXNhZ2Ugb2YgSW5kZXhlZERCIG9ubHkgd2hlbiBlc3RpbWF0
ZWQgaW5jcmVhc2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3Rv
cmFnZTo6Q2FjaGVzOjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmg6CisKIDIwMTktMDktMjcgIEFkcmlhbiBQ
ZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVd
IEZpeGVzIGZvciBub24tdW5pZmllZCBidWlsZHMgYWZ0ZXIgcjI0OTcxNApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRl
eCBiNTllZDdmMjI0NDcwNDE0N2ZkMTkwYTFkMTdmYTg5NGQzOWZjYjBjLi5kNDA2ZmQ4MWFkOGQy
ZTgwNTZhNjI4NjVmMWRjMzk0OTBiNWVhZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNzA5LDExICs3MDks
OCBAQCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6flF1b3RhVXNlcigpCiAgICAgICAgIG1fbWFuYWdl
ci0+cmVtb3ZlVXNlcigqdGhpcyk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJl
c2V0U3BhY2VVc2VkKCkKK3ZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2Vk
KENvbmRpdGlvbikKIHsKLSAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAgbV9lc3RpbWF0ZWRTcGFj
ZUluY3JlYXNlID0gMDsKLQogICAgIGlmICghbV9tYW5hZ2VyKQogICAgICAgICByZXR1cm47CiAK
QEAgLTc2MSw2ICs3NTgsNyBAQCB2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbml0aWFsaXpl
U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCkKIHsKICAgICBBU1NFUlQobV9pc0luaXRpYWxp
emVkIHx8ICFtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UpOwogICAgIG1fc3BhY2VVc2VkID0gc3Bh
Y2VVc2VkOworICAgIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSA9IDA7CiAgICAgbV9pc0luaXRp
YWxpemVkID0gdHJ1ZTsKIAogICAgIGlmIChhdXRvIGNhbGxiYWNrID0gV1RGTW92ZShtX2luaXRp
YWxpemF0aW9uQ2FsbGJhY2spKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDE5ZTY5NjJlZDE5YWJhNTQwMzJjYTA0NDcy
NGVkMTExNTM1NGE1YWYuLjgyZTFiZGZlNmMyNDMzNDQ5MWZlOTBiY2ZkNDE3MTcwYjFhMDE3NTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmgKQEAgLTE1Myw3ICsxNTMsNyBAQCBwcml2YXRlOgogICAgICAgICBTdG9yYWdlUXVv
dGFNYW5hZ2VyKiBtYW5hZ2VyKCkgeyByZXR1cm4gbV9tYW5hZ2VyLmdldCgpOyB9CiAKICAgICAg
ICAgdm9pZCBzZXRTcGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0g
c3BhY2VVc2VkOyB9Ci0gICAgICAgIHZvaWQgcmVzZXRTcGFjZVVzZWQoKTsKKyAgICAgICAgdm9p
ZCByZXNldFNwYWNlVXNlZChDb25kaXRpb24gY29uZGl0aW9uID0gQ29uZGl0aW9uOjpOb25lKSBm
aW5hbDsKIAogICAgICAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2NF90
IGluY3JlYXNlKSB7IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSArPSBpbmNyZWFzZTsgfQogICAg
ICAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2NF90IGRlY3JlYXNlKQpA
QCAtMTY3LDcgKzE2NywxMCBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXRpYWxpemVTcGFj
ZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2
NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3Rp
bWF0ZWRTcGFjZUluY3JlYXNlOyB9CisgICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0
IGZpbmFsIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOworICAgICAgICAg
ICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOworICAgICAg
ICB9CiAgICAgICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJikgZmluYWw7CiAKICAgICAgICAgSURCU2VydmVyJiBtX3NlcnZlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMjc5YjMxNTkxNmJkMzlkOGQ0YTg2MDZlNzA1ZGI3
ZTU1ZDE5YWU3MC4uOTFkMDIxYTI2NWUxMGQ0NWFiNzZlNGEyY2YyOTA3YzQxNzQyMzg0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk4NCw3ICs5ODQsOCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdAogCiAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2Jq
ZWN0U3RvcmUoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHVpbnQ2NF90
IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCkgKyBrZXlQYXRoQmxvYi0+
c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5j
cmVhc2UgfTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQpAQCAtMTEwNSw5ICsxMTA2LDEzIEBA
IElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBTdHJpbmcg
b2xkTmFtZTsKKyAgICBpZiAoYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8t
PmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcikpCisgICAg
ICAgIG9sZE5hbWUgPSBvYmplY3RTdG9yZUluZm8tPm5hbWUoKTsKICAgICBtX2RhdGFiYXNlSW5m
by0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAot
ICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gbmV3
TmFtZS5zaXplSW5CeXRlcygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygpID8gbmV3TmFtZS5zaXpl
SW5CeXRlcygpIC0gb2xkTmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAgICByZXR1cm4gSURCRXJy
b3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCkK
QEAgLTExODQsNiArMTE4OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAoJWkp
IC0gJXMiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9zIH07
CiAgICAgfQorICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5
dGVzKCkgKyBrZXlQYXRoQmxvYi0+c2l6ZSgpOwogCiAgICAgLy8gV3JpdGUgaW5kZXggcmVjb3Jk
cyBmb3IgYW55IHJlY29yZHMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoaXMgb2JqZWN0IHN0b3Jl
LgogCkBAIC0xMjE0LDYgKzEyMjAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAgICAg
ICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgc2l6ZUluY3JlYXNlICs9
IGVycm9yLnNpemUoKTsKIAogICAgICAgICBpZiAoIWN1cnNvci0+YWR2YW5jZSgxKSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZHZhbmNpbmcgY3Vyc29yIHdoaWxlIGluZGV4aW5n
IGV4aXN0aW5nIHJlY29yZHMgZm9yIG5ldyBpbmRleC4iKTsKQEAgLTEyMzEsNyArMTIzOCw3IEBA
IElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKICAgICBv
YmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKIAotICAgIHJldHVybiBJREJFcnJv
ciB7IH07CisgICAgcmV0dXJuIElEQkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNy
ZWFzZSB9OwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZEhh
c0luZGV4UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCS2V5RGF0YSYg
aW5kZXhLZXksIGJvb2wmIGhhc1JlY29yZCkKQEAgLTEyOTEsNiArMTI5OCw3IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1aW50NjRfdCBzaXplSW5j
cmVhc2UgPSAwOwogICAgIGZvciAoYXV0byYgaW5kZXhLZXkgOiBpbmRleEtleXMpIHsKICAgICAg
ICAgaWYgKCFpbmRleEtleS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEy
OTksOSArMTMwNywxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tl
ZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgYwogICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHV0IGluZGV4IHJlY29yZCBmb3IgbmV3bHkgY3JlYXRlZCBpbmRl
eCIpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIHNpemVJ
bmNyZWFzZSArPSBlcnJvci5zaXplKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIElEQkVycm9yIHsg
fTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNl
IH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5k
ZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdl
YkNvcmU6OklEQktleURhdGEmIGtleVZhbHVlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBp
bmRleEtleSwgaW50NjRfdCByZWNvcmRJRCkKQEAgLTEzMzQsNyArMTM0Myw4IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW50NjRfdCBv
YmplY3RTdG9yZUlELCBpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZGV4S2V5QnVmZmVyLT5zaXplKCkg
KyB2YWx1ZUJ1ZmZlci0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvciB7IFdURjo6bnVsbG9w
dCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogCkBAIC0xNDE5LDkgKzE0MjksMTEgQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgfQogICAgIH0KIAorICAgIGF1dG8gb2xkTmFt
ZSA9IGluZGV4SW5mby0+bmFtZSgpOwogICAgIGluZGV4SW5mby0+cmVuYW1lKG5ld05hbWUpOwog
Ci0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBu
ZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1lLnNp
emVJbkJ5dGVzKCkgLSBvbGROYW1lLnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBJREJF
cnJvciB7IFdURjo6bnVsbG9wdCwgeyB9LCBzaXplSW5jcmVhc2UgfTsKIH0KIAogSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBrZXlFeGlzdHMpCkBAIC0x
Njg4LDYgKzE3MDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogCiAgICAgSURCRXJyb3Ig
ZXJyb3I7CiAgICAgYm9vbCBhbnlSZWNvcmRzU3VjY2VlZGVkID0gZmFsc2U7CisgICAgdWludDY0
X3Qgc2l6ZUluY3JlYXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4IDogaW5mby5pbmRleE1h
cCgpLnZhbHVlcygpKSB7CiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5OwogICAgICAgICBnZW5l
cmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRlKCks
IGluZGV4LCBqc1ZhbHVlLCBpbmRleEtleSwgaW5mby5rZXlQYXRoKCksIGtleSk7CkBAIC0xNjk5
LDYgKzE3MTIsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbElu
ZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgc2l6ZUluY3JlYXNlICs9
IGVycm9yLnNpemUoKTsKICAgICAgICAgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IHRydWU7CiAgICAg
fQogCkBAIC0xNzE2LDcgKzE3MzAsMTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
Ojp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHJldHVybiBlcnJvcjsKKyAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gZXJyb3I7CisKKyAgICByZXR1cm4gSURCRXJyb3IgeyBXVEY6Om51
bGxvcHQsIHsgfSwgc2l6ZUluY3JlYXNlIH07CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywg
Y29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAtMTc1
Nyw2ICsxNzc0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICByZWNvcmRJ
RCA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0KKyAgICB1aW50NjRfdCBz
aXplSW5jcmVhc2UgPSBrZXlCdWZmZXItPnNpemUoKSArIHZhbHVlLmRhdGEoKS5kYXRhKCktPnNp
emUoKTsKIAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKG9i
amVjdFN0b3JlSW5mbywga2V5RGF0YSwgdmFsdWUuZGF0YSgpLCByZWNvcmRJRCk7CiAKQEAgLTE3
NzIsNiArMTc5MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3Jk
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICAgICAgcmV0dXJu
IGVycm9yOwogICAgIH0KKyAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3Iuc2l6ZSgpOwogCiAgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzID0gdmFsdWUuYmxvYlVSTHMoKTsKICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVzID0gdmFsdWUuYmxvYkZpbGVQYXRocygpOwpA
QCAtMTc4Nyw2ICsxODA2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRS
ZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgICAg
ICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJs
b2IgcmVjb3JkIGluIGRhdGFiYXNlIl9zIH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAg
ICAgICAgc2l6ZUluY3JlYXNlICs9IHVybC5zaXplSW5CeXRlcygpOwogICAgICAgICBpbnQ2NF90
IHBvdGVudGlhbEZpbGVOYW1lSW50ZWdlciA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgp
OwogCiAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVS
TCwgbm90aGluZyBsZWZ0IHRvIGRvLgpAQCAtMTgyMiwxMSArMTg0MiwxMiBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aQogICAgICAgICB9CiAKICAgICAgICAgdHJhbnNhY3Rpb24tPmFkZEJsb2JG
aWxlKGJsb2JGaWxlc1tpXSwgc3RvcmVkRmlsZW5hbWUpOworICAgICAgICBzaXplSW5jcmVhc2Ug
Kz0gKHVybC5zaXplSW5CeXRlcygpICsgc3RvcmVkRmlsZW5hbWUuc2l6ZUluQnl0ZXMoKSk7CiAg
ICAgfQogCiAgICAgdHJhbnNhY3Rpb24tPm5vdGlmeUN1cnNvcnNPZkNoYW5nZXMob2JqZWN0U3Rv
cmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIElE
QkVycm9yIHsgV1RGOjpudWxsb3B0LCB7IH0sIHNpemVJbmNyZWFzZSB9OwogfQogCiBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNv
cmQoaW50NjRfdCBvYmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmlu
ZGV4IGQ4NWIwMDE0OGEyYTVjMzA2MGJhNTBjMGUxMjIwNzVjNjM1YmJjNGYuLmIxM2MzM2EzZjRh
MmVmNjk0NGNiZjIyNDE3ODQxZTYwOTBkYmM2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cApAQCAtNTUsNiArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIElEQlNl
cnZlciB7CiAKIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0
ID0gNDsKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3QgPSAx
MCAqIEtCOwogCiBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJL
ZXlEYXRhJiBrZXlEYXRhKQogewpAQCAtODgsMTAgKzg5LDIzIEBAIHN0YXRpYyBpbmxpbmUgdWlu
dDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gc2l6
ZTsKIH0KIAorc3RhdGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlQYXRoLCBbXShj
b25zdCBTdHJpbmcmIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2l6ZUluQnl0ZXMoKTsK
KyAgICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsKKyAgICAgICAgdWludDY0
X3Qgc2l6ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpCisgICAgICAgICAg
ICBzaXplICs9IHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAg
fSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQklu
ZGV4SW5mbyYgaW5mbykKIHsKICAgICB1aW50NjRfdCBzaXplID0gNDsKICAgICBzaXplICs9IGlu
Zm8ubmFtZSgpLnNpemVJbkJ5dGVzKCk7CisgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoaW5mby5r
ZXlQYXRoKCkpOwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC05OSw5ICsxMTMsOCBAQCBzdGF0
aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8m
IGluZm8pCiB7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6ZSArPSBpbmZvLm5hbWUo
KS5zaXplSW5CeXRlcygpOwotICAgIC8vIEZJWE1FOiBlc3RpbWF0ZSBrZXlQYXRoLgotICAgIGZv
ciAoYXV0byYgaW5kZXhJbmZvIDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKQotICAgICAgICBz
aXplICs9IGVzdGltYXRlU2l6ZShpbmRleEluZm8pOworICAgIGlmIChhdXRvIGtleVBhdGggPSBp
bmZvLmtleVBhdGgoKSkKKyAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoKmtleVBhdGgpOwog
ICAgIHJldHVybiBzaXplOwogfQogCkBAIC0yMDcsNiArMjIwLDIzIEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3RpCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShj
YWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVh
c2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIG1f
c2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCks
IHRhc2tTaXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50aWZp
ZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJ
bmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUp
Cit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5k
KGlkZW50aWZpZXIpOworICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNl
VGFza3MuZW5kKCkpIHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgaWYg
KGFjdHVhbFRhc2tTaXplKQorICAgICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2Vk
KG1faWRlbnRpZmllci5vcmlnaW4oKSwgYWN0dWFsVGFza1NpemUpOworICAgICAgICBtX3BlbmRp
bmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRP
cGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAgLTIxOSw3ICsyNDksNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAg
bV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSB0cnVlOwogICAgICAgICAgICAgLy8gV2UgZG8gbm90
IGtub3cgd2hldGhlciB0aGlzIGlzIGFuIGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgogICAg
ICAgICAgICAgLy8gV2Ugc2V0IGEgc21hbGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJs
ZSB0byBvcGVuIGFuIGluZmluaXRlIG51bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1f
c2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVP
cGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBk
ZWNpc2lvbikgbXV0YWJsZSB7CisgICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1f
aWRlbnRpZmllci5vcmlnaW4oKSwgZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKSwgc2l6ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29z
dF0oYXV0byBkZWNpc2lvbikgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzUsNyArMjY1LDkgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGNhc2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAg
ICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlx
dWVDYWxsYmFja0lkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayhjYWxsYmFja0lELCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiAg
ICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0zNDgsNyAr
MzgwLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9y
ZSkgewogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAg
ICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwog
CiAgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3Rv
cmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwpAQCAtMzY0LDcgKzM5
NSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24g
PSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJh
Y2tpbmdTdG9yZSgpOwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+
ZGF0YWJhc2VTaXplKCk7CiAgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNr
aW5nU3RvcmUsIGRlbGV0ZWRWZXJzaW9uKSk7CkBAIC00MDAsMTAgKzQzMCw4IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmICht
X2JhY2tpbmdTdG9yZSkgeworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNr
aW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5n
U3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotICAgIH0KIAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVs
bHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25z
ID0gZmFsc2U7CkBAIC00MjIsOCArNDUwLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
U2h1dGRvd25Gb3JDbG9zZSgpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlz
RW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRl
U3BhY2VVc2VkSWZOZWVkZWQoKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVs
ZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQpAQCAtNDU1LDggKzQ4MSw2
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRf
dCBkZWxldGVkVmVyc2lvbikKICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxw
dHI7CiAgICAgfQogCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVs
ZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzcyA9IGZhbHNlOwogCiAgICAgaWYgKG1faGFyZENsb3Nl
ZEZvclVzZXJEZWxldGUpCkBAIC01MzcsMTQgKzU2MSwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFi
YXNlOjphbGxDb25uZWN0aW9uc0FyZUNsb3NlZE9yQ2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRp
ZmllcigpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFj
a0lkZW50aWZpZXIoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGlj
IHVpbnQ2NF90IGN1cnJlbnRJRCA9IDA7CiAgICAgcmV0dXJuICsrY3VycmVudElEOwogfQogCi11
aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9y
Q2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJ
REJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAgICBj
YWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCkpOwpAQCAtNTU1LDE2ICs1NzksMTEg
QEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihF
cnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHUKICAgICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3Mu
Y29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZp
ZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBt
X3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigp
LCB0YXNrU2l6ZSk7Ci0gICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChp
ZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci0gICAgfQotCiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVu
ZChpZGVudGlmaWVyKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5p
cXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2sm
JiBjYWxsYmFjaywgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFz
ZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQog
ewogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNr
KElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSwgeyB9KTsKQEAgLTU3NSwxMSArNTk0LDYgQEAg
dWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlE
YXRhQ2FsbGJhY2smJiBjYWxsYmFjaywKICAgICBBU1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5j
b250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlm
aWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAg
bV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQo
aWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0KLQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBl
bmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkBAIC03ODAsNyArNzk0
LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihS
ZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rp
b25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUo
Y29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIs
IHRoaXMpOwpAQCAtNzkyLDE1ICs4MDYsMTcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKIAog
ICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3
aGljaCBjb250YWlucyB0aGUKICAgICAvLyBzaXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9j
dXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAg
IGF1dG8gZGF0YWJhc2VTaXplQmVmb3JlT3BlbiA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNp
emUoKTsKIAogICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUlu
Zm8pOwogCi0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUlu
Zm8sIGVycm9yKSk7CisgICAgYXV0byBkYXRhYmFzZVNpemVBZnRlck9wZW4gPSBtX2JhY2tpbmdT
dG9yZS0+ZGF0YWJhc2VTaXplKCk7CisgICAgYXV0byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNl
U2l6ZUFmdGVyT3BlbiA+IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAoZGF0YWJhc2VTaXplQWZ0
ZXJPcGVuIC0gZGF0YWJhc2VTaXplQmVmb3JlT3BlbikgOiAwOworICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUs
IGNhbGxiYWNrSWRlbnRpZmllcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRP
cGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJy
b3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0
X3QgYWN0dWFsVGFza1NpemUsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTgxMSw3ICs4MjcsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9y
ZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNw
YWNlVXNlZElmTmVlZGVkKCk7CisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBhY3R1YWxUYXNrU2l6ZSk7CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNl
ckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtODM2LDEwICs4NTIsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVy
cm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3Jl
Q2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3Rh
cnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFi
YXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCku
aWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAgLTg0OSw5ICs4NjYsOCBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgaW5mbyk7CisgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVP
YmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3Ig
ZXJyb3I7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKIH0KIApAQCAtODYwLDEwICs4NzYsMTMg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKwor
ICAgIElEQkVycm9yIGNyZWF0ZUVycm9yOworICAgIGlmIChjcmVhdGVFcnJvci5pc051bGwoKSkK
ICAgICAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAK
LSAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAg
ICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGNyZWF0ZUVycm9yKTsK
IH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3Rv
cmVOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQpAQCAtOTM1LDcgKzk1NCw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVj
dFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC05NDUsNiArOTY0LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUs
IFVuaXEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRh
c2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmpl
Y3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk1NCw5ICs5NzQsOCBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBh
dXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVy
cm9yIGVycm9yOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3Jl
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05h
bWUpKTsKIH0KIApAQCAtOTY1LDEwICs5ODQsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAg
aWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3Iuc2l6ZSgpKTsKKworICAgIElEQkVycm9yIHJlbmFtZUVycm9yOwor
ICAgIGlmIChyZW5hbWVFcnJvci5pc051bGwoKSkKICAgICAgICAgbV9kYXRhYmFzZUluZm8tPnJl
bmFtZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBw
ZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBwZXJm
b3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIHJlbmFtZUVycm9yKTsKIH0KIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQpAQCAtMTAzMCw5ICsxMDUyLDEwIEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0
ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNr
IGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxs
YmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKKyAgICBzdGFydFNwYWNlSW5jcmVh
c2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRl
SW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8p
KTsKIH0KIApAQCAtMTA2Niw2ICsxMDg5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAg
ICAgICAgb2JqZWN0U3RvcmVJbmZvLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOwogICAgIH0KIAor
ICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Iuc2l6
ZSgpKTsKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
KTsKIH0KIApAQCAtMTE0Nyw3ICsxMTcxLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVu
YW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTE2Myw2ICsxMTg3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRh
c2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRl
eCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtMTE3Miw5
ICsxMTk3LDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKICAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVJbmRleCh0cmFu
c2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVy
LCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIG5ld05hbWUpOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTEx
ODMsNyArMTIwNywxMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsK
KyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnNp
emUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVFcnJvcjsKKyAgICBpZiAocmVuYW1lRXJyb3Iu
aXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUlu
Zm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAg
ICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8pOwogICAgICAgICBpZiAob2JqZWN0U3RvcmVJ
bmZvKSB7CkBAIC0xMTkzLDcgKzEyMjAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVy
LCByZW5hbWVFcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZh
bHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRl
TW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQpAQCAtMTIxMyw5ICsxMjQwLDEwIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRk
QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYg
cmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2
YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwg
S2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBz
dG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAg
ICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUo
Y2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKKyAgICBz
dGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRl
bnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwg
dmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApAQCAtMTI5MSw4ICsxMzE5LDExIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAob3Zl
cndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3Zlcndy
aXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmIGtleURh
dGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7Cisg
ICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQo
KSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcikgeworICAg
ICAgICBhdXRvIHVwZGF0ZUVycm9yID0gbV9iYWNraW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVFcnJvci5pc051bGwoKSkK
KyAgICAgICAgICAgIGVycm9yID0gdXBkYXRlRXJyb3I7CisgICAgfQogCiAgICAgZ2VuZXJhdGVk
S2V5UmVzZXR0ZXIucmVsZWFzZSgpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9y
QWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CkBAIC0xMzAzLDYgKzEz
MzQsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVB1dE9yQWRkIik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLnNpemUoKSk7CiAgICAgcGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHRLZXkpOwogfQogCkBAIC0yMDk3LDkgKzIxMjks
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKENyb3NzVGhyZWFk
VGFzayYmIHRhc2spCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tS
ZXBseShDcm9zc1RocmVhZFRhc2smJiB0YXNrKQogewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkK
LSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXpl
KCk7Ci0KICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAg
ICAgbV9zZXJ2ZXItPnBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSkp
OwogfQpAQCAtMjE2NCw4ICsyMTkzLDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRp
YXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAK
LSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5jbGVhcigpOwotICAgIG1fc2VydmVy
LT5yZXNldFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCkpOworICAgIGZvciAoYXV0byBz
aXplIDogbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnZhbHVlcygpKQorICAgICAgICBtX3Nl
cnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBz
aXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuY2xlYXIoKTsKIAogICAgIC8v
IEVycm9yIG91dCBhbGwgdHJhbnNhY3Rpb25zCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDog
Y29weVRvVmVjdG9yKG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5rZXlzKCkpKQpAQCAtMjI0MSwz
MyArMjI3MSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNl
ckRlbGV0ZSgpCiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5n
U3RvcmUpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZO
ZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAob3B0aW9uYWxDYWxsYmFja0lk
ZW50aWZpZXIpIHsKLSAgICAgICAgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyID0gb3B0aW9u
YWxDYWxsYmFja0lkZW50aWZpZXIudmFsdWUoKTsKLSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
cGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmZpbmQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLSAg
ICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmVuZCgp
KSB7Ci0gICAgICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgICAgICAgICAgbV9wZW5k
aW5nU3BhY2VJbmNyZWFzaW5nVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHVpbnQ2NF90IGRhdGFiYXNlU2l6ZSA9IG1fbmV3RGF0YWJhc2VTaXplOwotICAg
IGlmIChkYXRhYmFzZVNpemUgIT0gbV9jdXJyZW50RGF0YWJhc2VTaXplKSB7Ci0gICAgICAgIGlm
IChkYXRhYmFzZVNpemUgPiBtX2N1cnJlbnREYXRhYmFzZVNpemUpCi0gICAgICAgICAgICBtX3Nl
cnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkYXRhYmFzZVNp
emUgLSBtX2N1cnJlbnREYXRhYmFzZVNpemUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X3NlcnZlci0+ZGVjcmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBtX2N1cnJl
bnREYXRhYmFzZVNpemUgLSBkYXRhYmFzZVNpemUpOwotICAgICAgICBtX2N1cnJlbnREYXRhYmFz
ZVNpemUgPSBkYXRhYmFzZVNpemU7Ci0gICAgfQotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQkVycm9yJiBlcnJvcikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFj
a0lkZW50aWZpZXIpOwotCiAgICAgYXV0byBjYWxsYmFjayA9IG1fZXJyb3JDYWxsYmFja3MudGFr
ZShjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9z
ZWRGb3JVc2VyRGVsZXRlKTsKICAgICBpZiAoY2FsbGJhY2spIHsKQEAgLTIyNzksOCArMjI4NCw2
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUtleURhdGFDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QkVycm9yJiBlcnJvciwgY29uc3QgSURCS2V5RGF0YSYgcmVzdWx0S2V5KQogewotICAgIHVwZGF0
ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxi
YWNrID0gbV9rZXlEYXRhQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBB
U1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNh
bGxiYWNrKSB7CkBAIC0yMzI1LDggKzIzMjgsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQ291bnRDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2sodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyKQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNr
SWRlbnRpZmllcik7Ci0KICAgICBBU1NFUlQobV9lcnJvckNhbGxiYWNrcy5jb250YWlucyhjYWxs
YmFja0lkZW50aWZpZXIpKTsKICAgICBBU1NFUlQobV9jYWxsYmFja1F1ZXVlLmxhc3QoKSA9PSBj
YWxsYmFja0lkZW50aWZpZXIpOwogICAgIG1fY2FsbGJhY2tRdWV1ZS5yZW1vdmVMYXN0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDUzYjIxZGZlNGQyMWRhNTVmZmNhNmYwNmZiMDZiMjI3
NWMxZWNmOGQuLjEwNGUyZjdhYjFmYWY2ZTRkZWRiZjIyMDU0NjkxMzJhNTY5NjBjODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xMTYsOCArMTE2LDYgQEAgcHVibGljOgogCiAgICAgYm9v
bCBoYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZv
clVzZXJEZWxldGU7IH0KIAotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0OwotCiAgICAg
dm9pZCBmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKTsKIAogcHJpdmF0ZToKQEAgLTE2MCw3ICsx
NTgsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAg
ICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsK
LSAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7
CisgICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJh
bnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRU
cmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNh
Y3Rpb25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4OCw3
ICsxODYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAg
dm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAg
IHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJ
REJFcnJvciYpOworICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplLCB1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0
b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCBjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2b2lkIGRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpOwpAQCAtMjEx
LDggKzIwOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRQZXJmb3JtVW5jb25kaXRpb25hbERl
bGV0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgZGlkU2h1dGRvd25Gb3JDbG9zZSgpOwogCi0g
ICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiwgdWlu
dDY0X3QgdGFza1NpemUgPSAwKTsKLSAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoS2V5RGF0YUNhbGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7CisgICAgdWludDY0
X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJik7CisgICAgdWludDY0
X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmKTsKICAgICB1aW50
NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0QWxsUmVzdWx0c0NhbGxiYWNrJiYpOwog
ICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihHZXRSZXN1bHRDYWxsYmFjayYm
KTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoQ291bnRDYWxsYmFjayYm
KTsKQEAgLTI0OSw3ICsyNDcsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVxdWVzdFNwYWNl
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3Qg
Y2hhciogZXJyb3JNZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVy
cm9yPiYmKT4mJik7CiAgICAgdm9pZCB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25h
bDxJREJFcnJvcj4mJik+JiYpOwotICAgIHZvaWQgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0
aW9uYWw8dWludDY0X3Q+IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0
KTsKKyAgICB2b2lkIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwg
dWludDY0X3QgdGFza1NpemUpOworICAgIHZvaWQgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sodWlu
dDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUpOworCisgICAgc3RhdGlj
IHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CiAKICAgICBSZWY8
SURCU2VydmVyPiBtX3NlcnZlcjsKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9pZGVudGlm
aWVyOwpAQCAtMzAyLDcgKzMwMyw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PElEQlJlc291
cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRjaGVzOwogCi0gICAgSGFzaE1hcDx1aW50NjRf
dCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzOworICAgIEhhc2hNYXA8
dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3M7CiAgICAgdWlu
dDY0X3QgbV9jdXJyZW50RGF0YWJhc2VTaXplIHsgMCB9OwogICAgIHVpbnQ2NF90IG1fbmV3RGF0
YWJhc2VTaXplIHsgMCB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCmluZGV4IDY1MmQwYTgxN2Y1YzUzYzcwMzgzZjAx
NGUxZWViYTE4MGEyNjhkNGMuLjcxMTg0Y2Y3ODJiYWUyNDU5NjAxY2JiYmQ4N2FkMTdjM2JkMDg4
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJFcnJvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkVycm9yLmNwcApAQCAtMzIsMTUgKzMyLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSURCRXJyb3I6OklEQkVycm9yKE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+IGNvZGUsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK0lEQkVycm9yOjpJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25D
b2RlPiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVpbnQ2NF90IHNpemUpCiAgICAgOiBt
X2NvZGUoY29kZSkKICAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQorICAgICwgbV9zaXplKHNpemUp
CiB7CiB9CiAKIElEQkVycm9yIElEQkVycm9yOjppc29sYXRlZENvcHkoKSBjb25zdAogewotICAg
IHJldHVybiBJREJFcnJvciB7IG1fY29kZSwgbV9tZXNzYWdlLmlzb2xhdGVkQ29weSgpIH07Cisg
ICAgcmV0dXJuIElEQkVycm9yIHsgbV9jb2RlLCBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCksIG1f
c2l6ZSB9OwogfQogCiBTdHJpbmcgSURCRXJyb3I6Om5hbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAppbmRleCAzYTk1
YmIzODA1MGRlYWIyOGMyZGMxYTdhZTY1ZmUyN2Y2YWY4ODU2Li5mMGU1NzUxZmM0ODRhMDE2M2Ri
OGQ5OTEyMWY3Mjg4MWU2YWQxOWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIElEQkVycm9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9w
dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBs
aWNpdCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlID0geyB9LCB1aW50NjRfdCBzaXplID0gMCk7CiAKICAgICBzdGF0
aWMgSURCRXJyb3IgdXNlckRlbGV0ZUVycm9yKCkKICAgICB7CkBAIC01NCw2ICs1NCw3IEBAIHB1
YmxpYzoKICAgICBTdHJpbmcgbWVzc2FnZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiAhbV9jb2RlOyB9CisgICAgdWludDY0X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogCiAgICAgSURCRXJyb3IgaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAKQEAg
LTYzLDYgKzY0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBPcHRpb25hbDxFeGNlcHRpb25D
b2RlPiBtX2NvZGU7CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsKKyAgICB1aW50NjRfdCBtX3NpemU7
CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5kZXggNzY3YWQyZWFmNGFjY2I4MzE5MDQ0MjI4
OTcwNjk0OWI3MGIzNDMwZS4uZDRhZGZhMmU2MjExYzE4NTMwNGI0ZmJlZDdjZmQ3OGE2YWIzMTAz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3Bw
CkBAIC04NCw4ICs4NCw3IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5p
dGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAgICAgICBpZiAoIW1fcGVuZGluZ0lu
aXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAgcHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0cyh7IH0sIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpObyk7Cisg
ICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAgICB9KTsKIH0KIApAQCAtMTE5
LDcgKzExOCw3IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdl
UXVvdGFVc2VyJiB1c2VyKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAg
aWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQ
ZW5kaW5nUmVxdWVzdDo6Tm8pOworICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMoeyB9KTsKICAgICAgICAgfSk7CiAgICAgfQogfQpAQCAtMTI3LDcgKzEyNiw3IEBA
IHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1
c2VyKQogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3Bh
Y2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKCFtX3Bl
bmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBw
ZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7CisgICAgICAgIG1fcGVu
ZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spLCBQ
ZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlVuaGFuZGxlZH0pOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMzksMTMgKzEzOCwyMiBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVl
c3RTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJhY2smJgogICAgIGlu
aXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7CiAKICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0
aW9uVXNlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7
IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOworICAgICAgICBtX3BlbmRpbmdS
ZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgUGVuZGlu
Z1JlcXVlc3Q6OlN0YXRlOjpVbmhhbmRsZWR9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIGlmICghbV9oYXNTdGFydGVkSGFuZGxpbmdSZXF1ZXN0cyAmJiAhbV9xdW90YSkgeworICAg
ICAgICB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlKCk7CisgICAgICAgIG1faGFzU3RhcnRl
ZEhhbmRsaW5nUmVxdWVzdHMgPSB0cnVlOworICAgIH0KKwogICAgIGlmIChzaG91bGRBc2tGb3JN
b3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpIHsKLSAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBw
ZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7Ci0gICAgICAgIGFza0Zv
ck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKKyAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBw
ZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjayksIFBlbmRpbmdSZXF1ZXN0OjpT
dGF0ZTo6VXNlclNwYWNlVXNlZFJlc2V0IH0pOworCisgICAgICAgIC8vIFRyeSBwcm9jZXNzaW5n
IHJlcXVlc3QgYWdhaW4gYWZ0ZXIgbWFraW5nIHN1cmUgdXNlcidzIHVzYWdlIGlzIGFjY3VyYXRl
LgorICAgICAgICBmb3IgKGF1dG8gdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKKyAgICAg
ICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2VkKFN0b3JhZ2VRdW90YVVzZXI6OkNvbmRpdGlvbjo6
SW5kZXhlZERCT25seSk7CisKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTY2LDExICsx
NzQsMTEgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0
X3Qgc3BhY2VJbmNyZWFzZSkKICAgICAgICAgUkVMRUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlIHJlY2VpdmVkIHJlc3BvbnNlICUiIFBS
SXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEgOiAwKTsKIAogICAgICAgICBtX2lzV2Fp
dGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSA9IGZhbHNlOwotICAgICAgICBwcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKG5ld1F1b3RhLCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6
WWVzKTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSk7CiAgICAgfSk7
CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhP
cHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1
ZXN0IHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0KQordm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90
YSkKIHsKICAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CkBAIC0xODQsNyArMTkyLDEyIEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vz
c1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNoCiAgICAgaWYg
KCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0ID09IFNob3VsZERl
cXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpZZXMpIHsKKyAgICBpZiAoIW1faGFzU3RhcnRlZEhh
bmRsaW5nUmVxdWVzdHMgJiYgIW1fcXVvdGEpIHsKKyAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9u
U3BhY2VVc2FnZSgpOworICAgICAgICBtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuZmlyc3QoKS5zdGF0ZSA9PSBQ
ZW5kaW5nUmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQpIHsKICAgICAgICAg
YXV0byByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIGJv
b2wgc2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNw
YWNlSW5jcmVhc2UpOwogCkBAIC0xOTcsOSArMjEwLDE4IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEs
IFNoCiAgICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwog
CiAgICAgICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNl
KSkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdGUgPT0gUGVuZGluZ1JlcXVlc3Q6OlN0
YXRlOjpVbmhhbmRsZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgcHJvY2Vzc2luZyByZXF1
ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIHVzZXIncyB1c2FnZSBpcyBhY2N1cmF0ZS4KKyAg
ICAgICAgICAgICAgICByZXF1ZXN0LnN0YXRlID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVc2Vy
U3BhY2VVc2VkUmVzZXQ7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHVzZXIgOiBjb3B5VG9W
ZWN0b3IobV91c2VycykpCisgICAgICAgICAgICAgICAgICAgIHVzZXItPnJlc2V0U3BhY2VVc2Vk
KFN0b3JhZ2VRdW90YVVzZXI6OkNvbmRpdGlvbjo6SW5kZXhlZERCT25seSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXF1ZXN0LnN0YXRl
ID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkOwogICAgICAg
ICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHJlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3Jl
YXNlICs9IHJlcXVlc3Quc3BhY2VJbmNyZWFzZTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGVu
ZGluZ1JlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgICAgICAgICBzcGFjZUlu
Y3JlYXNlICs9IHBlbmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CiAgICAgICAgICAgICBhc2tG
b3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXgg
OWY2NDYzM2VkNjZjYzEyYTkyODNjMDg5MWJkMjU1YWU5MzA0MmFiNy4uZDgzODI4OGU1MTA3Nzg1
ZjUzMGE3YzM4NDczOTA5MWU1M2RkMzE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlUXVvdGFNYW5hZ2VyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYpOwogCiAgICAgZW51bSBjbGFz
cyBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCB7IE5vLCBZZXMgfTsKLSAgICB2b2lk
IHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+LCBTaG91bGREZXF1ZXVl
Rmlyc3RQZW5kaW5nUmVxdWVzdCk7CisgICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9w
dGlvbmFsPHVpbnQ2NF90Pik7CiAKICAgICB1aW50NjRfdCBtX3F1b3RhIHsgMCB9OwogCkBAIC04
MCwxMSArODAsMTUgQEAgcHJpdmF0ZToKIAogICAgIGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVk
Q2FsbGVkIHsgTm8sIFllcyB9OwogICAgIEhhc2hNYXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5J
bml0aWFsaXplZENhbGxlZD4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNo
U2V0PGNvbnN0IFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOworICAgIEhhc2hTZXQ8U3RvcmFn
ZVF1b3RhVXNlcio+IG1fdXNlcnM7CisKKyAgICBib29sIG1faGFzU3RhcnRlZEhhbmRsaW5nUmVx
dWVzdHMgeyBmYWxzZSB9OwogCiAgICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsKKyAgICAgICAg
ZW51bSBjbGFzcyBTdGF0ZSB7IFVuaGFuZGxlZCwgVXNlclNwYWNlVXNlZFJlc2V0LCBTcGFjZUlu
Y3JlYXNlUmVxdWVzdGVkIH07CiAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7CiAgICAg
ICAgIFJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKKyAgICAgICAgU3RhdGUgc3RhdGU7CiAgICAg
fTsKICAgICBEZXF1ZTxQZW5kaW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAppbmRleCBiNDIzMGM1ZTEyZDA5
NGQ2OTllMWUyOTk3OTE2NGFmNWI3YzgzOGUwLi5kZmQxMTM1ZThiYWJmNDMyZmQzOWNjMzRjNzhj
MTIwMDY1ZDVjM2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YVVzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIu
aApAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RvcmFnZVF1b3RhVXNl
cigpID0gZGVmYXVsdDsKIAogICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3Qg
PSAwOworICAgIGVudW0gY2xhc3MgQ29uZGl0aW9uIHsgTm9uZSwgSW5kZXhlZERCT25seSB9Owor
ICAgIHZpcnR1YWwgdm9pZCByZXNldFNwYWNlVXNlZChDb25kaXRpb24pIHsgcmV0dXJuOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY2FsbGJhY2spIHsgY2FsbGJhY2soKTsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNo
ZXMuY3BwCmluZGV4IDIzODc5NDE2ZmZkYzNkMjEzMDY3ZDFlMjc5NTE3ZWUxNGNiYjVhNmMuLjEz
MjZhZDVlMjJlMWExY2NkNzE3OTQ3ZjM1NDE3OTk4OTEwMTYzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlcy5jcHAKQEAgLTYwNSw4ICs2MDUsMTEgQEAgdm9pZCBDYWNoZXM6OnJlbW92ZUNh
Y2hlRW50cnkoY29uc3QgTmV0d29ya0NhY2hlOjpLZXkmIGtleSkKICAgICBtX3N0b3JhZ2UtPnJl
bW92ZShrZXkpOwogfQogCi12b2lkIENhY2hlczo6cmVzZXRTcGFjZVVzZWQoKQordm9pZCBDYWNo
ZXM6OnJlc2V0U3BhY2VVc2VkKENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgaWYgKGNvbmRp
dGlvbiA9PSBDb25kaXRpb246OkluZGV4ZWREQk9ubHkpCisgICAgICAgIHJldHVybjsKKwogICAg
IG1fc2l6ZSA9IDA7CiAgICAgaWYgKG1fcXVvdGFNYW5hZ2VyKSB7CiAgICAgICAgIG1fcXVvdGFN
YW5hZ2VyLT5yZW1vdmVVc2VyKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4
IDNjNDUxYTcyM2UxZTkyZjU1OWY2ZmJjZWY3ZjFmMzMxMTg5MDJmYWUuLjk5NTJhMWYxMTkxYWMx
OWRkMTM0NzZiMzhkOWViYjRiM2MyZTBiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApA
QCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyKFdURjo6Q29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIGNsZWFyTWVtb3J5UmVwcmVzZW50YXRpb24o
KTsKLSAgICB2b2lkIHJlc2V0U3BhY2VVc2VkKCk7CisgICAgdm9pZCByZXNldFNwYWNlVXNlZChD
b25kaXRpb24gY29uZGl0aW9uID0gQ29uZGl0aW9uOjpOb25lKSBmaW5hbDsKIAogICAgIHVpbnQ2
NF90IHN0b3JhZ2VTaXplKCkgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379838</attachid>
            <date>2019-09-30 13:07:48 -0700</date>
            <delta_ts>2019-10-01 13:22:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20190930130748.patch</filename>
            <type>text/plain</type>
            <size>49827</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFhNzE4NzQ5NmE5NmNk
ODc1ZjY4OWNmY2IzNmVlYjFjMjYyOTg2NS4uNTA4Y2MxNTZlZTI5ODQzMTQ2ODI0NzYxZDliNjQw
NzVjMDc2YmQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE5LTA5LTMwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisgCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEN1cnJlbnRseSB3ZSByZWFkIHNpemUgb2YgSW5kZXhlZERCIGRhdGFiYXNlIGZp
bGVzIHdoZW4gYSBkYXRhYmFzZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLiBUaGlzIGZpbGUgc3lz
dGVtCisgICAgICAgIG9wZXJhdGlvbiBpcyBzbG93LgorCisgICAgICAgIEFuIGVmZmljaWVudCBh
bHRlcm5hdGl2ZSBpcyB0byBjb21wdXRlIHRoZSBzcGFjZSBhdmFpbGFibGUsIGVzdGltYXRlIHNw
YWNlIGluY3JlYXNlIGZvciBlYWNoIG9wZWFydGlvbiwgYW5kIGdldAorICAgICAgICB0aGUgYWNj
dXJhdGUgZmlsZSBzaXplIG9ubHkgd2hlbiB0aGUgYWNjdW11bGF0ZWQgZXN0aW1hdGVkIGluY3Jl
YXNlIGlzIGJpZ2dlciB0aGFuIHNwYWNlIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGFsc28gbWFrZXMgc2l6ZSBlc3RpbWF0ZSBmb3IgSURCIHRhc2tzIG1vcmUgYWNjdXJhdGUuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlRXhhY3RTcGFjZVVz
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6
aW5pdGlhbGl6ZVNwYWNlVXNlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVuY2hlY2tlZFB1dEluZGV4S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6ZXN0aW1hdGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUN1cnJlbnRPcGVuT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9yQ2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
RGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hl
Y2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFm
dGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUlu
ZGV4QWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
UmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6cG9zdERhdGFiYXNlVGFza1JlcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVT
cGFjZVVzZWRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkVycm9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjpjcmVhdGVO
dWxsRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OklEQkVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkVycm9yOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRXJyb3I6OnRhc2tTaXplIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkVycm9yOjpJREJF
cnJvcik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMp
OgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorICAgICAgICAqIHN0
b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
VXNlcjo6Y29tcHV0ZUV4YWN0U3BhY2VVc2VkKToKKwogMjAxOS0wOS0zMCAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVuZGVyTGluZUJyZWFrIHNob3VsZCB1
c2UgTGluZUxheW91dFRyYXZlcnNhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBiNTllZDdmMjI0NDcwNDE0N2Zk
MTkwYTFkMTdmYTg5NGQzOWZjYjBjLi4yNTk1NTc2OTlkNDIxMzk2ODYxYjQwZjljNDMxNDc5Y2Rj
YTZhNWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNzExLDkgKzcxMSw2IEBAIElEQlNlcnZlcjo6UXVvdGFV
c2VyOjp+UXVvdGFVc2VyKCkKIAogdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFj
ZVVzZWQoKQogewotICAgIG1fc3BhY2VVc2VkID0gMDsKLSAgICBtX2VzdGltYXRlZFNwYWNlSW5j
cmVhc2UgPSAwOwotCiAgICAgaWYgKCFtX21hbmFnZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzMyLDYgKzcyOSwxMSBAQCB2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNl
ZCgpCiAgICAgbV9tYW5hZ2VyLT5hZGRVc2VyKCp0aGlzKTsKIH0KIAordm9pZCBJREJTZXJ2ZXI6
OlF1b3RhVXNlcjo6Y29tcHV0ZUV4YWN0U3BhY2VVc2VkKCkKK3sKKyAgICByZXNldFNwYWNlVXNl
ZCgpOworfQorCiB2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjppbmNyZWFzZVNwYWNlVXNlZCh1
aW50NjRfdCBzaXplKQogewogICAgIGlmICghbV9pc0luaXRpYWxpemVkKQpAQCAtNzYxLDYgKzc2
Myw3IEBAIHZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluaXRpYWxpemVTcGFjZVVzZWQodWlu
dDY0X3Qgc3BhY2VVc2VkKQogewogICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQgfHwgIW1fZXN0
aW1hdGVkU3BhY2VJbmNyZWFzZSk7CiAgICAgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7CisgICAg
bV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKICAgICBtX2lzSW5pdGlhbGl6ZWQgPSB0cnVl
OwogCiAgICAgaWYgKGF1dG8gY2FsbGJhY2sgPSBXVEZNb3ZlKG1faW5pdGlhbGl6YXRpb25DYWxs
YmFjaykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmgKaW5kZXggMTllNjk2MmVkMTlhYmE1NDAzMmNhMDQ0NzI0ZWQxMTE1MzU0YTVh
Zi4uMTYzN2Q0MWMyNjRlN2QzODQzYjY5YWZkYjZlMTVhYzFiY2IxOWExYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAt
MTU0LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgdm9pZCBzZXRTcGFjZVVzZWQodWlu
dDY0X3Qgc3BhY2VVc2VkKSB7IG1fc3BhY2VVc2VkID0gc3BhY2VVc2VkOyB9CiAgICAgICAgIHZv
aWQgcmVzZXRTcGFjZVVzZWQoKTsKKyAgICAgICAgdm9pZCBjb21wdXRlRXhhY3RTcGFjZVVzZWQo
KSBmaW5hbDsKIAogICAgICAgICB2b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2
NF90IGluY3JlYXNlKSB7IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZSArPSBpbmNyZWFzZTsgfQog
ICAgICAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKHVpbnQ2NF90IGRlY3JlYXNl
KQpAQCAtMTY3LDcgKzE2OCwxMSBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXRpYWxpemVT
cGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9l
c3RpbWF0ZWRTcGFjZUluY3JlYXNlOyB9CisgICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNv
bnN0IGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQp
OworICAgICAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3Jl
YXNlOworICAgICAgICB9CiAgICAgICAgIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJikgZmluYWw7CiAKICAgICAgICAgSURCU2VydmVyJiBtX3NlcnZlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMjc5YjMxNTkxNmJkMzlkOGQ0
YTg2MDZlNzA1ZGI3ZTU1ZDE5YWU3MC4uMWM5NThiMDJkMDcyYjcyYTMwODFjMDNmNzYwYTU0MDAy
YWYyZWFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTk4NCw3ICs5
ODQsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogCiAgICAgbV9kYXRhYmFzZUluZm8tPmFk
ZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9Owor
ICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZm8ubmFtZSgpLnNpemVJbkJ5dGVzKCkgKyBr
ZXlQYXRoQmxvYi0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvcjo6Y3JlYXRlTnVsbEVycm9y
KHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVs
ZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKQEAgLTExMDUsOSArMTEw
NiwxMyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgICAgICB9CiAgICAgfQogCisgICAg
U3RyaW5nIG9sZE5hbWU7CisgICAgaWYgKGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJh
c2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIp
KQorICAgICAgICBvbGROYW1lID0gb2JqZWN0U3RvcmVJbmZvLT5uYW1lKCk7CiAgICAgbV9kYXRh
YmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFt
ZSk7CiAKLSAgICByZXR1cm4gSURCRXJyb3IgeyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFz
ZSA9IG5ld05hbWUuc2l6ZUluQnl0ZXMoKSA+IG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA/IG5ld05h
bWUuc2l6ZUluQnl0ZXMoKSAtIG9sZE5hbWUuc2l6ZUluQnl0ZXMoKSA6IDA7CisgICAgcmV0dXJu
IElEQkVycm9yOjpjcmVhdGVOdWxsRXJyb3Ioc2l6ZUluY3JlYXNlKTsKIH0KIAogSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlE
KQpAQCAtMTE4NCw2ICsxMTg5LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpj
cmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgYWRkIGluZGV4ICclcycgdG8gSW5kZXhJbmZvIHRhYmxlICgl
aSkgLSAlcyIsIGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICB9CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gaW5mby5uYW1lKCkuc2l6ZUlu
Qnl0ZXMoKSArIGtleVBhdGhCbG9iLT5zaXplKCk7CiAKICAgICAvLyBXcml0ZSBpbmRleCByZWNv
cmRzIGZvciBhbnkgcmVjb3JkcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhpcyBvYmplY3Qgc3Rv
cmUuCiAKQEAgLTEyMTQsNiArMTIyMCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBzaXplSW5jcmVhc2Ug
Kz0gZXJyb3IudGFza1NpemUoKTsKIAogICAgICAgICBpZiAoIWN1cnNvci0+YWR2YW5jZSgxKSkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZHZhbmNpbmcgY3Vyc29yIHdoaWxlIGlu
ZGV4aW5nIGV4aXN0aW5nIHJlY29yZHMgZm9yIG5ldyBpbmRleC4iKTsKQEAgLTEyMzEsNyArMTIz
OCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsK
ICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKIAotICAgIHJldHVybiBJ
REJFcnJvciB7IH07CisgICAgcmV0dXJuIElEQkVycm9yOjpjcmVhdGVOdWxsRXJyb3Ioc2l6ZUlu
Y3JlYXNlKTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRI
YXNJbmRleFJlY29yZChjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGNvbnN0IElEQktleURhdGEm
IGluZGV4S2V5LCBib29sJiBoYXNSZWNvcmQpCkBAIC0xMjkxLDYgKzEyOTgsNyBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQklu
ZGV4SW5mbyYgaW5mbywgYwogICAgICAgICB9CiAgICAgfQogCisgICAgdWludDY0X3Qgc2l6ZUlu
Y3JlYXNlID0gMDsKICAgICBmb3IgKGF1dG8mIGluZGV4S2V5IDogaW5kZXhLZXlzKSB7CiAgICAg
ICAgIGlmICghaW5kZXhLZXkuaXNWYWxpZCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0x
Mjk5LDkgKzEzMDcsMTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNr
ZWRQdXRJbmRleEtleShjb25zdCBJREJJbmRleEluZm8mIGluZm8sIGMKICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHB1dCBpbmRleCByZWNvcmQgZm9yIG5ld2x5IGNyZWF0ZWQgaW5k
ZXgiKTsKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBzaXpl
SW5jcmVhc2UgKz0gZXJyb3IudGFza1NpemUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gSURCRXJy
b3IgeyB9OworICAgIHJldHVybiBJREJFcnJvcjo6Y3JlYXRlTnVsbEVycm9yKHNpemVJbmNyZWFz
ZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5k
ZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdl
YkNvcmU6OklEQktleURhdGEmIGtleVZhbHVlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBp
bmRleEtleSwgaW50NjRfdCByZWNvcmRJRCkKQEAgLTEzMzQsNyArMTM0Myw4IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW50NjRfdCBv
YmplY3RTdG9yZUlELCBpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OworICAgIHVpbnQ2NF90IHNpemVJbmNyZWFzZSA9IGluZGV4S2V5QnVmZmVyLT5zaXplKCkg
KyB2YWx1ZUJ1ZmZlci0+c2l6ZSgpOworICAgIHJldHVybiBJREJFcnJvcjo6Y3JlYXRlTnVsbEVy
cm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIApAQCAtMTQxOSw5ICsxNDI5LDExIEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBhdXRvIG9sZE5hbWUgPSBp
bmRleEluZm8tPm5hbWUoKTsKICAgICBpbmRleEluZm8tPnJlbmFtZShuZXdOYW1lKTsKIAotICAg
IHJldHVybiBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gbmV3TmFt
ZS5zaXplSW5CeXRlcygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygpID8gbmV3TmFtZS5zaXplSW5C
eXRlcygpIC0gb2xkTmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAgICByZXR1cm4gSURCRXJyb3I6
OmNyZWF0ZU51bGxFcnJvcihzaXplSW5jcmVhc2UpOwogfQogCiBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNv
bnN0IElEQktleURhdGEmIGtleURhdGEsIGJvb2wmIGtleUV4aXN0cykKQEAgLTE2ODgsNiArMTcw
MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0Zv
ckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAKICAgICBJREJFcnJvciBlcnJvcjsKICAg
ICBib29sIGFueVJlY29yZHNTdWNjZWVkZWQgPSBmYWxzZTsKKyAgICB1aW50NjRfdCBzaXplSW5j
cmVhc2UgPSAwOwogICAgIGZvciAoYXV0byYgaW5kZXggOiBpbmZvLmluZGV4TWFwKCkudmFsdWVz
KCkpIHsKICAgICAgICAgSW5kZXhLZXkgaW5kZXhLZXk7CiAgICAgICAgIGdlbmVyYXRlSW5kZXhL
ZXlGb3JWYWx1ZShtX3NlcmlhbGl6YXRpb25Db250ZXh0LT5leGVjU3RhdGUoKSwgaW5kZXgsIGpz
VmFsdWUsIGluZGV4S2V5LCBpbmZvLmtleVBhdGgoKSwga2V5KTsKQEAgLTE2OTksNiArMTcxMiw3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFk
ZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkp
CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3IudGFz
a1NpemUoKTsKICAgICAgICAgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IHRydWU7CiAgICAgfQogCkBA
IC0xNzE2LDcgKzE3MzAsMTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRh
dGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiBlcnJvcjsKKyAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZXJyb3I7CisKKyAgICByZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJv
cihzaXplSW5jcmVhc2UpOwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFk
ZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKQEAgLTE3NTcsNiArMTc3NCw3
IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICAgICAgcmVjb3JkSUQgPSBtX3NxbGl0
ZURCLT5sYXN0SW5zZXJ0Um93SUQoKTsKICAgICB9CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNl
ID0ga2V5QnVmZmVyLT5zaXplKCkgKyB2YWx1ZS5kYXRhKCkuZGF0YSgpLT5zaXplKCk7CiAKICAg
ICBhdXRvIGVycm9yID0gdXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChvYmplY3RTdG9yZUlu
Zm8sIGtleURhdGEsIHZhbHVlLmRhdGEoKSwgcmVjb3JkSUQpOwogCkBAIC0xNzcyLDYgKzE3OTAs
NyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgICAgIHJldHVybiBlcnJvcjsKICAg
ICB9CisgICAgc2l6ZUluY3JlYXNlICs9IGVycm9yLnRhc2tTaXplKCk7CiAKICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMgPSB2YWx1ZS5ibG9iVVJMcygpOwogICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBibG9iRmlsZXMgPSB2YWx1ZS5ibG9iRmlsZVBhdGhzKCk7CkBAIC0xNzg3
LDYgKzE4MDYsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHJl
dHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNv
cmQgaW4gZGF0YWJhc2UiX3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBz
aXplSW5jcmVhc2UgKz0gdXJsLnNpemVJbkJ5dGVzKCk7CiAgICAgICAgIGludDY0X3QgcG90ZW50
aWFsRmlsZU5hbWVJbnRlZ2VyID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CiAKICAg
ICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBub3Ro
aW5nIGxlZnQgdG8gZG8uCkBAIC0xODIyLDExICsxODQyLDEyIEBAIElEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3RpCiAgICAgICAgIH0KIAogICAgICAgICB0cmFuc2FjdGlvbi0+YWRkQmxvYkZpbGUoYmxv
YkZpbGVzW2ldLCBzdG9yZWRGaWxlbmFtZSk7CisgICAgICAgIHNpemVJbmNyZWFzZSArPSAodXJs
LnNpemVJbkJ5dGVzKCkgKyBzdG9yZWRGaWxlbmFtZS5zaXplSW5CeXRlcygpKTsKICAgICB9CiAK
ICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5Q3Vyc29yc09mQ2hhbmdlcyhvYmplY3RTdG9yZUluZm8u
aWRlbnRpZmllcigpKTsKIAotICAgIHJldHVybiBlcnJvcjsKKyAgICByZXR1cm4gSURCRXJyb3I6
OmNyZWF0ZU51bGxFcnJvcihzaXplSW5jcmVhc2UpOwogfQogCiBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBv
YmplY3RTdG9yZVJlY29yZCwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBWZWN0b3I8U3RyaW5n
PiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGQ4NWIwMDE0
OGEyYTVjMzA2MGJhNTBjMGUxMjIwNzVjNjM1YmJjNGYuLmE3ZDM1MzFmNTFjNWFhNzM3MDViNTkz
M2Y0ZWU4ZDU4MDllMjljNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtNTUsNiAr
NTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKIHN0
YXRpYyBjb25zdCB1aW50NjRfdCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ID0gNDsKK3N0YXRp
YyBjb25zdCB1aW50NjRfdCBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3QgPSAxMCAqIEtCOwogCiBz
dGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJLZXlEYXRhJiBrZXlE
YXRhKQogewpAQCAtODgsMTAgKzg5LDIzIEBAIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1h
dGVTaXplKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gc2l6ZTsKIH0KIAorc3Rh
dGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCkKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihrZXlQYXRoLCBbXShjb25zdCBTdHJpbmcm
IHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIHBhdGguc2l6ZUluQnl0ZXMoKTsKKyAgICB9LCBbXShj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZSA9IDA7
CisgICAgICAgIGZvciAoYXV0byBwYXRoIDogcGF0aHMpCisgICAgICAgICAgICBzaXplICs9IHBh
dGguc2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgcmV0dXJuIHNpemU7CisgICAgfSk7Cit9CisKIHN0
YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bykKIHsKICAgICB1aW50NjRfdCBzaXplID0gNDsKICAgICBzaXplICs9IGluZm8ubmFtZSgpLnNp
emVJbkJ5dGVzKCk7CisgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoaW5mby5rZXlQYXRoKCkpOwog
ICAgIHJldHVybiBzaXplOwogfQogCkBAIC05OSw5ICsxMTMsOCBAQCBzdGF0aWMgaW5saW5lIHVp
bnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiB7CiAg
ICAgdWludDY0X3Qgc2l6ZSA9IDQ7CiAgICAgc2l6ZSArPSBpbmZvLm5hbWUoKS5zaXplSW5CeXRl
cygpOwotICAgIC8vIEZJWE1FOiBlc3RpbWF0ZSBrZXlQYXRoLgotICAgIGZvciAoYXV0byYgaW5k
ZXhJbmZvIDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKQotICAgICAgICBzaXplICs9IGVzdGlt
YXRlU2l6ZShpbmRleEluZm8pOworICAgIGlmIChhdXRvIGtleVBhdGggPSBpbmZvLmtleVBhdGgo
KSkKKyAgICAgICAgc2l6ZSArPSBlc3RpbWF0ZVNpemUoKmtleVBhdGgpOwogICAgIHJldHVybiBz
aXplOwogfQogCkBAIC0yMDcsNiArMjIwLDIzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Ondh
aXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3RpCiAg
ICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykpOwog
fQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2
NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIG1fc2VydmVyLT5pbmNy
ZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXplKTsK
KyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXpl
KTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2so
dWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgYWN0dWFsVGFza1NpemUpCit7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIp
OworICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkp
IHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRp
Zmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgaWYgKGFjdHVhbFRhc2tT
aXplKQorICAgICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgYWN0dWFsVGFza1NpemUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3Jl
YXNlVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9u
ICglcCkiLCB0aGlzKTsKQEAgLTIxOSw3ICsyNDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgbV9pc09wZW5pbmdC
YWNraW5nU3RvcmUgPSB0cnVlOwogICAgICAgICAgICAgLy8gV2UgZG8gbm90IGtub3cgd2hldGhl
ciB0aGlzIGlzIGFuIGV4aXN0aW5nIG9yIGEgbmV3IGRhdGFiYXNlLgogICAgICAgICAgICAgLy8g
V2Ugc2V0IGEgc21hbGwgY29zdCBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBvcGVuIGFu
IGluZmluaXRlIG51bWJlciBvZiBkYXRhYmFzZS4KLSAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1
ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0
LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cih0aGlzKV0oYXV0byBkZWNpc2lvbikgbXV0
YWJsZSB7CisgICAgICAgICAgICBtX3NlcnZlci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5v
cmlnaW4oKSwgZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0LCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cih0aGlzKSwgc2l6ZSA9IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdF0oYXV0byBkZWNp
c2lvbikgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzUsNyArMjY1LDkgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAgICAgICB0aGlz
LT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lk
ZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lELCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNl
VGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVyLCBjYWxsYmFja0lEKSk7CiAgICAgICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0zNDgsNyArMzgwLDYgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAg
ICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0
YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1f
YmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1Np
bXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwpAQCAtMzY0LDcgKzM5NSw2IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlk
ZW50aWZpZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUlu
Zm8udmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgp
OwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXpl
KCk7CiAgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRl
bGV0ZWRWZXJzaW9uKSk7CkBAIC00MDAsMTAgKzQzMCw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnNodXRkb3duRm9yQ2xvc2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9y
ZSkgeworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNs
b3NlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFi
YXNlU2l6ZSgpOwotICAgIH0KIAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBt
X2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CkBA
IC00MjIsOCArNDUwLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JD
bG9zZSgpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzRW1wdHkoKSk7CiAg
ICAgbV9kYXRhYmFzZVJlcGx5UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZO
ZWVkZWQoKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0
b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQpAQCAtNDU1LDggKzQ4MSw2IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVy
c2lvbikKICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgfQog
Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVsZXRlQmFja2luZ1N0
b3JlSW5Qcm9ncmVzcyA9IGZhbHNlOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxl
dGUpCkBAIC01MzcsMTQgKzU2MSwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjphbGxDb25u
ZWN0aW9uc0FyZUNsb3NlZE9yQ2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpCit1aW50
NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIo
KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIHVpbnQ2NF90IGN1
cnJlbnRJRCA9IDA7CiAgICAgcmV0dXJuICsrY3VycmVudElEOwogfQogCi11aW50NjRfdCBVbmlx
dWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBj
YWxsYmFjaywgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6
c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAg
ICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJF
cnJvcjo6dXNlckRlbGV0ZUVycm9yKCkpOwpAQCAtNTU1LDE2ICs1NzksMTEgQEAgdWludDY0X3Qg
VW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNr
JiYgY2FsbGJhY2ssIHUKICAgICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRl
bnRpZmllcikpOwogICAgIG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUo
Y2FsbGJhY2spKTsKIAotICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+aW5j
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7
Ci0gICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlmaWVyLCB0
YXNrU2l6ZSk7Ci0gICAgfQotCiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVudGlmaWVy
KTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJh
c2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywg
dWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlmICht
X2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1
c2VyRGVsZXRlRXJyb3IoKSwgeyB9KTsKQEAgLTU3NSwxMSArNTk0LDYgQEAgdWludDY0X3QgVW5p
cXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2sm
JiBjYWxsYmFjaywKICAgICBBU1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgbV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUp
OwotICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwg
dGFza1NpemUpOwotICAgIH0KLQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmll
cik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkBAIC03ODAsNyArNzk0LDcgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9w
dFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmll
cikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIp
CiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwpAQCAt
NzkyLDE1ICs4MDYsMTcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKIAogICAgIC8vIFF1b3Rh
VXNlciBzaG91bGQgaGF2ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdlLCB3aGljaCBjb250YWlu
cyB0aGUKICAgICAvLyBzaXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAgbV9jdXJyZW50RGF0YWJh
c2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOworICAgIGF1dG8gZGF0YWJh
c2VTaXplQmVmb3JlT3BlbiA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAogICAg
IElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7
CisgICAgYXV0byBkYXRhYmFzZVNpemVBZnRlck9wZW4gPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJh
c2VTaXplKCk7CisgICAgYXV0byBhY3R1YWxUYXNrU2l6ZSA9IGRhdGFiYXNlU2l6ZUFmdGVyT3Bl
biA+IGRhdGFiYXNlU2l6ZUJlZm9yZU9wZW4gPyAoZGF0YWJhc2VTaXplQWZ0ZXJPcGVuIC0gZGF0
YWJhc2VTaXplQmVmb3JlT3BlbikgOiAwOworICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tp
bmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgYWN0dWFsVGFza1NpemUsIGNhbGxiYWNrSWRl
bnRpZmllcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0
b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yKQor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgYWN0dWFsVGFz
a1NpemUsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTgxMSw3ICs4MjcsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5m
bywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9p
c09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsKIAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVl
ZGVkKCk7CisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBh
Y3R1YWxUYXNrU2l6ZSk7CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtODM2LDEwICs4NTIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3Rh
Q2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sg
Y2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAg
IGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCisgICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LCBpbmZvKSk7CiB9CiAKQEAgLTg0OSw5ICs4NjYsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
bwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3Jl
YXRlT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5m
byk7CisgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8pOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIGluZm8pKTsKIH0KIApAQCAtODYwLDEwICs4NzYsMTMgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RT
dG9yZSIpOwogCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVh
c2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IudGFza1NpemUoKSk7CisKKyAgICBJREJF
cnJvciBjcmVhdGVFcnJvcjsKKyAgICBpZiAoY3JlYXRlRXJyb3IuaXNOdWxsKCkpCiAgICAgICAg
IG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlzdGluZ09iamVjdFN0b3JlKGluZm8pOwogCi0gICAgcGVy
Zm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9y
bUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBjcmVhdGVFcnJvcik7CiB9CiAKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwg
RXJyb3JDYWxsYmFjayBjYWxsYmFjaykKQEAgLTkzNSw3ICs5NTQsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFm
dGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayks
IHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKIApAQCAtOTQ1LDYgKzk2NCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJl
bmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUs
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC05NTQsOSArOTc0LDggQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY28KICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUpOwotICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CisgICAgYXV0byBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBJREJFcnJvciBlcnJv
cjsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9
CiAKQEAgLTk2NSwxMCArOTg0LDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAotICAgIGlmIChlcnJv
ci5pc051bGwoKSkKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLnRhc2tTaXplKCkpOworCisgICAgSURCRXJyb3IgcmVuYW1lRXJyb3I7CisgICAg
aWYgKHJlbmFtZUVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1l
T2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIHBlcmZv
cm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpOworICAgIHBlcmZvcm1F
cnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgcmVuYW1lRXJyb3IpOwogfQogCiB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIEVy
cm9yQ2FsbGJhY2sgY2FsbGJhY2spCkBAIC0xMDMwLDkgKzEwNTIsMTAgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIGMKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2Fs
bGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNr
SUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlm
ICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOworICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRh
c2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRl
eCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwog
fQogCkBAIC0xMDY2LDYgKzEwODksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgICAg
ICBvYmplY3RTdG9yZUluZm8tPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CiAgICAgfQogCisgICAg
ZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci50YXNrU2l6
ZSgpKTsKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
KTsKIH0KIApAQCAtMTE0Nyw3ICsxMTcxLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVu
YW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKIAog
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0
X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxs
YmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTE2Myw2ICsxMTg3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1
ZUlEQkQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRh
c2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRl
eCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApAQCAtMTE3Miw5
ICsxMTk3LDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKICAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVJbmRleCh0cmFu
c2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVy
LCBuZXdOYW1lKTsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIG5ld05hbWUpOwogCi0gICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTEx
ODMsNyArMTIwNywxMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsK
KyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnRh
c2tTaXplKCkpOworCisgICAgSURCRXJyb3IgcmVuYW1lRXJyb3I7CisgICAgaWYgKHJlbmFtZUVy
cm9yLmlzTnVsbCgpKSB7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJh
c2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIp
OwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKICAgICAgICAgaWYgKG9iamVjdFN0
b3JlSW5mbykgewpAQCAtMTE5Myw3ICsxMjIwLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IpOworICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRp
ZmllciwgcmVuYW1lRXJyb3IpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFk
ZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJ
REJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3
cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKQEAgLTEyMTMsOSArMTI0MCwxMCBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgY29ucwogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRP
ckFkZEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1
ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1v
ZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7
CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47Cisg
ICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGtleURh
dGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlKSk7CiB9CiAKQEAgLTEyOTEsOCArMTMxOSwxMSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92
ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBr
ZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcikKLSAgICAgICAgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleURhdGEubnVtYmVyKCkp
OworICAgIGlmIChvdmVyd3JpdGVNb2RlICE9IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3Jp
dGVNb2RlOjpPdmVyd3JpdGVGb3JDdXJzb3IgJiYgb2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVt
ZW50KCkgJiYga2V5RGF0YS50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXIpIHsK
KyAgICAgICAgYXV0byB1cGRhdGVFcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtl
eUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRp
Zmllciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAgICAgIGlmICghdXBkYXRlRXJyb3IuaXNOdWxs
KCkpCisgICAgICAgICAgICBlcnJvciA9IHVwZGF0ZUVycm9yOworICAgIH0KIAogICAgIGdlbmVy
YXRlZEtleVJlc2V0dGVyLnJlbGVhc2UoKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Q
dXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwpAQCAtMTMwMyw2
ICsxMzM0LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1QdXRPckFkZCIpOwogCisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvci50YXNrU2l6ZSgpKTsKICAgICBwZXJmb3JtS2V5RGF0YUNhbGxi
YWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdEtleSk7CiB9CiAKQEAgLTIwOTcs
OSArMjEyOSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2soQ3Jv
c3NUaHJlYWRUYXNrJiYgdGFzaykKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFi
YXNlVGFza1JlcGx5KENyb3NzVGhyZWFkVGFzayYmIHRhc2spCiB7Ci0gICAgaWYgKG1fYmFja2lu
Z1N0b3JlKQotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRh
YmFzZVNpemUoKTsKLQogICAgIG1fZGF0YWJhc2VSZXBseVF1ZXVlLmFwcGVuZChXVEZNb3ZlKHRh
c2spKTsKICAgICBtX3NlcnZlci0+cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpleGVjdXRlTmV4dERhdGFiYXNlVGFz
a1JlcGx5KSk7CiB9CkBAIC0yMTY0LDggKzIxOTMsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKQogCiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIAotICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmNsZWFyKCk7Ci0gICAg
bV9zZXJ2ZXItPnJlc2V0U3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSk7CisgICAgZm9y
IChhdXRvIHNpemUgOiBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MudmFsdWVzKCkpCisgICAg
ICAgIG1fc2VydmVyLT5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3Jp
Z2luKCksIHNpemUpOworICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5jbGVhcigpOwog
CiAgICAgLy8gRXJyb3Igb3V0IGFsbCB0cmFuc2FjdGlvbnMKICAgICBmb3IgKGF1dG8mIGlkZW50
aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9pblByb2dyZXNzVHJhbnNhY3Rpb25zLmtleXMoKSkpCkBA
IC0yMjQxLDMzICsyMjcxLDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xv
c2VGb3JVc2VyRGVsZXRlKCkKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0
ZUJhY2tpbmdTdG9yZSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFj
ZVVzZWRJZk5lZWRlZChPcHRpb25hbDx1aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZp
ZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChvcHRpb25hbENh
bGxiYWNrSWRlbnRpZmllcikgewotICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIg
PSBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllci52YWx1ZSgpOwotICAgICAgICBhdXRvIGl0ZXJh
dG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuZmluZChjYWxsYmFja0lkZW50aWZp
ZXIpOwotICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFz
a3MuZW5kKCkpIHsKLSAgICAgICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVBvdGVudGlhbFNwYWNl
VXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgICAg
ICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5yZW1vdmUoaXRlcmF0b3IpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgdWludDY0X3QgZGF0YWJhc2VTaXplID0gbV9uZXdEYXRhYmFzZVNp
emU7Ci0gICAgaWYgKGRhdGFiYXNlU2l6ZSAhPSBtX2N1cnJlbnREYXRhYmFzZVNpemUpIHsKLSAg
ICAgICAgaWYgKGRhdGFiYXNlU2l6ZSA+IG1fY3VycmVudERhdGFiYXNlU2l6ZSkKLSAgICAgICAg
ICAgIG1fc2VydmVyLT5pbmNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGRh
dGFiYXNlU2l6ZSAtIG1fY3VycmVudERhdGFiYXNlU2l6ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCks
IG1fY3VycmVudERhdGFiYXNlU2l6ZSAtIGRhdGFiYXNlU2l6ZSk7Ci0gICAgICAgIG1fY3VycmVu
dERhdGFiYXNlU2l6ZSA9IGRhdGFiYXNlU2l6ZTsKLSAgICB9Ci19Ci0KIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVk
KGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0gbV9lcnJvckNhbGxi
YWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1f
aGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogICAgIGlmIChjYWxsYmFjaykgewpAQCAtMjI3OSw4
ICsyMjg0LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2so
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiByZXN1bHRLZXkpCiB7Ci0g
ICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIGF1
dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIp
OwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKICAg
ICBpZiAoY2FsbGJhY2spIHsKQEAgLTIzMjUsOCArMjMyOCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQo
Y2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIEFTU0VSVChtX2Vycm9yQ2FsbGJhY2tzLmNvbnRh
aW5zKGNhbGxiYWNrSWRlbnRpZmllcikpOwogICAgIEFTU0VSVChtX2NhbGxiYWNrUXVldWUubGFz
dCgpID09IGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgbV9jYWxsYmFja1F1ZXVlLnJlbW92ZUxh
c3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggNTNiMjFkZmU0ZDIxZGE1NWZmY2E2ZjA2
ZmIwNmIyMjc1YzFlY2Y4ZC4uMTA0ZTJmN2FiMWZhZjZlNGRlZGJmMjIwNTQ2OTEzMmE1Njk2MGM4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTExNiw4ICsxMTYsNiBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJk
Q2xvc2VkRm9yVXNlckRlbGV0ZTsgfQogCi0gICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3Q7
Ci0KICAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpOwogCiBwcml2YXRlOgpAQCAt
MTYwLDcgKzE1OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0
aW9ucwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50
aWZpZXImKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVu
dGlmaWVyJiwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZv
cm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgYmVn
aW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwpA
QCAtMTg4LDcgKzE4Niw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFj
a3MKICAgICB2b2lkIGRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lv
bik7Ci0gICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYs
IGNvbnN0IElEQkVycm9yJik7CisgICAgdm9pZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJiwgdWludDY0X3QgYWN0dWFsVGFza1NpemUs
IHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRl
T2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYs
IGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybVJlbmFt
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7
CkBAIC0yMTEsOCArMjA5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFBlcmZvcm1VbmNvbmRp
dGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKCk7CiAgICAgdm9pZCBkaWRTaHV0ZG93bkZvckNsb3Nl
KCk7CiAKLSAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFj
ayYmLCB1aW50NjRfdCB0YXNrU2l6ZSA9IDApOwotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiwgdWludDY0X3QgdGFza1NpemUgPSAwKTsKKyAg
ICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmKTsKKyAg
ICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYpOwog
ICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihHZXRBbGxSZXN1bHRzQ2FsbGJh
Y2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEdldFJlc3VsdENh
bGxiYWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihDb3VudENh
bGxiYWNrJiYpOwpAQCAtMjQ5LDcgKzI0NywxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXF1
ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IHRhc2tTaXpl
LCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9u
YWw8SURCRXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0
aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVTcGFjZVVzZWRJZk5l
ZWRlZChPcHRpb25hbDx1aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIgPSBXVEY6
Om51bGxvcHQpOworICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVu
dGlmaWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgdm9pZCBmaW5pc2hTcGFjZUluY3JlYXNl
VGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCBhY3R1YWxUYXNrU2l6ZSk7CisKKyAg
ICBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKIAog
ICAgIFJlZjxJREJTZXJ2ZXI+IG1fc2VydmVyOwogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBt
X2lkZW50aWZpZXI7CkBAIC0zMDIsNyArMzAzLDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8
SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnNvclByZWZldGNoZXM7CiAKLSAgICBIYXNoTWFw
PHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3M7CisgICAg
SGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsK
ICAgICB1aW50NjRfdCBtX2N1cnJlbnREYXRhYmFzZVNpemUgeyAwIH07CiAgICAgdWludDY0X3Qg
bV9uZXdEYXRhYmFzZVNpemUgeyAwIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKaW5kZXggNjUyZDBhODE3ZjVjNTNj
NzAzODNmMDE0ZTFlZWJhMTgwYTI2OGQ0Yy4uN2Y3OWRjNjg3ZTM4NThhNjlmZTc1ODEzZGNlYTRm
YjFjYmY4NTgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkVycm9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRXJyb3IuY3BwCkBAIC0zMiwxNSArMzIsMjEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1JREJFcnJvcjo6SURCRXJyb3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gY29k
ZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSURCRXJyb3IgSURCRXJyb3I6OmNyZWF0ZU51bGxF
cnJvcih1aW50NjRfdCB0YXNrU2l6ZSkKK3sKKyAgICByZXR1cm4gSURCRXJyb3IoV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxTdHJpbmcoKSwgdGFza1NpemUpOworfQorCitJREJFcnJvcjo6SURCRXJy
b3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1
aW50NjRfdCB0YXNrU2l6ZSkKICAgICA6IG1fY29kZShjb2RlKQogICAgICwgbV9tZXNzYWdlKG1l
c3NhZ2UpCisgICAgLCBtX3NpemUodGFza1NpemUpCiB7CiB9CiAKIElEQkVycm9yIElEQkVycm9y
Ojppc29sYXRlZENvcHkoKSBjb25zdAogewotICAgIHJldHVybiBJREJFcnJvciB7IG1fY29kZSwg
bV9tZXNzYWdlLmlzb2xhdGVkQ29weSgpIH07CisgICAgcmV0dXJuIElEQkVycm9yIHsgbV9jb2Rl
LCBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCksIG1fc2l6ZSB9OwogfQogCiBTdHJpbmcgSURCRXJy
b3I6Om5hbWUoKSBjb25zdApAQCAtNTcsNiArNjMsMTIgQEAgU3RyaW5nIElEQkVycm9yOjptZXNz
YWdlKCkgY29uc3QKICAgICByZXR1cm4gRE9NRXhjZXB0aW9uOjptZXNzYWdlKG1fY29kZS52YWx1
ZSgpKTsKIH0KIAordWludDY0X3QgSURCRXJyb3I6OnRhc2tTaXplKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoaXNOdWxsKCkgfHwgKCFpc051bGwoKSAmJiAhbV9zaXplKSk7CisgICAgcmV0dXJuIG1f
c2l6ZTsKK30KKwogUmVmUHRyPERPTUV4Y2VwdGlvbj4gSURCRXJyb3I6OnRvRE9NRXhjZXB0aW9u
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fY29kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJFcnJvci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmgKaW5kZXggM2E5NWJiMzgwNTBkZWFiMjhj
MmRjMWE3YWU2NWZlMjdmNmFmODg1Ni4uZjNjN2EwOGQ1Y2NmZDlmZmYyODVlNTNhZGQyYTNjNjc0
ZTUxOTgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQkVycm9yLmgKQEAgLTM1LDcgKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBJREJFcnJvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgSURC
RXJyb3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gPSBXVEY6Om51bGxvcHQsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEQkVycm9yIGNy
ZWF0ZU51bGxFcnJvcih1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgSURCRXJyb3IoT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gPSBXVEY6Om51bGxvcHQsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSA9IHsgfSwgdWludDY0X3QgPSAwKTsKIAogICAgIHN0YXRpYyBJ
REJFcnJvciB1c2VyRGVsZXRlRXJyb3IoKQogICAgIHsKQEAgLTUyLDYgKzUzLDcgQEAgcHVibGlj
OgogICAgIE9wdGlvbmFsPEV4Y2VwdGlvbkNvZGU+IGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGU7IH0KICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIFN0cmluZyBtZXNzYWdlKCkgY29u
c3Q7CisgICAgdWludDY0X3QgdGFza1NpemUoKSBjb25zdDsKIAogICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3QgeyByZXR1cm4gIW1fY29kZTsgfQogCkBAIC02Myw2ICs2NSw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gbV9jb2RlOwogICAgIFN0cmluZyBt
X21lc3NhZ2U7CisgICAgdWludDY0X3QgbV9zaXplOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3Bw
CmluZGV4IDc2N2FkMmVhZjRhY2NiODMxOTA0NDIyODk3MDY5NDliNzBiMzQzMGUuLmI1OGQ4OTQ0
Zjg5Yzc2NmYyODE3NTllZWNhZjFlM2ZjNzM5MTFlYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApAQCAtODQsOCArODQsNyBAQCB2b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3RhVXNlciYg
dXNlcikKICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHko
KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB1cGRhdGVRdW90YUJhc2VkT25TcGFj
ZVVzYWdlKCk7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9LCBTaG91bGREZXF1
ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOworICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVl
c3RzKHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTExOSw3ICsxMTgsNyBAQCB2b2lkIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVuZGluZ1Jl
cXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Ok5vKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7CiAgICAgICAgIH0p
OwogICAgIH0KIH0KQEAgLTEyNyw3ICsxMjYsNyBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKIHZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxsYmFj
ayYmIGNhbGxiYWNrKQogewogICAgIGlmICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1v
dmUoY2FsbGJhY2spIH0pOworICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFj
ZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVbmhh
bmRsZWR9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTM5LDEyICsxMzgsMjcgQEAg
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJbmNy
ZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYKICAgICBpbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpOwog
CiAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkgewotICAg
ICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFjZUluY3JlYXNlLCBXVEZNb3ZlKGNh
bGxiYWNrKSB9KTsKKyAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNy
ZWFzZSwgV1RGTW92ZShjYWxsYmFjayksIFBlbmRpbmdSZXF1ZXN0OjpTdGF0ZTo6VW5oYW5kbGVk
fSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoIW1faGFzU3RhcnRlZEhhbmRs
aW5nUmVxdWVzdHMgJiYgIW1fcXVvdGEpIHsKKyAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3Bh
Y2VVc2FnZSgpOworICAgICAgICBtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzID0gdHJ1ZTsK
KyAgICB9CisKICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7
Ci0gICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1v
dmUoY2FsbGJhY2spIH0pOworICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5hcHBlbmQoeyBzcGFj
ZUluY3JlYXNlLCBXVEZNb3ZlKGNhbGxiYWNrKSwgUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVc2Vy
U3BhY2VVc2VkUmVzZXQgfSk7CisKKyAgICAgICAgLy8gVHJ5IHByb2Nlc3NpbmcgcmVxdWVzdCBh
Z2FpbiBhZnRlciBtYWtpbmcgc3VyZSB1c2FnZSBpcyBhY2N1cmF0ZS4KKyAgICAgICAgZm9yIChh
dXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQorICAgICAgICAgICAgdXNlci0+Y29t
cHV0ZUV4YWN0U3BhY2VVc2VkKCk7CisKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXph
dGlvblVzZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBJ
ZiBubyB1c2VyIG5lZWRzIHRvIGNvcnJlY3QgdXNhZ2UsIGNvbnRpbnVlIHRvIHByb2Nlc3MgdGhp
cyByZXF1ZXN0LgorICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy5sYXN0KCkuc3RhdGUgPSBQZW5k
aW5nUmVxdWVzdDo6U3RhdGU6OlNwYWNlSW5jcmVhc2VSZXF1ZXN0ZWQ7CiAgICAgICAgIGFza0Zv
ck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2
NiwxMSArMTgwLDExIEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNl
KHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCiAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIl
cCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNlaXZlZCByZXNwb25z
ZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7CiAKICAgICAgICAg
bV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UgPSBmYWxzZTsKLSAgICAgICAgcHJv
Y2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1Jl
cXVlc3Q6Olllcyk7CisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEpOwog
ICAgIH0pOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVx
dWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaG91bGREZXF1ZXVlRmlyc3RQZW5k
aW5nUmVxdWVzdCBzaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCkKK3ZvaWQgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4g
bmV3UXVvdGEpCiB7CiAgICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTg0LDcgKzE5OCwxMiBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaAog
ICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChzaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCA9PSBT
aG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKSB7CisgICAgaWYgKCFtX2hhc1N0
YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzICYmICFtX3F1b3RhKSB7CisgICAgICAgIHVwZGF0ZVF1b3Rh
QmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICAgICAgbV9oYXNTdGFydGVkSGFuZGxpbmdSZXF1ZXN0
cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCkuc3Rh
dGUgPT0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpTcGFjZUluY3JlYXNlUmVxdWVzdGVkKSB7CiAg
ICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOwogICAg
ICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVx
dWVzdC5zcGFjZUluY3JlYXNlKTsKIApAQCAtMTk3LDkgKzIxNiwyMCBAQCB2b2lkIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5l
d1F1b3RhLCBTaAogICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMuZmly
c3QoKTsKIAogICAgICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3BhY2VJ
bmNyZWFzZSkpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXRlID09IFBlbmRpbmdSZXF1
ZXN0OjpTdGF0ZTo6VW5oYW5kbGVkKSB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IHByb2Nlc3Np
bmcgcmVxdWVzdCBhZ2FpbiBhZnRlciBtYWtpbmcgc3VyZSB1c2FnZSBpcyBhY2N1cmF0ZS4KKyAg
ICAgICAgICAgICAgICByZXF1ZXN0LnN0YXRlID0gUGVuZGluZ1JlcXVlc3Q6OlN0YXRlOjpVc2Vy
U3BhY2VVc2VkUmVzZXQ7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB1c2VyIDogY29weVRv
VmVjdG9yKG1fdXNlcnMpKQorICAgICAgICAgICAgICAgICAgICB1c2VyLT5jb21wdXRlRXhhY3RT
cGFjZVVzZWQoKTsKKworICAgICAgICAgICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRp
b25Vc2Vycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmVxdWVzdC5zdGF0ZSA9IFBlbmRpbmdSZXF1ZXN0OjpTdGF0
ZTo6U3BhY2VJbmNyZWFzZVJlcXVlc3RlZDsKICAgICAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5j
cmVhc2UgPSAwOwotICAgICAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nUmVx
dWVzdHMpCi0gICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFzZSArPSByZXF1ZXN0LnNwYWNlSW5j
cmVhc2U7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBlbmRpbmdSZXF1ZXN0IDogbV9wZW5kaW5n
UmVxdWVzdHMpCisgICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFzZSArPSBwZW5kaW5nUmVxdWVz
dC5zcGFjZUluY3JlYXNlOwogICAgICAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVh
c2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCmluZGV4IDlmNjQ2MzNlZDY2Y2MxMmE5MjgzYzA4
OTFiZDI1NWFlOTMwNDJhYjcuLmQ4MzgyODhlNTEwNzc4NWY1MzBhN2MzODQ3MzkwOTFlNTNkZDMx
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBA
IC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0
b3JhZ2VRdW90YVVzZXImKTsKIAogICAgIGVudW0gY2xhc3MgU2hvdWxkRGVxdWV1ZUZpcnN0UGVu
ZGluZ1JlcXVlc3QgeyBObywgWWVzIH07Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
KE9wdGlvbmFsPHVpbnQ2NF90PiwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3QpOwor
ICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOwogCiAg
ICAgdWludDY0X3QgbV9xdW90YSB7IDAgfTsKIApAQCAtODAsMTEgKzgwLDE1IEBAIHByaXZhdGU6
CiAKICAgICBlbnVtIGNsYXNzIFdoZW5Jbml0aWFsaXplZENhbGxlZCB7IE5vLCBZZXMgfTsKICAg
ICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVzZXIqLCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ+IG1fcGVu
ZGluZ0luaXRpYWxpemF0aW9uVXNlcnM7Ci0gICAgSGFzaFNldDxjb25zdCBTdG9yYWdlUXVvdGFV
c2VyKj4gbV91c2VyczsKKyAgICBIYXNoU2V0PFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOwor
CisgICAgYm9vbCBtX2hhc1N0YXJ0ZWRIYW5kbGluZ1JlcXVlc3RzIHsgZmFsc2UgfTsKIAogICAg
IHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7CisgICAgICAgIGVudW0gY2xhc3MgU3RhdGUgeyBVbmhh
bmRsZWQsIFVzZXJTcGFjZVVzZWRSZXNldCwgU3BhY2VJbmNyZWFzZVJlcXVlc3RlZCB9OwogICAg
ICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlOwogICAgICAgICBSZXF1ZXN0Q2FsbGJhY2sgY2Fs
bGJhY2s7CisgICAgICAgIFN0YXRlIHN0YXRlOwogICAgIH07CiAgICAgRGVxdWU8UGVuZGluZ1Jl
cXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3RzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFVc2VyLmgKaW5kZXggYjQyMzBjNWUxMmQwOTRkNjk5ZTFlMjk5NzkxNjRhZjViN2M4
MzhlMC4uMDM1OTAyZjFlZDIyZWZhOGMwMzM2N2ExYTlhYjA0ZWVlOWI2YTBhYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKQEAgLTM0LDYgKzM0LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgflN0b3JhZ2VRdW90YVVzZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2
aXJ0dWFsIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZUV4YWN0U3BhY2VVc2VkKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCB3aGVuSW5pdGlh
bGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7
IH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379938</attachid>
            <date>2019-10-01 13:22:04 -0700</date>
            <delta_ts>2019-10-02 14:00:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20191001132203.patch</filename>
            <type>text/plain</type>
            <size>49699</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA3ZTkxNDk2NDU3NGI1
MDEyMWIwMWJjOWEzOGUxZDZjZTdlMTUyMi4uNDcwNTliN2JiMzdkYmJkNjM2MTNhNDcyMmJlZjQz
MWVlZWUzYzFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE5LTEwLTAxICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZSBkaXNrIHVzYWdl
IG9mIEluZGV4ZWREQiBvbmx5IHdoZW4gZXN0aW1hdGVkIGluY3JlYXNlIGlzIGJpZ2dlciB0aGFu
IHNwYWNlIGF2YWlsYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAxOTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ3VycmVudGx5IHdlIHJlYWQgc2l6ZSBvZiBJbmRleGVkREIgZGF0YWJhc2UgZmls
ZXMgd2hlbiBhIGRhdGFiYXNlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQuIFRoaXMgZmlsZSBzeXN0
ZW0KKyAgICAgICAgb3BlcmF0aW9uIGlzIHNsb3cuCisKKyAgICAgICAgQW4gZWZmaWNpZW50IGFs
dGVybmF0aXZlIGlzIHRvIGNvbXB1dGUgdGhlIHNwYWNlIGF2YWlsYWJsZSwgZXN0aW1hdGUgc3Bh
Y2UgaW5jcmVhc2UgZm9yIGVhY2ggb3BlYXJ0aW9uLCBhbmQgZ2V0CisgICAgICAgIHRoZSBhY2N1
cmF0ZSBmaWxlIHNpemUgb25seSB3aGVuIHRoZSBhY2N1bXVsYXRlZCBlc3RpbWF0ZWQgaW5jcmVh
c2UgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWxzbyBtYWtlcyBzaXplIGVzdGltYXRlIGZvciBJREIgdGFza3MgbW9yZSBhY2N1cmF0ZS4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6SURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVFeGFjdFNwYWNlVXNl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpp
bml0aWFsaXplU3BhY2VVc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
dW5jaGVja2VkUHV0SW5kZXhLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRl
QWxsSW5kZXhlc0ZvckFkZFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjplc3RpbWF0ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUluY3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3VycmVudE9wZW5PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRE
ZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVj
ayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0
ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5k
ZXhBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1S
ZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1QdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwb3N0RGF0YWJhc2VUYXNrUmVwbHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNw
YWNlVXNlZElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRXJyb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OmNyZWF0ZU51
bGxFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJFcnJvcjo6SURCRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRXJyb3I6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJFcnJvcjo6dGFza1NpemUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJFcnJvci5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRXJyb3I6OklEQkVy
cm9yKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6
CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgICogc3Rv
cmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFV
c2VyOjpjb21wdXRlRXhhY3RTcGFjZVVzZWQpOgorCiAyMDE5LTEwLTAxICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBhdHRlbXB0IHRvIGZpeCBX
aW5kb3dzIGJ1aWxkIGFmdGVyIHIyNTA1MjcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGI1OWVkN2YyMjQ0NzA0
MTQ3ZmQxOTBhMWQxN2ZhODk0ZDM5ZmNiMGMuLjI1OTU1NzY5OWQ0MjEzOTY4NjFiNDBmOWM0MzE0
NzljZGNhNmE1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC03MTEsOSArNzExLDYgQEAgSURCU2VydmVyOjpR
dW90YVVzZXI6On5RdW90YVVzZXIoKQogCiB2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpyZXNl
dFNwYWNlVXNlZCgpCiB7Ci0gICAgbV9zcGFjZVVzZWQgPSAwOwotICAgIG1fZXN0aW1hdGVkU3Bh
Y2VJbmNyZWFzZSA9IDA7Ci0KICAgICBpZiAoIW1fbWFuYWdlcikKICAgICAgICAgcmV0dXJuOwog
CkBAIC03MzIsNiArNzI5LDExIEBAIHZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3Bh
Y2VVc2VkKCkKICAgICBtX21hbmFnZXItPmFkZFVzZXIoKnRoaXMpOwogfQogCit2b2lkIElEQlNl
cnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlRXhhY3RTcGFjZVVzZWQoKQoreworICAgIHJlc2V0U3Bh
Y2VVc2VkKCk7Cit9CisKIHZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpCiB7CiAgICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCkBAIC03NjEs
NiArNzYzLDcgQEAgdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6aW5pdGlhbGl6ZVNwYWNlVXNl
ZCh1aW50NjRfdCBzcGFjZVVzZWQpCiB7CiAgICAgQVNTRVJUKG1faXNJbml0aWFsaXplZCB8fCAh
bV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlKTsKICAgICBtX3NwYWNlVXNlZCA9IHNwYWNlVXNlZDsK
KyAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPSAwOwogICAgIG1faXNJbml0aWFsaXplZCA9
IHRydWU7CiAKICAgICBpZiAoYXV0byBjYWxsYmFjayA9IFdURk1vdmUobV9pbml0aWFsaXphdGlv
bkNhbGxiYWNrKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuaAppbmRleCAxOWU2OTYyZWQxOWFiYTU0MDMyY2EwNDQ3MjRlZDExMTUz
NTRhNWFmLi4xNjM3ZDQxYzI2NGU3ZDM4NDNiNjlhZmRiNmUxNWFjMWJjYjE5YTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CkBAIC0xNTQsNiArMTU0LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICB2b2lkIHNldFNwYWNlVXNl
ZCh1aW50NjRfdCBzcGFjZVVzZWQpIHsgbV9zcGFjZVVzZWQgPSBzcGFjZVVzZWQ7IH0KICAgICAg
ICAgdm9pZCByZXNldFNwYWNlVXNlZCgpOworICAgICAgICB2b2lkIGNvbXB1dGVFeGFjdFNwYWNl
VXNlZCgpIGZpbmFsOwogCiAgICAgICAgIHZvaWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQo
dWludDY0X3QgaW5jcmVhc2UpIHsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlICs9IGluY3JlYXNl
OyB9CiAgICAgICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQodWludDY0X3QgZGVj
cmVhc2UpCkBAIC0xNjcsNyArMTY4LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgaW5pdGlh
bGl6ZVNwYWNlVXNlZCh1aW50NjRfdCBzcGFjZVVzZWQpOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zcGFjZVVzZWQg
KyBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2U7IH0KKyAgICAgICAgdWludDY0X3Qgc3BhY2VVc2Vk
KCkgY29uc3QgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1faXNJbml0aWFs
aXplZCk7CisgICAgICAgICAgICByZXR1cm4gbV9zcGFjZVVzZWQgKyBtX2VzdGltYXRlZFNwYWNl
SW5jcmVhc2U7CisgICAgICAgIH0KICAgICAgICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBmaW5hbDsKIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2Vy
dmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAyNzliMzE1OTE2YmQz
OWQ4ZDRhODYwNmU3MDVkYjdlNTVkMTlhZTcwLi4xYzk1OGIwMmQwNzJiNzJhMzA4MWMwM2Y3NjBh
NTQwMDJhZjJlYWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtOTg0
LDcgKzk4NCw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAKICAgICBtX2RhdGFiYXNlSW5m
by0+YWRkRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvKTsKIAotICAgIHJldHVybiBJREJFcnJvciB7
IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gaW5mby5uYW1lKCkuc2l6ZUluQnl0ZXMo
KSArIGtleVBhdGhCbG9iLT5zaXplKCk7CisgICAgcmV0dXJuIElEQkVycm9yOjpjcmVhdGVOdWxs
RXJyb3Ioc2l6ZUluY3JlYXNlKTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQpAQCAtMTEwNSw5
ICsxMTA2LDEzIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0
U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBTdHJpbmcgb2xkTmFtZTsKKyAgICBpZiAoYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRp
ZmllcikpCisgICAgICAgIG9sZE5hbWUgPSBvYmplY3RTdG9yZUluZm8tPm5hbWUoKTsKICAgICBt
X2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBu
ZXdOYW1lKTsKIAotICAgIHJldHVybiBJREJFcnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUlu
Y3JlYXNlID0gbmV3TmFtZS5zaXplSW5CeXRlcygpID4gb2xkTmFtZS5zaXplSW5CeXRlcygpID8g
bmV3TmFtZS5zaXplSW5CeXRlcygpIC0gb2xkTmFtZS5zaXplSW5CeXRlcygpIDogMDsKKyAgICBy
ZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcihzaXplSW5jcmVhc2UpOwogfQogCiBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSUQpCkBAIC0xMTg0LDYgKzExODksNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhZGQgaW5kZXggJyVzJyB0byBJbmRleEluZm8gdGFi
bGUgKCVpKSAtICVzIiwgaW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIGNyZWF0ZSBpbmRleCBpbiBkYXRhYmFz
ZSJfcyB9OwogICAgIH0KKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBpbmZvLm5hbWUoKS5z
aXplSW5CeXRlcygpICsga2V5UGF0aEJsb2ItPnNpemUoKTsKIAogICAgIC8vIFdyaXRlIGluZGV4
IHJlY29yZHMgZm9yIGFueSByZWNvcmRzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGlzIG9iamVj
dCBzdG9yZS4KIApAQCAtMTIxNCw2ICsxMjIwLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMK
IAogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAgIHNpemVJbmNy
ZWFzZSArPSBlcnJvci50YXNrU2l6ZSgpOwogCiAgICAgICAgIGlmICghY3Vyc29yLT5hZHZhbmNl
KDEpKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGFkdmFuY2luZyBjdXJzb3Igd2hp
bGUgaW5kZXhpbmcgZXhpc3RpbmcgcmVjb3JkcyBmb3IgbmV3IGluZGV4LiIpOwpAQCAtMTIzMSw3
ICsxMjM4LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICBBU1NFUlQob2JqZWN0U3Rv
cmUpOwogICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOwogCi0gICAgcmV0
dXJuIElEQkVycm9yIHsgfTsKKyAgICByZXR1cm4gSURCRXJyb3I6OmNyZWF0ZU51bGxFcnJvcihz
aXplSW5jcmVhc2UpOwogfQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hl
Y2tlZEhhc0luZGV4UmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgSURCS2V5
RGF0YSYgaW5kZXhLZXksIGJvb2wmIGhhc1JlY29yZCkKQEAgLTEyOTEsNiArMTI5OCw3IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhLZXkoY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvLCBjCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1aW50NjRfdCBz
aXplSW5jcmVhc2UgPSAwOwogICAgIGZvciAoYXV0byYgaW5kZXhLZXkgOiBpbmRleEtleXMpIHsK
ICAgICAgICAgaWYgKCFpbmRleEtleS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTEyOTksOSArMTMwNywxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVu
Y2hlY2tlZFB1dEluZGV4S2V5KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgYwogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHV0IGluZGV4IHJlY29yZCBmb3IgbmV3bHkgY3JlYXRl
ZCBpbmRleCIpOwogICAgICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgICB9CisgICAgICAg
IHNpemVJbmNyZWFzZSArPSBlcnJvci50YXNrU2l6ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBJ
REJFcnJvciB7IH07CisgICAgcmV0dXJuIElEQkVycm9yOjpjcmVhdGVOdWxsRXJyb3Ioc2l6ZUlu
Y3JlYXNlKTsKIH0KIAogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQ
dXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29u
c3QgV2ViQ29yZTo6SURCS2V5RGF0YSYga2V5VmFsdWUsIGNvbnN0IFdlYkNvcmU6OklEQktleURh
dGEmIGluZGV4S2V5LCBpbnQ2NF90IHJlY29yZElEKQpAQCAtMTMzNCw3ICsxMzQzLDggQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGkKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBJREJF
cnJvciB7IH07CisgICAgdWludDY0X3Qgc2l6ZUluY3JlYXNlID0gaW5kZXhLZXlCdWZmZXItPnNp
emUoKSArIHZhbHVlQnVmZmVyLT5zaXplKCk7CisgICAgcmV0dXJuIElEQkVycm9yOjpjcmVhdGVO
dWxsRXJyb3Ioc2l6ZUluY3JlYXNlKTsKIH0KIAogCkBAIC0xNDE5LDkgKzE0MjksMTEgQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgfQogICAgIH0KIAorICAgIGF1dG8gb2xkTmFt
ZSA9IGluZGV4SW5mby0+bmFtZSgpOwogICAgIGluZGV4SW5mby0+cmVuYW1lKG5ld05hbWUpOwog
Ci0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKKyAgICB1aW50NjRfdCBzaXplSW5jcmVhc2UgPSBu
ZXdOYW1lLnNpemVJbkJ5dGVzKCkgPiBvbGROYW1lLnNpemVJbkJ5dGVzKCkgPyBuZXdOYW1lLnNp
emVJbkJ5dGVzKCkgLSBvbGROYW1lLnNpemVJbkJ5dGVzKCkgOiAwOworICAgIHJldHVybiBJREJF
cnJvcjo6Y3JlYXRlTnVsbEVycm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQpAQCAtMTY4OCw2
ICsxNzAwLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRl
eGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKIAogICAgIElEQkVycm9yIGVycm9y
OwogICAgIGJvb2wgYW55UmVjb3Jkc1N1Y2NlZWRlZCA9IGZhbHNlOworICAgIHVpbnQ2NF90IHNp
emVJbmNyZWFzZSA9IDA7CiAgICAgZm9yIChhdXRvJiBpbmRleCA6IGluZm8uaW5kZXhNYXAoKS52
YWx1ZXMoKSkgewogICAgICAgICBJbmRleEtleSBpbmRleEtleTsKICAgICAgICAgZ2VuZXJhdGVJ
bmRleEtleUZvclZhbHVlKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPmV4ZWNTdGF0ZSgpLCBpbmRl
eCwganNWYWx1ZSwgaW5kZXhLZXksIGluZm8ua2V5UGF0aCgpLCBrZXkpOwpAQCAtMTY5OSw2ICsx
NzEyLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVz
Rm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICAgICAgaWYgKCFlcnJvci5pc051
bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIHNpemVJbmNyZWFzZSArPSBlcnJv
ci50YXNrU2l6ZSgpOwogICAgICAgICBhbnlSZWNvcmRzU3VjY2VlZGVkID0gdHJ1ZTsKICAgICB9
CiAKQEAgLTE3MTYsNyArMTczMCwxMCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgICAg
ICB9CiAgICAgfQogCi0gICAgcmV0dXJuIGVycm9yOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgIHJldHVybiBJREJFcnJvcjo6Y3JlYXRlTnVs
bEVycm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQpAQCAtMTc1Nyw2ICsx
Nzc0LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKIAogICAgICAgICByZWNvcmRJRCA9IG1f
c3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0KKyAgICB1aW50NjRfdCBzaXplSW5j
cmVhc2UgPSBrZXlCdWZmZXItPnNpemUoKSArIHZhbHVlLmRhdGEoKS5kYXRhKCktPnNpemUoKTsK
IAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKG9iamVjdFN0
b3JlSW5mbywga2V5RGF0YSwgdmFsdWUuZGF0YSgpLCByZWNvcmRJRCk7CiAKQEAgLTE3NzIsNiAr
MTc5MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICAgICAgcmV0dXJuIGVycm9y
OwogICAgIH0KKyAgICBzaXplSW5jcmVhc2UgKz0gZXJyb3IudGFza1NpemUoKTsKIAogICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcyA9IHZhbHVlLmJsb2JVUkxzKCk7CiAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlcyA9IHZhbHVlLmJsb2JGaWxlUGF0aHMoKTsKQEAg
LTE3ODcsNiArMTgwNiw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9i
IHJlY29yZCBpbiBkYXRhYmFzZSJfcyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAg
ICAgIHNpemVJbmNyZWFzZSArPSB1cmwuc2l6ZUluQnl0ZXMoKTsKICAgICAgICAgaW50NjRfdCBw
b3RlbnRpYWxGaWxlTmFtZUludGVnZXIgPSBtX3NxbGl0ZURCLT5sYXN0SW5zZXJ0Um93SUQoKTsK
IAogICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBmaWxlIGZvciB0aGlzIGJsb2JVUkws
IG5vdGhpbmcgbGVmdCB0byBkby4KQEAgLTE4MjIsMTEgKzE4NDIsMTIgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGkKICAgICAgICAgfQogCiAgICAgICAgIHRyYW5zYWN0aW9uLT5hZGRCbG9iRmls
ZShibG9iRmlsZXNbaV0sIHN0b3JlZEZpbGVuYW1lKTsKKyAgICAgICAgc2l6ZUluY3JlYXNlICs9
ICh1cmwuc2l6ZUluQnl0ZXMoKSArIHN0b3JlZEZpbGVuYW1lLnNpemVJbkJ5dGVzKCkpOwogICAg
IH0KIAogICAgIHRyYW5zYWN0aW9uLT5ub3RpZnlDdXJzb3JzT2ZDaGFuZ2VzKG9iamVjdFN0b3Jl
SW5mby5pZGVudGlmaWVyKCkpOwogCi0gICAgcmV0dXJuIGVycm9yOworICAgIHJldHVybiBJREJF
cnJvcjo6Y3JlYXRlTnVsbEVycm9yKHNpemVJbmNyZWFzZSk7CiB9CiAKIElEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QmxvYlJlY29yZHNGb3JPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IG9iamVjdFN0b3JlUmVjb3JkLCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIFZlY3RvcjxT
dHJpbmc+JiBibG9iRmlsZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZDg1
YjAwMTQ4YTJhNWMzMDYwYmE1MGMwZTEyMjA3NWM2MzViYmM0Zi4uYTdkMzUzMWY1MWM1YWE3Mzcw
NWI1OTMzZjRlZThkNTgwOWUyOWM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC01
NSw2ICs1NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsK
IAogc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QgPSA0Owor
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlZmF1bHRPcGVuT3BlcmF0aW9uQ29zdCA9IDEwICogS0I7
CiAKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQktleURhdGEm
IGtleURhdGEpCiB7CkBAIC04OCwxMCArODksMjMgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCBl
c3RpbWF0ZVNpemUoY29uc3QgSURCVmFsdWUmIHZhbHVlKQogICAgIHJldHVybiBzaXplOwogfQog
CitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGVzdGltYXRlU2l6ZShjb25zdCBJREJLZXlQYXRoJiBr
ZXlQYXRoKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGtleVBhdGgsIFtdKGNvbnN0IFN0
cmluZyYgcGF0aCkgeworICAgICAgICByZXR1cm4gcGF0aC5zaXplSW5CeXRlcygpOworICAgIH0s
IFtdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeworICAgICAgICB1aW50NjRfdCBzaXpl
ID0gMDsKKyAgICAgICAgZm9yIChhdXRvIHBhdGggOiBwYXRocykKKyAgICAgICAgICAgIHNpemUg
Kz0gcGF0aC5zaXplSW5CeXRlcygpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9KTsKK30K
Kwogc3RhdGljIGlubGluZSB1aW50NjRfdCBlc3RpbWF0ZVNpemUoY29uc3QgSURCSW5kZXhJbmZv
JiBpbmZvKQogewogICAgIHVpbnQ2NF90IHNpemUgPSA0OwogICAgIHNpemUgKz0gaW5mby5uYW1l
KCkuc2l6ZUluQnl0ZXMoKTsKKyAgICBzaXplICs9IGVzdGltYXRlU2l6ZShpbmZvLmtleVBhdGgo
KSk7CiAgICAgcmV0dXJuIHNpemU7CiB9CiAKQEAgLTk5LDkgKzExMyw4IEBAIHN0YXRpYyBpbmxp
bmUgdWludDY0X3QgZXN0aW1hdGVTaXplKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykK
IHsKICAgICB1aW50NjRfdCBzaXplID0gNDsKICAgICBzaXplICs9IGluZm8ubmFtZSgpLnNpemVJ
bkJ5dGVzKCk7Ci0gICAgLy8gRklYTUU6IGVzdGltYXRlIGtleVBhdGguCi0gICAgZm9yIChhdXRv
JiBpbmRleEluZm8gOiBpbmZvLmluZGV4TWFwKCkudmFsdWVzKCkpCi0gICAgICAgIHNpemUgKz0g
ZXN0aW1hdGVTaXplKGluZGV4SW5mbyk7CisgICAgaWYgKGF1dG8ga2V5UGF0aCA9IGluZm8ua2V5
UGF0aCgpKQorICAgICAgICBzaXplICs9IGVzdGltYXRlU2l6ZSgqa2V5UGF0aCk7CiAgICAgcmV0
dXJuIHNpemU7CiB9CiAKQEAgLTIwNyw2ICsyMjAsMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGkKICAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIDAsICIiLCBXVEZNb3ZlKGNhbGxiYWNr
KSk7CiB9CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2so
dWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpCit7CisgICAgbV9zZXJ2ZXIt
PmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1Np
emUpOworICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFz
a1NpemUpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNl
VGFzayh1aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCBhY3R1YWxUYXNrU2l6ZSkKK3sKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRlbnRp
Zmllcik7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5l
bmQoKSkgeworICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9p
ZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBpZiAoYWN0dWFs
VGFza1NpemUpCisgICAgICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBhY3R1YWxUYXNrU2l6ZSk7CisgICAgICAgIG1fcGVuZGluZ1NwYWNl
SW5jcmVhc2VUYXNrcy5yZW1vdmUoaXRlcmF0b3IpOworICAgIH0KK30KKwogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVy
YXRpb24gKCVwKSIsIHRoaXMpOwpAQCAtMjE5LDcgKzI0OSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiAgICAgICAgICAgICBtX2lzT3Bl
bmluZ0JhY2tpbmdTdG9yZSA9IHRydWU7CiAgICAgICAgICAgICAvLyBXZSBkbyBub3Qga25vdyB3
aGV0aGVyIHRoaXMgaXMgYW4gZXhpc3Rpbmcgb3IgYSBuZXcgZGF0YWJhc2UuCiAgICAgICAgICAg
ICAvLyBXZSBzZXQgYSBzbWFsbCBjb3N0IHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIG9w
ZW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGRhdGFiYXNlLgotICAgICAgICAgICAgbV9zZXJ2ZXIt
PnJlcXVlc3RTcGFjZShtX2lkZW50aWZpZXIub3JpZ2luKCksIGRlZmF1bHRXcml0ZU9wZXJhdGlv
bkNvc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShhdXRvIGRlY2lzaW9u
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlm
aWVyLm9yaWdpbigpLCBkZWZhdWx0T3Blbk9wZXJhdGlvbkNvc3QsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpLCBzaXplID0gZGVmYXVsdE9wZW5PcGVyYXRpb25Db3N0XShhdXRv
IGRlY2lzaW9uKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTIzNSw3ICsyNjUsOSBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMtPnBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUsIG1faWRlbnRpZmllcikpOworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNhbGxiYWNrSUQgPSB0aGlzLT5nZW5lcmF0ZVVuaXF1ZUNhbGxi
YWNrSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgICAgICBzdGFydFNwYWNlSW5jcmVhc2VU
YXNrKGNhbGxiYWNrSUQsIHNpemUpOworICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKICAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTM0OCw3ICszODAsNiBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaQogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7CiAg
ICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgbV9u
ZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAKICAgICAg
ICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgICAgICBtX2JhY2tpbmdTdG9yZVN1cHBv
cnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CkBAIC0zNjQsNyArMzk1LDYgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgICAgICBkZWxldGVkVmVyc2lvbiA9IGRhdGFi
YXNlSW5mby52ZXJzaW9uKCk7CiAgICAgICAgIGJhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0
b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gYmFja2luZ1N0b3JlLT5kYXRhYmFz
ZVNpemUoKTsKICAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9y
ZSwgZGVsZXRlZFZlcnNpb24pKTsKQEAgLTQwMCwxMCArNDMwLDggQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSgpCiAKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSIpOwogCi0gICAgaWYgKG1fYmFja2lu
Z1N0b3JlKSB7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQogICAgICAgICBtX2JhY2tpbmdTdG9y
ZS0+Y2xvc2UoKTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+
ZGF0YWJhc2VTaXplKCk7Ci0gICAgfQogCiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwog
ICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxz
ZTsKQEAgLTQyMiw4ICs0NTAsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRTaHV0ZG93
bkZvckNsb3NlKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZVJlcGx5UXVldWUuaXNFbXB0eSgp
KTsKICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1ZS5raWxsKCk7Ci0KLSAgICB1cGRhdGVTcGFjZVVz
ZWRJZk5lZWRlZCgpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNr
aW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCkBAIC00NTUsOCArNDgxLDYgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0
ZWRWZXJzaW9uKQogICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0ID0gbnVsbHB0cjsKICAg
ICB9CiAKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOwotCiAgICAgbV9kZWxldGVCYWNr
aW5nU3RvcmVJblByb2dyZXNzID0gZmFsc2U7CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNl
ckRlbGV0ZSkKQEAgLTUzNywxNCArNTYxLDE0IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2U6OmFs
bENvbm5lY3Rpb25zQXJlQ2xvc2VkT3JDbG9zaW5nKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCkK
K3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRp
ZmllcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBzdGF0aWMgdWludDY0
X3QgY3VycmVudElEID0gMDsKICAgICByZXR1cm4gKytjdXJyZW50SUQ7CiB9CiAKLXVpbnQ2NF90
IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFj
ayYmIGNhbGxiYWNrLCB1aW50NjRfdCB0YXNrU2l6ZSkKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFi
YXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmIGNhbGxiYWNrKQog
ewogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNr
KElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSk7CkBAIC01NTUsMTYgKzU3OSwxMSBAQCB1aW50
NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2Fs
bGJhY2smJiBjYWxsYmFjaywgdQogICAgIEFTU0VSVCghbV9lcnJvckNhbGxiYWNrcy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgbV9lcnJvckNhbGxiYWNrcy5hZGQoaWRlbnRpZmllciwgV1RG
TW92ZShjYWxsYmFjaykpOwogCi0gICAgaWYgKHRhc2tTaXplKSB7Ci0gICAgICAgIG1fc2VydmVy
LT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tT
aXplKTsKLSAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuYWRkKGlkZW50aWZp
ZXIsIHRhc2tTaXplKTsKLSAgICB9Ci0KICAgICBtX2NhbGxiYWNrUXVldWUuYXBwZW5kKGlkZW50
aWZpZXIpOwogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJE
YXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmIGNhbGxi
YWNrLCB1aW50NjRfdCB0YXNrU2l6ZSkKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAg
aWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKICAgICAgICAgY2FsbGJhY2soSURCRXJy
b3I6OnVzZXJEZWxldGVFcnJvcigpLCB7IH0pOwpAQCAtNTc1LDExICs1OTQsNiBAQCB1aW50NjRf
dCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxs
YmFjayYmIGNhbGxiYWNrLAogICAgIEFTU0VSVCghbV9rZXlEYXRhQ2FsbGJhY2tzLmNvbnRhaW5z
KGlkZW50aWZpZXIpKTsKICAgICBtX2tleURhdGFDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKIAotICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZl
ci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNr
U2l6ZSk7Ci0gICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlm
aWVyLCB0YXNrU2l6ZSk7Ci0gICAgfQotCiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVu
dGlmaWVyKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KQEAgLTc4MCw3ICs3OTQsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphZGRPcGVuRGF0YWJhc2VDb25uZWN0aW9uKFJlZjxVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3RpbwogICAgIG1fb3BlbkRhdGFiYXNlQ29ubmVjdGlvbnMuYWRk
KGFkb3B0UmVmKGNvbm5lY3Rpb24ubGVha1JlZigpKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERC
LCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSAoJXApIiwgdGhpcyk7
CkBAIC03OTIsMTUgKzgwNiwxNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcgogCiAgICAgLy8g
UXVvdGFVc2VyIHNob3VsZCBoYXZlIGluaXRpbGlhemVkIHN0b3JhZ2UgdXNhZ2UsIHdoaWNoIGNv
bnRhaW5zIHRoZQogICAgIC8vIHNpemUgb2YgdGhpcyBkYXRhYmFzZS4KLSAgICBtX2N1cnJlbnRE
YXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CisgICAgYXV0byBk
YXRhYmFzZVNpemVCZWZvcmVPcGVuID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwog
CiAgICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICBhdXRvIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CiAK
LSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJy
b3IpKTsKKyAgICBhdXRvIGRhdGFiYXNlU2l6ZUFmdGVyT3BlbiA9IG1fYmFja2luZ1N0b3JlLT5k
YXRhYmFzZVNpemUoKTsKKyAgICBhdXRvIGFjdHVhbFRhc2tTaXplID0gZGF0YWJhc2VTaXplQWZ0
ZXJPcGVuID4gZGF0YWJhc2VTaXplQmVmb3JlT3BlbiA/IChkYXRhYmFzZVNpemVBZnRlck9wZW4g
LSBkYXRhYmFzZVNpemVCZWZvcmVPcGVuKSA6IDA7CisgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yLCBhY3R1YWxUYXNrU2l6ZSwgY2FsbGJh
Y2tJZGVudGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJy
b3IpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCBhY3R1
YWxUYXNrU2l6ZSwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSIpOwpAQCAtODExLDcgKzgyNyw3IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZv
JiBpbmZvLCBjb25zdCBJCiAgICAgQVNTRVJUKG1faXNPcGVuaW5nQmFja2luZ1N0b3JlKTsKICAg
ICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwogCi0gICAgdXBkYXRlU3BhY2VVc2Vk
SWZOZWVkZWQoKTsKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZp
ZXIsIGFjdHVhbFRhc2tTaXplKTsKIAogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRl
KQogICAgICAgICByZXR1cm47CkBAIC04MzYsMTAgKzg1MiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZUFmdGVy
UXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgRXJyb3JDYWxs
YmFjayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKKyAgICBzdGFydFNwYWNl
SW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
Q3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlm
aWVyKCksIGluZm8pKTsKIH0KIApAQCAtODQ5LDkgKzg2Niw4IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAg
ICBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBpbmZvKTsKKyAgICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0
b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CiAKLSAgICBJREJFcnJvciBlcnJvcjsK
ICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgaW5mbykpOwogfQogCkBAIC04NjAsMTAgKzg3NiwxMyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9H
KEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9i
amVjdFN0b3JlIik7CiAKLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisgICAgZmluaXNoU3BhY2VJ
bmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci50YXNrU2l6ZSgpKTsKKworICAg
IElEQkVycm9yIGNyZWF0ZUVycm9yOworICAgIGlmIChjcmVhdGVFcnJvci5pc051bGwoKSkKICAg
ICAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKLSAg
ICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKTsKKyAgICBw
ZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGNyZWF0ZUVycm9yKTsKIH0K
IAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVO
YW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQpAQCAtOTM1LDcgKzk1NCw3IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0
b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC05NDUsNiArOTY0LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVu
aXEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2so
Y2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RT
dG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk1NCw5ICs5NzQsOCBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICBhdXRv
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIAotICAgIElEQkVycm9y
IGVycm9yOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUp
KTsKIH0KIApAQCAtOTY1LDEwICs5ODQsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCi0gICAgaWYg
KGVycm9yLmlzTnVsbCgpKQorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IudGFza1NpemUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVFcnJvcjsK
KyAgICBpZiAocmVuYW1lRXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5y
ZW5hbWVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOwogCi0gICAg
cGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVy
Zm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCByZW5hbWVFcnJvcik7CiB9CiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKQEAgLTEwMzAsOSArMTA1MiwxMCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgYwogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFm
dGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxsYmFj
ayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAg
ICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CisgICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0
ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZv
KSk7CiB9CiAKQEAgLTEwNjYsNiArMTA4OSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAg
ICAgICAgIG9iamVjdFN0b3JlSW5mby0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKICAgICB9CiAK
KyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnRh
c2tTaXplKCkpOwogICAgIHBlcmZvcm1FcnJvckNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IpOwogfQogCkBAIC0xMTQ3LDcgKzExNzEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpyZW5hbWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
dQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1
aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0g
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3Zl
KGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNh
bGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJ
RCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTYzLDYgKzExODcsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwg
VW5pcXVlSURCRAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFt
ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC0x
MTcyLDkgKzExOTcsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5k
ZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAogICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIG5ld05hbWUpOworICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+cmVuYW1l
SW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4
SWRlbnRpZmllciwgbmV3TmFtZSk7CiAKLSAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KIApA
QCAtMTE4Myw3ICsxMjA3LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1S
ZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAotICAgIGlmIChlcnJvci5pc051bGwo
KSkgeworICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IudGFza1NpemUoKSk7CisKKyAgICBJREJFcnJvciByZW5hbWVFcnJvcjsKKyAgICBpZiAocmVu
YW1lRXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8pOwogICAgICAgICBpZiAob2Jq
ZWN0U3RvcmVJbmZvKSB7CkBAIC0xMTkzLDcgKzEyMjAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvcik7CisgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCByZW5hbWVFcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1
dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNv
bnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUg
b3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQpAQCAtMTIxMyw5ICsxMjQw
LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElE
QlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3Zlcndy
aXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxi
YWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tT
aXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVy
bjsKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwg
a2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpKTsKIH0KIApAQCAtMTI5MSw4ICsxMzE5LDEx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCh1aW50NjRfdCBjYWxs
YmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgp
ICYmIGtleURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAg
ICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1i
ZXIoKSk7CisgICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9J
bmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJl
cikgeworICAgICAgICBhdXRvIHVwZGF0ZUVycm9yID0gbV9iYWNraW5nU3RvcmUtPm1heWJlVXBk
YXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgaWYgKCF1cGRhdGVFcnJvci5p
c051bGwoKSkKKyAgICAgICAgICAgIGVycm9yID0gdXBkYXRlRXJyb3I7CisgICAgfQogCiAgICAg
Z2VuZXJhdGVkS2V5UmVzZXR0ZXIucmVsZWFzZSgpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CkBAIC0x
MzAzLDYgKzEzMzQsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLnRhc2tTaXplKCkpOwogICAgIHBlcmZvcm1LZXlEYXRh
Q2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIApAQCAt
MjA5Nyw5ICsyMTI5LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFz
ayhDcm9zc1RocmVhZFRhc2smJiB0YXNrKQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoQ3Jvc3NUaHJlYWRUYXNrJiYgdGFzaykKIHsKLSAgICBpZiAobV9i
YWNraW5nU3RvcmUpCi0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUt
PmRhdGFiYXNlU2l6ZSgpOwotCiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1v
dmUodGFzaykpOwogICAgIG1fc2VydmVyLT5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJh
c2VUYXNrUmVwbHkpKTsKIH0KQEAgLTIxNjQsOCArMjE5Myw5IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuY2xlYXIoKTsK
LSAgICBtX3NlcnZlci0+cmVzZXRTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKyAg
ICBmb3IgKGF1dG8gc2l6ZSA6IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy52YWx1ZXMoKSkK
KyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmll
ci5vcmlnaW4oKSwgc2l6ZSk7CisgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNsZWFy
KCk7CiAKICAgICAvLyBFcnJvciBvdXQgYWxsIHRyYW5zYWN0aW9ucwogICAgIGZvciAoYXV0byYg
aWRlbnRpZmllciA6IGNvcHlUb1ZlY3RvcihtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMua2V5cygp
KSkKQEAgLTIyNDEsMzMgKzIyNzEsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlh
dGVDbG9zZUZvclVzZXJEZWxldGUoKQogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFs
RGVsZXRlQmFja2luZ1N0b3JlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0
ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRl
bnRpZmllcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG9wdGlv
bmFsQ2FsbGJhY2tJZGVudGlmaWVyKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciA9IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5maW5kKGNhbGxiYWNrSWRl
bnRpZmllcik7Ci0gICAgICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNp
bmdUYXNrcy5lbmQoKSkgewotICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFs
U3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAg
ICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFi
YXNlU2l6ZTsKLSAgICBpZiAoZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkg
ewotICAgICAgICBpZiAoZGF0YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAg
ICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgZGF0YWJhc2VTaXplIC0gbV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmln
aW4oKSwgbV9jdXJyZW50RGF0YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9j
dXJyZW50RGF0YWJhc2VTaXplID0gZGF0YWJhc2VTaXplOwotICAgIH0KLX0KLQogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZO
ZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vycm9y
Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sg
fHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0y
Mjc5LDggKzIyODQsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkK
IHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAg
ICAgYXV0byBjYWxsYmFjayA9IG1fa2V5RGF0YUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRp
Zmllcik7CiAgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUp
OwogICAgIGlmIChjYWxsYmFjaykgewpAQCAtMjMyNSw4ICsyMzI4LDYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUNvdW50Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNr
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5l
ZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgQVNTRVJUKG1fZXJyb3JDYWxsYmFja3Mu
Y29udGFpbnMoY2FsbGJhY2tJZGVudGlmaWVyKSk7CiAgICAgQVNTRVJUKG1fY2FsbGJhY2tRdWV1
ZS5sYXN0KCkgPT0gY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBtX2NhbGxiYWNrUXVldWUucmVt
b3ZlTGFzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCA1M2IyMWRmZTRkMjFkYTU1ZmZj
YTZmMDZmYjA2YjIyNzVjMWVjZjhkLi4xMDRlMmY3YWIxZmFmNmU0ZGVkYmYyMjA1NDY5MTMyYTU2
OTYwYzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTE2LDggKzExNiw2IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaGFyZENsb3NlZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBt
X2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlOyB9CiAKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBj
b25zdDsKLQogICAgIHZvaWQgZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CiAKIHByaXZhdGU6
CkBAIC0xNjAsNyArMTU4LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIERhdGFiYXNlIHRocmVhZCBv
cGVyYXRpb25zCiAgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJik7Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYpOworICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImLCB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIHZvaWQgcGVy
Zm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQg
cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBiZWdpblRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUoY29uc3QgSURCVHJhbnNhY3Rpb25JbmZv
Jik7CkBAIC0xODgsNyArMTg2LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNh
bGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRW
ZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBhY3R1YWxUYXNr
U2l6ZSwgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1D
cmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVy
cm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9pZCBkaWRQZXJmb3JtRGVs
ZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJv
ciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3Jt
UmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJF
cnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdO
YW1lKTsKQEAgLTIxMSw4ICsyMDksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUGVyZm9ybVVu
Y29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGRpZFNodXRkb3duRm9y
Q2xvc2UoKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNh
bGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7Ci0gICAgdWludDY0X3Qgc3RvcmVDYWxs
YmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmLCB1aW50NjRfdCB0YXNrU2l6ZSA9IDAp
OworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYp
OworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2sm
Jik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEdldEFsbFJlc3VsdHND
YWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0UmVz
dWx0Q2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKENv
dW50Q2FsbGJhY2smJik7CkBAIC0yNDksNyArMjQ3LDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3QgdGFz
a1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChP
cHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNwYWNlVXNl
ZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllciA9
IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90
IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICB2b2lkIGZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IGFjdHVhbFRhc2tTaXplKTsK
KworICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigp
OwogCiAgICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURCRGF0YWJhc2VJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKQEAgLTMwMiw3ICszMDMsNyBAQCBwcml2YXRlOgogCiAgICAgSGFz
aFNldDxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsKIAotICAgIEhh
c2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrczsK
KyAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRh
c2tzOwogICAgIHVpbnQ2NF90IG1fY3VycmVudERhdGFiYXNlU2l6ZSB7IDAgfTsKICAgICB1aW50
NjRfdCBtX25ld0RhdGFiYXNlU2l6ZSB7IDAgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmNwcAppbmRleCA2NTJkMGE4MTdm
NWM1M2M3MDM4M2YwMTRlMWVlYmExODBhMjY4ZDRjLi43Zjc5ZGM2ODdlMzg1OGE2OWZlNzU4MTNk
Y2VhNGZiMWNiZjg1ODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCRXJyb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JREJFcnJvci5jcHAKQEAgLTMyLDE1ICszMiwyMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUlEQkVycm9yOjpJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2Rl
PiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitJREJFcnJvciBJREJFcnJvcjo6Y3JlYXRl
TnVsbEVycm9yKHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIHJldHVybiBJREJFcnJvcihXVEY6
Om51bGxvcHQsIFdURjo6bnVsbFN0cmluZygpLCB0YXNrU2l6ZSk7Cit9CisKK0lEQkVycm9yOjpJ
REJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBjb2RlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIHVpbnQ2NF90IHRhc2tTaXplKQogICAgIDogbV9jb2RlKGNvZGUpCiAgICAgLCBtX21lc3Nh
Z2UobWVzc2FnZSkKKyAgICAsIG1fc2l6ZSh0YXNrU2l6ZSkKIHsKIH0KIAogSURCRXJyb3IgSURC
RXJyb3I6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElEQkVycm9yIHsgbV9j
b2RlLCBtX21lc3NhZ2UuaXNvbGF0ZWRDb3B5KCkgfTsKKyAgICByZXR1cm4gSURCRXJyb3IgeyBt
X2NvZGUsIG1fbWVzc2FnZS5pc29sYXRlZENvcHkoKSwgbV9zaXplIH07CiB9CiAKIFN0cmluZyBJ
REJFcnJvcjo6bmFtZSgpIGNvbnN0CkBAIC01Nyw2ICs2MywxMiBAQCBTdHJpbmcgSURCRXJyb3I6
Om1lc3NhZ2UoKSBjb25zdAogICAgIHJldHVybiBET01FeGNlcHRpb246Om1lc3NhZ2UobV9jb2Rl
LnZhbHVlKCkpOwogfQogCit1aW50NjRfdCBJREJFcnJvcjo6dGFza1NpemUoKSBjb25zdAorewor
ICAgIEFTU0VSVChpc051bGwoKSB8fCAoIWlzTnVsbCgpICYmICFtX3NpemUpKTsKKyAgICByZXR1
cm4gbV9zaXplOworfQorCiBSZWZQdHI8RE9NRXhjZXB0aW9uPiBJREJFcnJvcjo6dG9ET01FeGNl
cHRpb24oKSBjb25zdAogewogICAgIGlmICghbV9jb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkVycm9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRXJyb3IuaAppbmRleCAzYTk1YmIzODA1MGRl
YWIyOGMyZGMxYTdhZTY1ZmUyN2Y2YWY4ODU2Li5mM2M3YTA4ZDVjY2ZkOWZmZjI4NWU1M2FkZDJh
M2M2NzRlNTE5ODI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRXJyb3IuaApAQCAtMzUsNyArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIElEQkVycm9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNp
dCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9wdCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSURCRXJy
b3IgY3JlYXRlTnVsbEVycm9yKHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBJREJFcnJvcihPcHRpb25hbDxFeGNlcHRpb25Db2RlPiA9IFdURjo6bnVsbG9w
dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlID0geyB9LCB1aW50NjRfdCA9IDApOwogCiAgICAgc3Rh
dGljIElEQkVycm9yIHVzZXJEZWxldGVFcnJvcigpCiAgICAgewpAQCAtNTIsNiArNTMsNyBAQCBw
dWJsaWM6CiAgICAgT3B0aW9uYWw8RXhjZXB0aW9uQ29kZT4gY29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZTsgfQogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1lc3NhZ2Uo
KSBjb25zdDsKKyAgICB1aW50NjRfdCB0YXNrU2l6ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc051
bGwoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlOyB9CiAKQEAgLTYzLDYgKzY1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBPcHRpb25hbDxFeGNlcHRpb25Db2RlPiBtX2NvZGU7CiAgICAgU3Ry
aW5nIG1fbWVzc2FnZTsKKyAgICB1aW50NjRfdCBtX3NpemU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHAKaW5kZXggNzY3YWQyZWFmNGFjY2I4MzE5MDQ0MjI4OTcwNjk0OWI3MGIzNDMwZS4uZGUz
OTc1MzVlZGRjNDFmZjMzZjQ5ZGEwNmRiZTFjMGJiN2RhNWM3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC04NCw4ICs4NCw3IEBAIHZv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFV
c2VyJiB1c2VyKQogICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRP
blNwYWNlVXNhZ2UoKTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNob3Vs
ZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpObyk7CisgICAgICAgIHByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMoeyB9KTsKICAgICB9KTsKIH0KIApAQCAtMTE5LDcgKzExOCw3IEBAIHZvaWQgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxp
emF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5k
aW5nUmVxdWVzdHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOwor
ICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAgICAg
ICAgfSk7CiAgICAgfQogfQpAQCAtMTQzLDggKzE0MiwyNCBAQCB2b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnJlcXVlc3RTcGFjZSh1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBSZXF1ZXN0Q2FsbGJh
Y2smJgogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKG1fYWN0aW9uVGFrZW5Pbk5l
eHRSZXF1ZXN0ID09IEFjdGlvbjo6TmV2ZXIgJiYgIW1fcXVvdGEpIHsKKyAgICAgICAgdXBkYXRl
UXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOworICAgICAgICBtX2FjdGlvblRha2VuT25OZXh0UmVx
dWVzdCA9IEFjdGlvbjo6Tm9uZTsKKyAgICB9CisKICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNw
YWNlKHNwYWNlSW5jcmVhc2UpKSB7CiAgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7
IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOworCisgICAgICAgIC8vIFRyeSBw
cm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0ZXIgbWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJh
dGUuCisgICAgICAgIG1fYWN0aW9uVGFrZW5Pbk5leHRSZXF1ZXN0ID0gQWN0aW9uOjpDb21wdXRl
RXhhY3RTcGFjZVVzZWQ7CisgICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3Rvciht
X3VzZXJzKSkKKyAgICAgICAgICAgIHVzZXItPmNvbXB1dGVFeGFjdFNwYWNlVXNlZCgpOworCisg
ICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBJZiBubyB1c2VyIG5lZWRzIHRv
IHVwZGF0ZSB1c2FnZSwgY29udGludWUgdG8gcHJvY2VzcyB0aGlzIHJlcXVlc3QuCisgICAgICAg
IG1fYWN0aW9uVGFrZW5Pbk5leHRSZXF1ZXN0ID0gQWN0aW9uOjpBc2tGb3JNb3JlU3BhY2U7CiAg
ICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3JlYXNlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE2NiwxMSArMTgxLDExIEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNr
Rm9yTW9yZVNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UpCiAgICAgICAgIFJFTEVBU0VfTE9H
KFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSByZWNl
aXZlZCByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDogMCk7
CiAKICAgICAgICAgbV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UgPSBmYWxzZTsK
LSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSwgU2hvdWxkRGVxdWV1ZUZp
cnN0UGVuZGluZ1JlcXVlc3Q6Olllcyk7CisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
bmV3UXVvdGEpOwogICAgIH0pOwogfQogCi12b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nl
c3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhLCBTaG91bGREZXF1
ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCBzaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdCkK
K3ZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25h
bDx1aW50NjRfdD4gbmV3UXVvdGEpCiB7CiAgICAgaWYgKG1fcGVuZGluZ1JlcXVlc3RzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTg0LDI3ICsxOTksNDcgQEAgdm9pZCBTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBu
ZXdRdW90YSwgU2gKICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGlu
Z1JlcXVlc3QgPT0gU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6OlllcykgeworICAg
IGlmIChtX2FjdGlvblRha2VuT25OZXh0UmVxdWVzdCA9PSBBY3Rpb246Ok5ldmVyICYmICFtX3F1
b3RhKSB7CisgICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICAgICAg
bV9hY3Rpb25UYWtlbk9uTmV4dFJlcXVlc3QgPSBBY3Rpb246Ok5vbmU7CisgICAgfQorCisgICAg
aWYgKG1fYWN0aW9uVGFrZW5Pbk5leHRSZXF1ZXN0ID09IEFjdGlvbjo6QXNrRm9yTW9yZVNwYWNl
KSB7CiAgICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgp
OwogICAgICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3Bh
Y2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdl
LCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0
IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwogCiAg
ICAgICAgIHJlcXVlc3QuY2FsbGJhY2soc2hvdWxkQWxsb3dSZXF1ZXN0ID8gRGVjaXNpb246Okdy
YW50IDogRGVjaXNpb246OkRlbnkpOworICAgICAgICBtX2FjdGlvblRha2VuT25OZXh0UmVxdWVz
dCA9IEFjdGlvbjo6Tm9uZTsKICAgICB9CiAKICAgICB3aGlsZSAoIW1fcGVuZGluZ1JlcXVlc3Rz
LmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvJiByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMu
Zmlyc3QoKTsKIAogICAgICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHJlcXVlc3Quc3Bh
Y2VJbmNyZWFzZSkpIHsKKyAgICAgICAgICAgIGlmIChtX2FjdGlvblRha2VuT25OZXh0UmVxdWVz
dCA9PSBBY3Rpb246Ok5vbmUpIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgcHJvY2Vzc2luZyBy
ZXF1ZXN0IGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIHVzYWdlIGlzIGFjY3VyYXRlLgorICAgICAg
ICAgICAgICAgIG1fYWN0aW9uVGFrZW5Pbk5leHRSZXF1ZXN0ID0gQWN0aW9uOjpDb21wdXRlRXhh
Y3RTcGFjZVVzZWQ7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVj
dG9yKG1fdXNlcnMpKQorICAgICAgICAgICAgICAgICAgICB1c2VyLT5jb21wdXRlRXhhY3RTcGFj
ZVVzZWQoKTsKKworICAgICAgICAgICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25V
c2Vycy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gSWYgbm8gdXNlciBuZWVkcyB0byB1cGRhdGUgdXNhZ2Ugb3Ig
dXNhZ2UgaXMgYWxyZWFkeSByZS1jb21wdXRlZCBmb3IgdGhpcyByZXF1ZXN0LAorICAgICAgICAg
ICAgLy8gY29udGludWUgdG8gcHJvY2VzcyB0aGlzIHJlcXVlc3QuCisgICAgICAgICAgICBtX2Fj
dGlvblRha2VuT25OZXh0UmVxdWVzdCA9IEFjdGlvbjo6QXNrRm9yTW9yZVNwYWNlOwogICAgICAg
ICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHJlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3Jl
YXNlICs9IHJlcXVlc3Quc3BhY2VJbmNyZWFzZTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGVu
ZGluZ1JlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgICAgICAgICBzcGFjZUlu
Y3JlYXNlICs9IHBlbmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CiAgICAgICAgICAgICBhc2tG
b3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAogICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50YWtlRmlyc3QoKS5jYWxsYmFjayhEZWNp
c2lvbjo6R3JhbnQpOworICAgICAgICBtX2FjdGlvblRha2VuT25OZXh0UmVxdWVzdCA9IEFjdGlv
bjo6Tm9uZTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmgKaW5kZXggOWY2NDYzM2VkNjZjYzEyYTkyODNjMDg5MWJkMjU1YWU5MzA0MmFi
Ny4uNjQ2NTRiNTY5ODBkZjliZDJjOTg1OGUzNWY1YTU1ZTlkNTcyOTQ5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKQEAgLTcwLDggKzcwLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBh
c2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKIAotICAgIGVudW0gY2xhc3Mg
U2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3QgeyBObywgWWVzIH07Ci0gICAgdm9pZCBw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiwgU2hvdWxkRGVxdWV1ZUZp
cnN0UGVuZGluZ1JlcXVlc3QpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRp
b25hbDx1aW50NjRfdD4pOwogCiAgICAgdWludDY0X3QgbV9xdW90YSB7IDAgfTsKIApAQCAtODAs
MTMgKzc5LDIxIEBAIHByaXZhdGU6CiAKICAgICBlbnVtIGNsYXNzIFdoZW5Jbml0aWFsaXplZENh
bGxlZCB7IE5vLCBZZXMgfTsKICAgICBIYXNoTWFwPFN0b3JhZ2VRdW90YVVzZXIqLCBXaGVuSW5p
dGlhbGl6ZWRDYWxsZWQ+IG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnM7Ci0gICAgSGFzaFNl
dDxjb25zdCBTdG9yYWdlUXVvdGFVc2VyKj4gbV91c2VyczsKKyAgICBIYXNoU2V0PFN0b3JhZ2VR
dW90YVVzZXIqPiBtX3VzZXJzOwogCiAgICAgc3RydWN0IFBlbmRpbmdSZXF1ZXN0IHsKICAgICAg
ICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZTsKICAgICAgICAgUmVxdWVzdENhbGxiYWNrIGNhbGxi
YWNrOwogICAgIH07CiAgICAgRGVxdWU8UGVuZGluZ1JlcXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3Rz
OworCisgICAgZW51bSBjbGFzcyBBY3Rpb24geworICAgICAgICBOZXZlciwgLy8gSGFzIG5ldmVy
IGhhbmRsZWQgcmVxdWVzdC4KKyAgICAgICAgTm9uZSwKKyAgICAgICAgQ29tcHV0ZUV4YWN0U3Bh
Y2VVc2VkLAorICAgICAgICBBc2tGb3JNb3JlU3BhY2UsCisgICAgfTsKKyAgICBBY3Rpb24gbV9h
Y3Rpb25UYWtlbk9uTmV4dFJlcXVlc3QgeyBBY3Rpb246Ok5ldmVyIH07CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VRdW90YVVzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5o
CmluZGV4IGI0MjMwYzVlMTJkMDk0ZDY5OWUxZTI5OTc5MTY0YWY1YjdjODM4ZTAuLjAzNTkwMmYx
ZWQyMmVmYThjMDMzNjdhMWE5YWIwNGVlZTliNmEwYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhVXNlci5oCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5TdG9yYWdlUXVvdGFVc2VyKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB1aW50NjRf
dCBzcGFjZVVzZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVFeGFjdFNw
YWNlVXNlZCgpIHsgfTsKICAgICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380055</attachid>
            <date>2019-10-02 14:00:12 -0700</date>
            <delta_ts>2019-10-03 13:34:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20191002140012.patch</filename>
            <type>text/plain</type>
            <size>9300</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY1ZDBmYjMwMTAyZWFk
YmNhZWI3ZmU3NjkzMzY4OTE3MzVlNzIwMi4uODExYjBkYWFmZGE0MjVmNTVmNmFjNTFjZTE4ZjA0
OGJhYTU0NThkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE5LTEwLTAyICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogbV9zcGFj
ZVVzZWQgc2hvdWxkIGJlIHN5bmNlZCB0byBhY2N1cmF0ZSB1c2FnZSBhdCBzb21lIHBvaW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE5NTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJREIgUXVvdGFV
c2VyIHNwYWNlIHVzYWdlIGlzIGFuIGVzdGltYXRlZCB2YWx1ZSBmb3IgYmV0dGVyIHBlcmZvcm1h
bmNlLiBXZSBuZWVkIHRvIGdldCB0aGUgYWNjdXJhdGUgdXNhZ2Ugd2hlbiAKKyAgICAgICAgaXQg
aXMgYmlnZ2VyIHRoYW4gc3BhY2UgYXZhaWxhYmxlLgorCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3BhY2VVc2VkKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVtb3ZlVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6YXNrRm9yTW9yZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1
b3RhTWFuYWdlci5oOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCk6CisKIDIw
MTktMTAtMDIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIyNTA1OTUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGI1OWVkN2Yy
MjQ0NzA0MTQ3ZmQxOTBhMWQxN2ZhODk0ZDM5ZmNiMGMuLmRiMDNhYjJhYTk5NDI3MjIxYWFiZjUx
NGYxMDMxZTZkZjM2NDY4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC03MzIsNiArNzMyLDExIEBAIHZvaWQg
SURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKICAgICBtX21hbmFnZXItPmFk
ZFVzZXIoKnRoaXMpOwogfQogCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3Bh
Y2VVc2VkKCkKK3sKKyAgICByZXNldFNwYWNlVXNlZCgpOworfQorCiB2b2lkIElEQlNlcnZlcjo6
UXVvdGFVc2VyOjppbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQogewogICAgIGlmICgh
bV9pc0luaXRpYWxpemVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDE5ZTY5NjJlZDE5YWJhNTQwMzJjYTA0NDcyNGVk
MTExNTM1NGE1YWYuLjVhYTNkYjVhMTg5YzgzZTkyYmI0ZWVlZDVkZWUwYjUzYzJkMTAxMDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmgKQEAgLTE2Nyw3ICsxNjcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0aWFs
aXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NwYWNlVXNlZCAr
IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsgfQorICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQo
KSBjb25zdCBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9pc0luaXRpYWxp
emVkKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJ
bmNyZWFzZTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSBmaW5h
bDsKICAgICAgICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKSBmaW5hbDsKIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5kZXggNzY3YWQyZWFmNGFj
Y2I4MzE5MDQ0MjI4OTcwNjk0OWI3MGIzNDMwZS4uYzAzNjlmZWUwYmNjNTFlYTM2NThkNDNmNmE2
ODgzM2U2ZTE1Mjk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwCkBAIC04NCw4ICs4NCw3IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAgICAgICBpZiAo
IW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKLSAgICAgICAg
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1
ZXN0OjpObyk7CisgICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAgICB9KTsK
IH0KIApAQCAtMTE5LDcgKzExOCw3IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3Zl
VXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9LCBTaG91bGRE
ZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOworICAgICAgICAgICAgICAgIHRoaXMtPnBy
b2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAgICAgICAgfSk7CiAgICAgfQogfQpAQCAtMTQz
LDEyICsxNDIsMjkgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWlu
dDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxiYWNrJiYKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIGlmIChtX3ByZXZpb3VzU3RhdGUgPT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQp
IHsKKyAgICAgICAgaWYgKCFtX3F1b3RhKQorICAgICAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9u
U3BhY2VVc2FnZSgpOworICAgICAgICBtX3ByZXZpb3VzU3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVj
aXNpb25Gb3JSZXF1ZXN0OworICAgIH0KKwogICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2Uo
c3BhY2VJbmNyZWFzZSkpIHsKICAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3Bh
Y2VJbmNyZWFzZSwgV1RGTW92ZShjYWxsYmFjaykgfSk7CisKKyAgICAgICAgLy8gVHJ5IHByb2Nl
c3NpbmcgcmVxdWVzdCBhZ2FpbiBhZnRlciBtYWtpbmcgc3VyZSB1c2FnZSBpcyBhY2N1cmF0ZS4K
KyAgICAgICAgbV9wcmV2aW91c1N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsKKyAg
ICAgICAgZm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMpKQorICAgICAgICAg
ICAgdXNlci0+Y29tcHV0ZVNwYWNlVXNlZCgpOworCisgICAgICAgIGlmICghbV9wZW5kaW5nSW5p
dGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgbV9wcmV2aW91c1N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKICAgICAgICAg
YXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CisgICAgbV9wcmV2aW91c1N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsK
ICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwogfQogCkBAIC0xNjYsMTEgKzE4MiwxMSBA
QCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFj
ZUluY3JlYXNlKQogICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UgcmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0
aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6IDApOwogCiAgICAgICAgIG1faXNXYWl0aW5nRm9y
U3BhY2VJbmNyZWFzZVJlc3BvbnNlID0gZmFsc2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVx
dWVzdHMobmV3UXVvdGEsIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpZZXMpOwor
ICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhKTsKICAgICB9KTsKIH0KIAot
dm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFs
PHVpbnQ2NF90PiBuZXdRdW90YSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Qgc2hv
dWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3QpCit2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6
OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3RhKQogewog
ICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE4NCwyNiArMjAwLDQ0IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNoCiAgICAgaWYgKCFtX3Bl
bmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0ID09IFNob3VsZERlcXVldWVG
aXJzdFBlbmRpbmdSZXF1ZXN0OjpZZXMpIHsKKyAgICBpZiAobV9wcmV2aW91c1N0YXRlID09IFN0
YXRlOjpVbmluaXRpYWxpemVkKSB7CisgICAgICAgIGlmICghbV9xdW90YSkKKyAgICAgICAgICAg
IHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICAgICAgbV9wcmV2aW91c1N0YXRl
ID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKKyAgICB9CisKKyAgICBpZiAobV9w
cmV2aW91c1N0YXRlID09IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2UpIHsKICAgICAgICAgYXV0
byByZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIGJvb2wg
c2hvdWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNl
SW5jcmVhc2UpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VR
dW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNpc2lv
biBpcyAlZCIsIHRoaXMsIHNob3VsZEFsbG93UmVxdWVzdCk7CiAKICAgICAgICAgcmVxdWVzdC5j
YWxsYmFjayhzaG91bGRBbGxvd1JlcXVlc3QgPyBEZWNpc2lvbjo6R3JhbnQgOiBEZWNpc2lvbjo6
RGVueSk7CisgICAgICAgIG1fcHJldmlvdXNTdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZv
clJlcXVlc3Q7CiAgICAgfQogCiAgICAgd2hpbGUgKCFtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5
KCkpIHsKICAgICAgICAgYXV0byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCk7
CiAKICAgICAgICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVh
c2UpKSB7CisgICAgICAgICAgICBpZiAobV9wcmV2aW91c1N0YXRlID09IFN0YXRlOjpNYWtpbmdE
ZWNpc2lvbkZvclJlcXVlc3QpIHsKKyAgICAgICAgICAgICAgICBtX3ByZXZpb3VzU3RhdGUgPSBT
dGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2VkOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdXNl
ciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJzKSkKKyAgICAgICAgICAgICAgICAgICAgdXNlci0+Y29t
cHV0ZVNwYWNlVXNlZCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBtX3ByZXZpb3VzU3RhdGUgPSBTdGF0ZTo6QXNraW5n
Rm9yTW9yZVNwYWNlOwogICAgICAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKLSAgICAg
ICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHJlcXVlc3Quc3BhY2VJbmNyZWFzZTsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3QgOiBtX3BlbmRpbmdSZXF1ZXN0cykKKyAg
ICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBlbmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVh
c2U7CiAgICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBtX3ByZXZpb3VzU3RhdGUgPSBTdGF0
ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwogICAgICAgICBtX3BlbmRpbmdSZXF1ZXN0cy50
YWtlRmlyc3QoKS5jYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXggOWY2NDYzM2VkNjZj
YzEyYTkyODNjMDg5MWJkMjU1YWU5MzA0MmFiNy4uN2Q3ZjFiMjY5NzliNDZlOThkOTkyNzQwOGU1
OTVhNjkxOThkZWNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmgKQEAgLTcwLDggKzcwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVV
c2Vyc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBhc2tVc2VyVG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90
YVVzZXImKTsKIAotICAgIGVudW0gY2xhc3MgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVl
c3QgeyBObywgWWVzIH07Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFs
PHVpbnQ2NF90PiwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3QpOworICAgIHZvaWQg
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4pOwogCiAgICAgdWludDY0
X3QgbV9xdW90YSB7IDAgfTsKIApAQCAtODAsMTMgKzc5LDIxIEBAIHByaXZhdGU6CiAKICAgICBl
bnVtIGNsYXNzIFdoZW5Jbml0aWFsaXplZENhbGxlZCB7IE5vLCBZZXMgfTsKICAgICBIYXNoTWFw
PFN0b3JhZ2VRdW90YVVzZXIqLCBXaGVuSW5pdGlhbGl6ZWRDYWxsZWQ+IG1fcGVuZGluZ0luaXRp
YWxpemF0aW9uVXNlcnM7Ci0gICAgSGFzaFNldDxjb25zdCBTdG9yYWdlUXVvdGFVc2VyKj4gbV91
c2VyczsKKyAgICBIYXNoU2V0PFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOwogCiAgICAgc3Ry
dWN0IFBlbmRpbmdSZXF1ZXN0IHsKICAgICAgICAgdWludDY0X3Qgc3BhY2VJbmNyZWFzZTsKICAg
ICAgICAgUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrOwogICAgIH07CiAgICAgRGVxdWU8UGVuZGlu
Z1JlcXVlc3Q+IG1fcGVuZGluZ1JlcXVlc3RzOworCisgICAgZW51bSBjbGFzcyBTdGF0ZSB7Cisg
ICAgICAgIFVuaW5pdGlhbGl6ZWQsCisgICAgICAgIENvbXB1dGluZ1NwYWNlVXNlZCwKKyAgICAg
ICAgQXNraW5nRm9yTW9yZVNwYWNlLAorICAgICAgICBNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Qs
CisgICAgfTsKKyAgICBTdGF0ZSBtX3ByZXZpb3VzU3RhdGUgeyBTdGF0ZTo6VW5pbml0aWFsaXpl
ZCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YVVzZXIuaAppbmRleCBiNDIzMGM1ZTEyZDA5NGQ2OTllMWUyOTk3OTE2NGFm
NWI3YzgzOGUwLi5iNzEwY2VlYzYwYzVkZTUwYzYwOWQyMzFiMGYwZGY5Njc0OTQ5NDIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaApAQCAtMzQsNiArMzQsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RvcmFnZVF1b3RhVXNlcigpID0gZGVmYXVsdDsKIAog
ICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlU3BhY2VVc2VkKCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCB3aGVuSW5pdGlh
bGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7
IH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380158</attachid>
            <date>2019-10-03 13:34:43 -0700</date>
            <delta_ts>2019-10-07 14:46:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20191003133442.patch</filename>
            <type>text/plain</type>
            <size>32644</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNjY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk1ZmQ5YzI1YzQ1NmVj
YjI4MTAzMmFhY2QxMWQ3YzUyYmU5MWMzYy4uM2MxYWQ3ZDVlMDdjYTgwMzFjMzJkZGNkOGJjMjkw
N2FmYzljM2RmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDE5LTEwLTAzICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogdXBkYXRl
IHNpemUgdG8gYWN0dWFsIGRpc2sgdXNhZ2Ugb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBp
cyBiaWdnZXIgdGhhbiBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisKKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQpOiBtX2VzdGltYXRlZFNwYWNlSW5jcmVh
c2Ugd2lsbCBiZSB1cGRhdGVkIHdoZW4gdGFzaworICAgICAgICBpcyBmaW5pc2hlZCwgc28gbm8g
bmVlZCB0byBjbGVhciBpdCB3aGVuIGRvaW5nIHJlc2V0LgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDogaW5zdGVhZCBvZiBy
ZWFkaW5nIGZpbGUgc2l6ZSBhZnRlciBlYWNoIHRhc2ssIGp1c3QgYWRkIHRoZSAKKyAgICAgICAg
dGFzayBzaXplIHRvIGtub3duIHVzYWdlIGFuZCBnZXQgYW4gZXN0aW1hdGVkIHVzYWdlLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVD
YWxsYmFja0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpj
cmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2Jq
ZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJR
dW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVD
bG9zZUZvclVzZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Z2VuZXJhdGVVbmlxdWVDYWxs
YmFja0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorCisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDogdXNlIG1fcHJldmlvdXNT
dGF0ZSB0byBkZWNpZGUgd2hhdCBhY3Rpb24gdG8gdGFrZSBvbiBuZXh0IHJlcXVlc3QuIFByZXZp
b3VzbHkKKyAgICAgICAgd2hlbiBhIHJlcXVlc3QgYXNrZWQgZm9yIHNpemUgYmlnZ2VyIHRoYW4g
c3BhY2UgYXZhaWxhYmxlLCB3ZSB3b3VsZCBnbyB0byBhc2sgZm9yIG1vcmUgc3BhY2UgZGlyZWN0
bHkuIE5vdyAKKyAgICAgICAgYmVjYXVzZSBJREIgY2FuIGJlIHJlcG9ydGluZyBlc3RpbWF0ZWQg
dXNhZ2UsIHdlIGZpcnN0IGFzayBJREIgdG8gY29tcHV0ZSBpdHMgYWN0dWFsIGRpc2sgdXNhZ2Ug
YW5kIGFzayBmb3IgbW9yZQorICAgICAgICBzcGFjZSBpZiBhY3R1YWwgc3BhY2UgYXZhaWxhYmxl
IGlzIHNtYWxsZXIgdGhhbiByZXF1ZXN0ZWQgc2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3Jh
Z2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAqIHN0b3Jh
Z2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVv
dGFVc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjpjb21wdXRlU3Bh
Y2VVc2VkKTogYWRkIGFuIGludGVyZmFjZSBmb3IgYXNraW5nIHVzZXIgdG8gY29tcHV0ZSB0aGUg
YWN0dWFsIGRpc2sgdXNhZ2UuCisKIDIwMTktMTAtMDMgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jlc3Npb246IGlPUyAxMy4xIE1lZGlhU3RyZWFtVHJh
Y2suZW5hYmxlZCA9IGZhbHNlIGtpbGxzIGF1ZGlvIHRyYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGI1OWVk
N2YyMjQ0NzA0MTQ3ZmQxOTBhMWQxN2ZhODk0ZDM5ZmNiMGMuLjQyOGFhODAwYjUxMWQ0YTg4MDNi
MWJkZGMxYzJlYWU2Y2M5MTBjZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC03MTIsNyArNzEyLDYgQEAgSURC
U2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVzZXIoKQogdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNl
cjo6cmVzZXRTcGFjZVVzZWQoKQogewogICAgIG1fc3BhY2VVc2VkID0gMDsKLSAgICBtX2VzdGlt
YXRlZFNwYWNlSW5jcmVhc2UgPSAwOwogCiAgICAgaWYgKCFtX21hbmFnZXIpCiAgICAgICAgIHJl
dHVybjsKQEAgLTczMiw2ICs3MzEsMTEgQEAgdm9pZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVz
ZXRTcGFjZVVzZWQoKQogICAgIG1fbWFuYWdlci0+YWRkVXNlcigqdGhpcyk7CiB9CiAKK3ZvaWQg
SURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQoKQoreworICAgIHJlc2V0U3Bh
Y2VVc2VkKCk7Cit9CisKIHZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmluY3JlYXNlU3BhY2VV
c2VkKHVpbnQ2NF90IHNpemUpCiB7CiAgICAgaWYgKCFtX2lzSW5pdGlhbGl6ZWQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5k
ZXggMTllNjk2MmVkMTlhYmE1NDAzMmNhMDQ0NzI0ZWQxMTE1MzU0YTVhZi4uNWFhM2RiNWExODlj
ODNlOTJiYjRlZWVkNWRlZTBiNTNjMmQxMDEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTY3LDcgKzE2NywxMiBA
QCBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXRpYWxpemVTcGFjZVVzZWQodWludDY0X3Qgc3Bh
Y2VVc2VkKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNl
OyB9CisgICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQpOworICAgICAgICAgICAgcmV0dXJu
IG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwogICAgICAgICB2b2lkIHdoZW5Jbml0
aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIGZpbmFsOwogCiAgICAgICAgIElE
QlNlcnZlciYgbV9zZXJ2ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBkODViMDAx
NDhhMmE1YzMwNjBiYTUwYzBlMTIyMDc1YzYzNWJiYzRmLi4wZGNlZWEwODBkNDE3MDM0MWZkZThj
MTA2OGY2MGJkODcyMzgxYWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTIwNyw2
ICsyMDcsMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6d2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGkKICAgICByZXF1ZXN0U3BhY2UodHJh
bnNhY3Rpb24sIDAsICIiLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWlu
dDY0X3QgdGFza1NpemUpCit7CisgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VV
c2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOworICAgIG1fcGVuZGluZ1NwYWNl
SW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOworfQorCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVy
LCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOworICAgIGlmIChpdGVyYXRvciAh
PSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkpIHsKKyAgICAgICAgbV9zZXJ2ZXIt
PmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0
b3ItPnZhbHVlKTsKKyAgICAgICAgaWYgKGlzVGFza1N1Y2Nlc3NmdWwpCisgICAgICAgICAgICBt
X3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRv
ci0+dmFsdWUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0
ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJy
ZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uICglcCkiLCB0aGlzKTsKQEAg
LTIzNSw3ICsyNTIsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9w
ZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6
R3JhbnQ6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMtPnBvc3REYXRhYmFzZVRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3Rv
cmUsIG1faWRlbnRpZmllcikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhbGxiYWNrSUQg
PSB0aGlzLT5nZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpOworICAgICAgICAgICAg
ICAgICAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIGRlZmF1bHRXcml0ZU9w
ZXJhdGlvbkNvc3QpOworICAgICAgICAgICAgICAgICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNr
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFj
a2luZ1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSUQpKTsKICAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTM0OCwxNCArMzY3LDEyIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlk
ZW50aWZpZXImIGlkZW50aWZpCiAKICAgICBpZiAobV9iYWNraW5nU3RvcmUpIHsKICAgICAgICAg
bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX25ld0RhdGFi
YXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAogICAgICAgICBtX2Jh
Y2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11
bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICAgICAgbV9iYWNraW5nU3RvcmVJc0Vw
aGVtZXJhbCA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gYmFja2luZ1N0b3Jl
ID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsKLSAgICAgICAgbV9j
dXJyZW50RGF0YWJhc2VTaXplID0gYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKIAogICAg
ICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwogICAgICAgICBhdXRvIGVycm9yID0g
YmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOwpA
QCAtMzY0LDcgKzM4MSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICAgICAgZGVs
ZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwogICAgICAgICBiYWNraW5nU3Rv
cmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IGJh
Y2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0ZWRWZXJzaW9uKSk7CkBAIC00MDAsMTAgKzQxNiw4
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UoKQogCiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UiKTsK
IAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKICAg
ICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXpl
ID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwotICAgIH0KIAogICAgIG1fYmFja2lu
Z1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3Vz
VHJhbnNhY3Rpb25zID0gZmFsc2U7CkBAIC00MjIsOCArNDM2LDYgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSgpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VS
ZXBseVF1ZXVlLmlzRW1wdHkoKSk7CiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUua2lsbCgpOwot
Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQpAQCAt
NDU1LDggKzQ2Nyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdT
dG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVx
dWVzdCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsK
LQogICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzcyA9IGZhbHNlOwogCiAgICAgaWYg
KG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCkBAIC01MzcsMTQgKzU0NywxNCBAQCBib29sIFVu
aXF1ZUlEQkRhdGFiYXNlOjphbGxDb25uZWN0aW9uc0FyZUNsb3NlZE9yQ2xvc2luZygpIGNvbnN0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNh
bGxiYWNrSWRlbnRpZmllcigpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVV
bmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRJRCA9IDA7CiAgICAgcmV0dXJuICsrY3VycmVu
dElEOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3QgdGFza1NpemUpCit1aW50
NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2Fs
bGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkg
ewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRlbGV0ZUVycm9yKCkpOwpAQCAtNTU1
LDE2ICs1NjUsMTEgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ssIHUKICAgICBBU1NFUlQoIW1fZXJy
b3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fZXJyb3JDYWxsYmFja3Mu
YWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIGlmICh0YXNrU2l6ZSkg
ewotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlm
aWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2lu
Z1Rhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci0gICAgfQotCiAgICAgbV9jYWxsYmFj
a1F1ZXVlLmFwcGVuZChpZGVudGlmaWVyKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIAot
dWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlE
YXRhQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlx
dWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYm
IGNhbGxiYWNrKQogewogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAgICAg
ICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSwgeyB9KTsKQEAgLTU3NSwx
MSArNTgwLDYgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywKICAgICBBU1NFUlQoIW1fa2V5RGF0
YUNhbGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgbV9rZXlEYXRhQ2FsbGJhY2tz
LmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUp
IHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRp
Zmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNp
bmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwotICAgIH0KLQogICAgIG1fY2FsbGJh
Y2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkBA
IC03ODAsNyArNzgwLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWRkT3BlbkRhdGFiYXNl
Q29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW8KICAgICBtX29wZW5EYXRh
YmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0aW9uLmxlYWtSZWYoKSkpOwogfQog
Ci12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5C
YWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCB1aW50
NjRfdCB0YXNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9y
ZSAoJXApIiwgdGhpcyk7CkBAIC03OTAsMTcgKzc5MCwxMyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRp
ZmllcgogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMg
PSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKTsKICAg
ICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNraW5nU3RvcmUtPmlzRXBoZW1lcmFs
KCk7CiAKLSAgICAvLyBRdW90YVVzZXIgc2hvdWxkIGhhdmUgaW5pdGlsaWF6ZWQgc3RvcmFnZSB1
c2FnZSwgd2hpY2ggY29udGFpbnMgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGlzIGRhdGFiYXNlLgot
ICAgIG1fY3VycmVudERhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUo
KTsKLQogICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgYXV0byBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8p
OwogCi0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8s
IGVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFz
ZUluZm8sIGVycm9yLCAgdGFza0lkZW50aWZpZXIpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNv
bnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJy
b3IsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3Bl
bkJhY2tpbmdTdG9yZSIpOwpAQCAtODExLDcgKzgwNyw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25z
dCBJCiAgICAgQVNTRVJUKG1faXNPcGVuaW5nQmFja2luZ1N0b3JlKTsKICAgICBtX2lzT3Blbmlu
Z0JhY2tpbmdTdG9yZSA9IGZhbHNlOwogCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsK
KyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh0YXNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxs
KCkpOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCiAgICAgICAgIHJldHVy
bjsKQEAgLTgzNiwxMCArODMyLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAKIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2
NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQog
ewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RG
TW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxi
YWNrSUQpCiAgICAgICAgIHJldHVybjsKIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2Fs
bGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgaW5mbykpOwog
fQogCkBAIC04NjAsNiArODU3LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSIpOwogCisgICAgZmluaXNoU3Bh
Y2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAg
aWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+YWRkRXhpc3RpbmdP
YmplY3RTdG9yZShpbmZvKTsKIApAQCAtOTM1LDcgKzkzMyw3IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJR
dW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFz
a1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0
dXJuOwogCkBAIC05NDUsNiArOTQzLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1l
T2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXEKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
RCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2Fs
bGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBuZXdOYW1lKSk7CiB9CiAKQEAgLTk2NSw2ICs5NjQsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3Jl
Iik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJh
c2VJbmZvLT5yZW5hbWVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUp
OwogCkBAIC0xMDMwLDkgKzEwMzAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRl
SW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGMKIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3Qg
dGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJJbmRleEluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOworCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0
YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBpbmZvKSk7CiB9CiAKQEAgLTEwNTksNiAr
MTA2MSw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlSW5kZXgiKTsKIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOworCiAgICAgaWYgKGVycm9yLmlzTnVsbCgp
KSB7CiAgICAgICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVj
dFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShp
bmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKQEAgLTExNDcsNyArMTE1MSw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCB1CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4
QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFj
ayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09y
RmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAg
ICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKQEAgLTExNjMsNiArMTE2Nyw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVp
bnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJECiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAg
ICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdO
YW1lKSk7CiB9CiAKQEAgLTExODMsNiArMTE4OCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4p
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgiKTsKIAorICAgIGZpbmlz
aFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwog
ICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8g
PSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlSW5mbyk7CkBAIC0xMjEzLDkg
KzEyMTksMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnMKIAogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29u
c3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBv
dmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWludDY0X3Qg
Y2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwg
dGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJl
RXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAg
cmV0dXJuOworCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6
ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCksIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlKSk7CiB9CiAKQEAgLTEzMDMsNiAr
MTMxMSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUHV0T3JBZGQiKTsKIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2so
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIApAQCAtMjA5Nyw5ICsy
MTA2LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayhDcm9zc1Ro
cmVhZFRhc2smJiB0YXNrKQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoQ3Jvc3NUaHJlYWRUYXNrJiYgdGFzaykKIHsKLSAgICBpZiAobV9iYWNraW5nU3Rv
cmUpCi0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNl
U2l6ZSgpOwotCiAgICAgbV9kYXRhYmFzZVJlcGx5UXVldWUuYXBwZW5kKFdURk1vdmUodGFzaykp
OwogICAgIG1fc2VydmVyLT5wb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmV4ZWN1dGVOZXh0RGF0YWJhc2VUYXNrUmVw
bHkpKTsKIH0KQEAgLTIxNjQsOCArMjE3MCw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Omlt
bWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuY2xlYXIoKTsKLSAgICBtX3Nl
cnZlci0+cmVzZXRTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpKTsKKyAgICBmb3IgKGF1
dG8gc2l6ZSA6IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy52YWx1ZXMoKSkKKyAgICAgICAg
bV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4o
KSwgc2l6ZSk7CisgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmNsZWFyKCk7CiAKICAg
ICAvLyBFcnJvciBvdXQgYWxsIHRyYW5zYWN0aW9ucwogICAgIGZvciAoYXV0byYgaWRlbnRpZmll
ciA6IGNvcHlUb1ZlY3RvcihtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMua2V5cygpKSkKQEAgLTIy
NDEsMzMgKzIyNDgsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZv
clVzZXJEZWxldGUoKQogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFj
a2luZ1N0b3JlKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVwZGF0ZVNwYWNlVXNl
ZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllcikK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG9wdGlvbmFsQ2FsbGJh
Y2tJZGVudGlmaWVyKSB7Ci0gICAgICAgIHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciA9IG9w
dGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5maW5kKGNhbGxiYWNrSWRlbnRpZmllcik7
Ci0gICAgICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5l
bmQoKSkgewotICAgICAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2Vk
KG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgICAgIG1f
cGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLnJlbW92ZShpdGVyYXRvcik7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUgPSBtX25ld0RhdGFiYXNlU2l6ZTsK
LSAgICBpZiAoZGF0YWJhc2VTaXplICE9IG1fY3VycmVudERhdGFiYXNlU2l6ZSkgewotICAgICAg
ICBpZiAoZGF0YWJhc2VTaXplID4gbV9jdXJyZW50RGF0YWJhc2VTaXplKQotICAgICAgICAgICAg
bV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgZGF0YWJh
c2VTaXplIC0gbV9jdXJyZW50RGF0YWJhc2VTaXplKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9zZXJ2ZXItPmRlY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgbV9j
dXJyZW50RGF0YWJhc2VTaXplIC0gZGF0YWJhc2VTaXplKTsKLSAgICAgICAgbV9jdXJyZW50RGF0
YWJhc2VTaXplID0gZGF0YWJhc2VTaXplOwotICAgIH0KLX0KLQogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJREJFcnJvciYgZXJyb3IpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2Fs
bGJhY2tJZGVudGlmaWVyKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tz
LnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJk
Q2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0yMjc5LDggKzIy
NjEsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtleSkKIHsKLSAgICB1
cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwotCiAgICAgYXV0byBj
YWxsYmFjayA9IG1fa2V5RGF0YUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CiAg
ICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogICAgIGlm
IChjYWxsYmFjaykgewpAQCAtMjMyNSw4ICsyMzA1LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNvdW50Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllcikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxs
YmFja0lkZW50aWZpZXIpOwotCiAgICAgQVNTRVJUKG1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMo
Y2FsbGJhY2tJZGVudGlmaWVyKSk7CiAgICAgQVNTRVJUKG1fY2FsbGJhY2tRdWV1ZS5sYXN0KCkg
PT0gY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBtX2NhbGxiYWNrUXVldWUucmVtb3ZlTGFzdCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCA1M2IyMWRmZTRkMjFkYTU1ZmZjYTZmMDZmYjA2
YjIyNzVjMWVjZjhkLi41OTQ0M2MxZjg2MzUwNzQzNWFlYTQzMzJiZDZmNjBlZjAzMDRjNTE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTE2LDggKzExNiw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaGFyZENsb3NlZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBtX2hhcmRDbG9z
ZWRGb3JVc2VyRGVsZXRlOyB9CiAKLSAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdDsKLQog
ICAgIHZvaWQgZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CiAKIHByaXZhdGU6CkBAIC0xNjAs
NyArMTU4LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIERhdGFiYXNlIHRocmVhZCBvcGVyYXRpb25z
CiAgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVy
Jik7Ci0gICAgdm9pZCBvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYpOworICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQ29tbWl0VHJh
bnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9pZCBwZXJmb3JtQWJvcnRU
cmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIGJlZ2luVHJhbnNh
Y3Rpb25JbkJhY2tpbmdTdG9yZShjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKQEAgLTE4OCw3
ICsxODYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gTWFpbiB0aHJlYWQgY2FsbGJhY2tzCiAgICAg
dm9pZCBkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pOwotICAg
IHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mLCBjb25zdCBJ
REJFcnJvciYpOworICAgIHZvaWQgZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFz
ZUluZm8mLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKTsKICAgICB2
b2lkIGRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvbnN0IElEQkVycm9yJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CiAgICAgdm9p
ZCBkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAg
dm9pZCBkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJFcnJvciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBuZXdOYW1lKTsKQEAgLTIxMSw4ICsyMDksOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlkUGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKTsKICAgICB2b2lk
IGRpZFNodXRkb3duRm9yQ2xvc2UoKTsKIAotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihFcnJvckNhbGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7Ci0gICAgdWlu
dDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmLCB1aW50NjRf
dCB0YXNrU2l6ZSA9IDApOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihF
cnJvckNhbGxiYWNrJiYpOworICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihL
ZXlEYXRhQ2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KEdldEFsbFJlc3VsdHNDYWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JG
aXJlRXJyb3IoR2V0UmVzdWx0Q2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKENvdW50Q2FsbGJhY2smJik7CkBAIC0yNDksNyArMjQ3LDEwIEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHJlcXVlc3RTcGFjZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiwgdWludDY0X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChPcHRpb25hbDxJREJFcnJvcj4mJik+JiYpOwogICAgIHZvaWQgd2FpdEZv
clJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmKTsKLSAgICB2b2lk
IHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2NF90PiBvcHRpb25hbENhbGxi
YWNrSWRlbnRpZmllciA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBzdGFydFNwYWNlSW5jcmVh
c2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKTsKKyAgICB2b2lk
IGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNr
U3VjY2Vzc2Z1bCk7CisKKyAgICBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVDYWxsYmFj
a0lkZW50aWZpZXIoKTsKIAogICAgIFJlZjxJREJTZXJ2ZXI+IG1fc2VydmVyOwogICAgIElEQkRh
dGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CkBAIC0zMDIsOSArMzAzLDcgQEAgcHJpdmF0
ZToKIAogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnNvclByZWZldGNo
ZXM7CiAKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNy
ZWFzaW5nVGFza3M7Ci0gICAgdWludDY0X3QgbV9jdXJyZW50RGF0YWJhc2VTaXplIHsgMCB9Owot
ICAgIHVpbnQ2NF90IG1fbmV3RGF0YWJhc2VTaXplIHsgMCB9OworICAgIEhhc2hNYXA8dWludDY0
X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3M7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwCmluZGV4IDc2N2FkMmVhZjRhY2NiODMxOTA0NDIyODk3MDY5NDliNzBiMzQz
MGUuLmMwMzY5ZmVlMGJjYzUxZWEzNjU4ZDQzZjZhNjg4MzNlNmUxNTI5ODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcApAQCAtODQsOCArODQs
NyBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFn
ZVF1b3RhVXNlciYgdXNlcikKICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVz
ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB1cGRhdGVRdW90
YUJhc2VkT25TcGFjZVVzYWdlKCk7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9
LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOworICAgICAgICBwcm9jZXNz
UGVuZGluZ1JlcXVlc3RzKHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTExOSw3ICsxMTgsNyBAQCB2
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNl
cikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdJ
bml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0aGlzLT5wcm9j
ZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6
Ok5vKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7
CiAgICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTE0MywxMiArMTQyLDI5IEBAIHZvaWQgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVl
c3RDYWxsYmFjayYmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAobV9wcmV2aW91
c1N0YXRlID09IFN0YXRlOjpVbmluaXRpYWxpemVkKSB7CisgICAgICAgIGlmICghbV9xdW90YSkK
KyAgICAgICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsKKyAgICAgICAgbV9w
cmV2aW91c1N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKKyAgICB9CisK
ICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7CiAgICAgICAg
IG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1vdmUoY2FsbGJh
Y2spIH0pOworCisgICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdhaW4gYWZ0ZXIg
bWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJhdGUuCisgICAgICAgIG1fcHJldmlvdXNTdGF0ZSA9
IFN0YXRlOjpDb21wdXRpbmdTcGFjZVVzZWQ7CisgICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNv
cHlUb1ZlY3RvcihtX3VzZXJzKSkKKyAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQo
KTsKKworICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcHJldmlvdXNTdGF0ZSA9IFN0YXRl
OjpBc2tpbmdGb3JNb3JlU3BhY2U7CiAgICAgICAgIGFza0Zvck1vcmVTcGFjZShzcGFjZUluY3Jl
YXNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1fcHJldmlvdXNTdGF0ZSA9IFN0
YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7CiAgICAgY2FsbGJhY2soRGVjaXNpb246Okdy
YW50KTsKIH0KIApAQCAtMTY2LDExICsxODIsMTEgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2Vy
Ojphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSkKICAgICAgICAgUkVMRUFT
RV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNwYWNl
IHJlY2VpdmVkIHJlc3BvbnNlICUiIFBSSXU2NCwgdGhpcywgbmV3UXVvdGEgPyAqbmV3UXVvdGEg
OiAwKTsKIAogICAgICAgICBtX2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSA9IGZh
bHNlOwotICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3RhLCBTaG91bGREZXF1
ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1
ZXN0cyhuZXdRdW90YSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNob3Vs
ZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1
ZXN0KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9w
dGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKIHsKICAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xODQsMjYgKzIwMCw0NCBAQCB2b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0
X3Q+IG5ld1F1b3RhLCBTaAogICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzaG91bGREZXF1ZXVlRmlyc3RQ
ZW5kaW5nUmVxdWVzdCA9PSBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6WWVzKSB7
CisgICAgaWYgKG1fcHJldmlvdXNTdGF0ZSA9PSBTdGF0ZTo6VW5pbml0aWFsaXplZCkgeworICAg
ICAgICBpZiAoIW1fcXVvdGEpCisgICAgICAgICAgICB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVz
YWdlKCk7CisgICAgICAgIG1fcHJldmlvdXNTdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZv
clJlcXVlc3Q7CisgICAgfQorCisgICAgaWYgKG1fcHJldmlvdXNTdGF0ZSA9PSBTdGF0ZTo6QXNr
aW5nRm9yTW9yZVNwYWNlKSB7CiAgICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVl
c3RzLnRha2VGaXJzdCgpOwogICAgICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9ICFzaG91
bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKTsKIAogICAgICAgICBSRUxF
QVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGlu
Z1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91bGRBbGxv
d1JlcXVlc3QpOwogCiAgICAgICAgIHJlcXVlc3QuY2FsbGJhY2soc2hvdWxkQWxsb3dSZXF1ZXN0
ID8gRGVjaXNpb246OkdyYW50IDogRGVjaXNpb246OkRlbnkpOworICAgICAgICBtX3ByZXZpb3Vz
U3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwogICAgIH0KIAogICAgIHdo
aWxlICghbV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8mIHJlcXVl
c3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwogCiAgICAgICAgIGlmIChzaG91bGRBc2tG
b3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgeworICAgICAgICAgICAgaWYgKG1f
cHJldmlvdXNTdGF0ZSA9PSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0KSB7CisgICAg
ICAgICAgICAgICAgbV9wcmV2aW91c1N0YXRlID0gU3RhdGU6OkNvbXB1dGluZ1NwYWNlVXNlZDsK
KyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2Vycykp
CisgICAgICAgICAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQoKTsKKworICAgICAg
ICAgICAgICAgIGlmICghbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bV9wcmV2aW91c1N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKICAgICAgICAgICAg
IHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UgPSAwOwotICAgICAgICAgICAgZm9yIChhdXRvJiByZXF1
ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCi0gICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFzZSAr
PSByZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBlbmRpbmdS
ZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCisgICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFz
ZSArPSBwZW5kaW5nUmVxdWVzdC5zcGFjZUluY3JlYXNlOwogICAgICAgICAgICAgYXNrRm9yTW9y
ZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
KyAgICAgICAgbV9wcmV2aW91c1N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVz
dDsKICAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNp
b246OkdyYW50KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhTWFuYWdlci5oCmluZGV4IDlmNjQ2MzNlZDY2Y2MxMmE5MjgzYzA4OTFiZDI1NWFlOTMwNDJh
YjcuLjdkN2YxYjI2OTc5YjQ2ZTk4ZDk5Mjc0MDhlNTk1YTY5MTk4ZGVjYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC03MCw4ICs3MCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpOwogICAgIHZvaWQg
YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJik7CiAKLSAgICBlbnVtIGNsYXNz
IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHsgTm8sIFllcyB9OwotICAgIHZvaWQg
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4sIFNob3VsZERlcXVldWVG
aXJzdFBlbmRpbmdSZXF1ZXN0KTsKKyAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0
aW9uYWw8dWludDY0X3Q+KTsKIAogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CiAKQEAgLTgw
LDEzICs3OSwyMSBAQCBwcml2YXRlOgogCiAgICAgZW51bSBjbGFzcyBXaGVuSW5pdGlhbGl6ZWRD
YWxsZWQgeyBObywgWWVzIH07CiAgICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFVc2VyKiwgV2hlbklu
aXRpYWxpemVkQ2FsbGVkPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzOwotICAgIEhhc2hT
ZXQ8Y29uc3QgU3RvcmFnZVF1b3RhVXNlcio+IG1fdXNlcnM7CisgICAgSGFzaFNldDxTdG9yYWdl
UXVvdGFVc2VyKj4gbV91c2VyczsKIAogICAgIHN0cnVjdCBQZW5kaW5nUmVxdWVzdCB7CiAgICAg
ICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7CiAgICAgICAgIFJlcXVlc3RDYWxsYmFjayBjYWxs
YmFjazsKICAgICB9OwogICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3BlbmRpbmdSZXF1ZXN0
czsKKworICAgIGVudW0gY2xhc3MgU3RhdGUgeworICAgICAgICBVbmluaXRpYWxpemVkLAorICAg
ICAgICBDb21wdXRpbmdTcGFjZVVzZWQsCisgICAgICAgIEFza2luZ0Zvck1vcmVTcGFjZSwKKyAg
ICAgICAgTWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0LAorICAgIH07CisgICAgU3RhdGUgbV9wcmV2
aW91c1N0YXRlIHsgU3RhdGU6OlVuaW5pdGlhbGl6ZWQgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3Rh
VXNlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKaW5kZXgg
YjQyMzBjNWUxMmQwOTRkNjk5ZTFlMjk5NzkxNjRhZjViN2M4MzhlMC4uYjcxMGNlZWM2MGM1ZGU1
MGM2MDlkMjMxYjBmMGRmOTY3NDk0OTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlUXVvdGFVc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlUXVvdGFVc2VyLmgKQEAgLTM0LDYgKzM0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflN0
b3JhZ2VRdW90YVVzZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2aXJ0dWFsIHVpbnQ2NF90IHNwYWNl
VXNlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIHsg
fTsKICAgICB2aXJ0dWFsIHZvaWQgd2hlbkluaXRpYWxpemVkKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380364</attachid>
            <date>2019-10-07 14:46:02 -0700</date>
            <delta_ts>2019-10-07 19:36:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20191007144551.patch</filename>
            <type>text/plain</type>
            <size>33276</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwNzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2YzMzBlNGVmOGY1ZDRk
OTg1NTI0NDRhZjJhYjk4NmI1NzAwNjc5OC4uMDc3MzMwYzBhMDE4MDAyNzJkYjVlN2Q1MzNkYmI2
MTZlMWZiOThjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE5LTEwLTA3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogdXBkYXRl
IHNpemUgdG8gYWN0dWFsIGRpc2sgdXNhZ2Ugb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBp
cyBiaWdnZXIgdGhhbiBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisKKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQpOiBtX2VzdGltYXRlZFNwYWNlSW5jcmVh
c2Ugd2lsbCBiZSB1cGRhdGVkIHdoZW4gdGFzaworICAgICAgICBpcyBmaW5pc2hlZCwgc28gbm8g
bmVlZCB0byBjbGVhciBpdCB3aGVuIGRvaW5nIHJlc2V0LgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDogaW5zdGVhZCBvZiBy
ZWFkaW5nIGZpbGUgc2l6ZSBhZnRlciBlYWNoIHRhc2ssIGp1c3QgYWRkIHRoZSAKKyAgICAgICAg
dGFzayBzaXplIHRvIGtub3duIHVzYWdlIGFuZCBnZXQgYW4gZXN0aW1hdGVkIHVzYWdlLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVD
YWxsYmFja0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpj
cmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2Jq
ZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJR
dW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVD
bG9zZUZvclVzZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Z2VuZXJhdGVVbmlxdWVDYWxs
YmFja0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorCisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDogdXNlIG1fc3RhdGUgdG8g
ZGVjaWRlIHdoYXQgYWN0aW9uIHRvIHRha2Ugb24gbmV4dCByZXF1ZXN0LiBQcmV2aW91c2x5IHdo
ZW4gYSAKKyAgICAgICAgcmVxdWVzdCBhc2tlZCBmb3Igc2l6ZSBiaWdnZXIgdGhhbiBzcGFjZSBh
dmFpbGFibGUsIHdlIHdvdWxkIGdvIHRvIGFzayBmb3IgbW9yZSBzcGFjZSBkaXJlY3RseS4gTm93
IGJlY2F1c2UgSURCCisgICAgICAgIGNhbiBiZSByZXBvcnRpbmcgZXN0aW1hdGVkIHVzYWdlLCB3
ZSBmaXJzdCBhc2sgSURCIHRvIGNvbXB1dGUgaXRzIGFjdHVhbCBkaXNrIHVzYWdlIGFuZCBhc2sg
Zm9yIG1vcmUgc3BhY2UgaWYgCisgICAgICAgIGFjdHVhbCBzcGFjZSBhdmFpbGFibGUgaXMgc21h
bGxlciB0aGFuIHJlcXVlc3RlZCBzaXplLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjpjb21wdXRlU3BhY2VVc2VkKToK
KwogMjAxOS0xMC0wNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFBlbmRpbmdJbWFnZUJpdG1hcCBzaG91bGQgbm90IHByZXZlbnQgZW50ZXJpbmcgdGhlIGJhY2sv
Zm9yd2FyZCBjYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCBiNTllZDdmMjI0NDcwNDE0N2ZkMTkwYTFkMTdm
YTg5NGQzOWZjYjBjLi40MjhhYTgwMGI1MTFkNGE4ODAzYjFiZGRjMWMyZWFlNmNjOTEwY2YwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcApAQCAtNzEyLDcgKzcxMiw2IEBAIElEQlNlcnZlcjo6UXVvdGFVc2VyOjp+UXVv
dGFVc2VyKCkKIHZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKIHsK
ICAgICBtX3NwYWNlVXNlZCA9IDA7Ci0gICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsK
IAogICAgIGlmICghbV9tYW5hZ2VyKQogICAgICAgICByZXR1cm47CkBAIC03MzIsNiArNzMxLDEx
IEBAIHZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKICAgICBtX21h
bmFnZXItPmFkZFVzZXIoKnRoaXMpOwogfQogCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpj
b21wdXRlU3BhY2VVc2VkKCkKK3sKKyAgICByZXNldFNwYWNlVXNlZCgpOworfQorCiB2b2lkIElE
QlNlcnZlcjo6UXVvdGFVc2VyOjppbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQogewog
ICAgIGlmICghbV9pc0luaXRpYWxpemVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDE5ZTY5NjJlZDE5YWJhNTQwMzJj
YTA0NDcyNGVkMTExNTM1NGE1YWYuLjVhYTNkYjVhMTg5YzgzZTkyYmI0ZWVlZDVkZWUwYjUzYzJk
MTAxMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmgKQEAgLTE2Nyw3ICsxNjcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBpbml0aWFsaXplU3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7CiAKICAgICBwcml2YXRl
OgotICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Nw
YWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsgfQorICAgICAgICB1aW50NjRfdCBz
cGFjZVVzZWQoKSBjb25zdCBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9p
c0luaXRpYWxpemVkKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1h
dGVkU3BhY2VJbmNyZWFzZTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNvbXB1dGVTcGFjZVVz
ZWQoKSBmaW5hbDsKICAgICAgICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKSBmaW5hbDsKIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggY2U4MWViMDkxYmVkZjBlMGU4ZGFmNGVmZWZkZDQw
YzAyZTE3ZjM0MC4uZmE2ZjFkYTUxNWNiNDI3N2RmZjhkMDUwZTBhMjcwZDhiMTI3NGJjMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0yMTksNiArMjE5LDIzIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3RpCiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92
ZShjYWxsYmFjaykpOwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5j
cmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAg
IG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2lu
KCksIHRhc2tTaXplKTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuYWRkKGlkZW50
aWZpZXIsIHRhc2tTaXplKTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoU3Bh
Y2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgYm9vbCBpc1Rhc2tTdWNjZXNzZnVs
KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZmlu
ZChpZGVudGlmaWVyKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9wZW5kaW5nU3BhY2VJbmNyZWFz
ZVRhc2tzLmVuZCgpKSB7CisgICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVBvdGVudGlhbFNwYWNl
VXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIGlm
IChpc1Rhc2tTdWNjZXNzZnVsKQorICAgICAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlU3BhY2VV
c2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgbV9w
ZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnJlbW92ZShpdGVyYXRvcik7CisgICAgfQorfQorCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogewog
ICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJy
ZW50T3Blbk9wZXJhdGlvbiAoJXApIiwgdGhpcyk7CkBAIC0yNDcsNyArMjY0LDkgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNh
c2UgU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkdyYW50OgotICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBjYWxsYmFja0lEID0gdGhpcy0+Z2VuZXJhdGVVbmlxdWVD
YWxsYmFja0lkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRTcGFjZUluY3Jl
YXNlVGFzayhjYWxsYmFja0lELCBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0KTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwgbV9pZGVudGlmaWVy
LCBjYWxsYmFja0lEKSk7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CkBAIC0zNjAsMTQgKzM3OSwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxl
dGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaQogCiAg
ICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVC
YWNraW5nU3RvcmUoKTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9y
ZS0+ZGF0YWJhc2VTaXplKCk7CiAKICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwog
ICAgICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0g
ZmFsc2U7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBmYWxzZTsKICAgICB9
IGVsc2UgewogICAgICAgICBhdXRvIGJhY2tpbmdTdG9yZSA9IG1fc2VydmVyLT5jcmVhdGVCYWNr
aW5nU3RvcmUoaWRlbnRpZmllcik7Ci0gICAgICAgIG1fY3VycmVudERhdGFiYXNlU2l6ZSA9IGJh
Y2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAKICAgICAgICAgSURCRGF0YWJhc2VJbmZvIGRh
dGFiYXNlSW5mbzsKICAgICAgICAgYXV0byBlcnJvciA9IGJhY2tpbmdTdG9yZS0+Z2V0T3JFc3Rh
Ymxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKQEAgLTM3Niw3ICszOTMsNiBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaQogCiAgICAgICAgIGRlbGV0ZWRWZXJzaW9uID0gZGF0YWJhc2VJ
bmZvLnZlcnNpb24oKTsKICAgICAgICAgYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUo
KTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBiYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6
ZSgpOwogICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlLCBk
ZWxldGVkVmVyc2lvbikpOwpAQCAtNDEyLDEwICs0MjgsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpzaHV0ZG93bkZvckNsb3NlKCkKIAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1
ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlIik7CiAKLSAgICBpZiAobV9iYWNraW5nU3Rv
cmUpIHsKKyAgICBpZiAobV9iYWNraW5nU3RvcmUpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5j
bG9zZSgpOwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRh
YmFzZVNpemUoKTsKLSAgICB9CiAKICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAg
bV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwpA
QCAtNDM0LDggKzQ0OCw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFNodXRkb3duRm9y
Q2xvc2UoKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlUmVwbHlRdWV1ZS5pc0VtcHR5KCkpOwog
ICAgIG1fZGF0YWJhc2VSZXBseVF1ZXVlLmtpbGwoKTsKLQotICAgIHVwZGF0ZVNwYWNlVXNlZElm
TmVlZGVkKCk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdT
dG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKQEAgLTQ2Nyw4ICs0NzksNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZl
cnNpb24pCiAgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwogICAgIH0K
IAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7Ci0KICAgICBtX2RlbGV0ZUJhY2tpbmdT
dG9yZUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVs
ZXRlKQpAQCAtNTQ5LDE0ICs1NTksMTQgQEAgYm9vbCBVbmlxdWVJREJEYXRhYmFzZTo6YWxsQ29u
bmVjdGlvbnNBcmVDbG9zZWRPckNsb3NpbmcoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQordWlu
dDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVy
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHN0YXRpYyB1aW50NjRfdCBj
dXJyZW50SUQgPSAwOwogICAgIHJldHVybiArK2N1cnJlbnRJRDsKIH0KIAotdWludDY0X3QgVW5p
cXVlSURCRGF0YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYg
Y2FsbGJhY2ssIHVpbnQ2NF90IHRhc2tTaXplKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6
OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAg
ICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKICAgICAgICAgY2FsbGJhY2soSURC
RXJyb3I6OnVzZXJEZWxldGVFcnJvcigpKTsKQEAgLTU2NywxNiArNTc3LDExIEBAIHVpbnQ2NF90
IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFj
ayYmIGNhbGxiYWNrLCB1CiAgICAgQVNTRVJUKCFtX2Vycm9yQ2FsbGJhY2tzLmNvbnRhaW5zKGlk
ZW50aWZpZXIpKTsKICAgICBtX2Vycm9yQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7CiAKLSAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUp
OwotICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwg
dGFza1NpemUpOwotICAgIH0KLQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmll
cik7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFi
YXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2FsbGJhY2ss
IHVpbnQ2NF90IHRhc2tTaXplKQordWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2Fs
bGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAo
bV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6
dXNlckRlbGV0ZUVycm9yKCksIHsgfSk7CkBAIC01ODcsMTEgKzU5Miw2IEBAIHVpbnQ2NF90IFVu
aXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNr
JiYgY2FsbGJhY2ssCiAgICAgQVNTRVJUKCFtX2tleURhdGFDYWxsYmFja3MuY29udGFpbnMoaWRl
bnRpZmllcikpOwogICAgIG1fa2V5RGF0YUNhbGxiYWNrcy5hZGQoaWRlbnRpZmllciwgV1RGTW92
ZShjYWxsYmFjaykpOwogCi0gICAgaWYgKHRhc2tTaXplKSB7Ci0gICAgICAgIG1fc2VydmVyLT5p
bmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXpl
KTsKLSAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuYWRkKGlkZW50aWZpZXIs
IHRhc2tTaXplKTsKLSAgICB9Ci0KICAgICBtX2NhbGxiYWNrUXVldWUuYXBwZW5kKGlkZW50aWZp
ZXIpOwogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQpAQCAtNzkyLDcgKzc5Miw3IEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmFkZE9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oUmVmPFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvCiAgICAgbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9ucy5hZGQoYWRv
cHRSZWYoY29ubmVjdGlvbi5sZWFrUmVmKCkpKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6b3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZp
ZXIpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpCiB7
CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikg
VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwpAQCAtODAy
LDE3ICs4MDIsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKICAgICBtX2JhY2tpbmdTdG9y
ZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBv
cnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCk7CiAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVt
ZXJhbCA9IG1fYmFja2luZ1N0b3JlLT5pc0VwaGVtZXJhbCgpOwogCi0gICAgLy8gUXVvdGFVc2Vy
IHNob3VsZCBoYXZlIGluaXRpbGlhemVkIHN0b3JhZ2UgdXNhZ2UsIHdoaWNoIGNvbnRhaW5zIHRo
ZQotICAgIC8vIHNpemUgb2YgdGhpcyBkYXRhYmFzZS4KLSAgICBtX2N1cnJlbnREYXRhYmFzZVNp
emUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0KICAgICBJREJEYXRhYmFzZUlu
Zm8gZGF0YWJhc2VJbmZvOwogICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JF
c3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKIAotICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvcikpOworICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgIHRhc2tJZGVu
dGlmaWVyKSk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3Rv
cmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJREJFcnJvciYgZXJyb3IpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSW5mbyYgaW5mbywgY29uc3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCB0YXNrSWRlbnRp
ZmllcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIs
ICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUiKTsKQEAgLTgy
Myw3ICs4MTksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgSQogICAgIEFTU0VSVChtX2lzT3Bl
bmluZ0JhY2tpbmdTdG9yZSk7CiAgICAgbV9pc09wZW5pbmdCYWNraW5nU3RvcmUgPSBmYWxzZTsK
IAotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKCk7CisgICAgZmluaXNoU3BhY2VJbmNyZWFz
ZVRhc2sodGFza0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKIAogICAgIGlmIChtX2hhcmRD
bG9zZWRGb3JVc2VyRGVsZXRlKQogICAgICAgICByZXR1cm47CkBAIC04NDgsMTAgKzg0NCwxMSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlSW5m
byYgaW5mbywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6
ZSk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihX
VEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47
CiAKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8pKTsKIH0KIApAQCAtODcyLDYgKzg2OSw3IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3Jl
YXRlT2JqZWN0U3RvcmUiKTsKIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAg
ICAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAKQEAg
LTk0Nyw3ICs5NDUsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9y
ZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNr
U2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBj
YWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsK
ICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTU3LDYgKzk1NSw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNo
ZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAg
ICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmlu
Zm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQog
CkBAIC05NzcsNiArOTc2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJl
bmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCisgICAgZmluaXNoU3BhY2VJ
bmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7CiAgICAgaWYg
KGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1lT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIApAQCAtMTA0Miw5ICsxMDQyLDEx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNy
ZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBF
cnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1
aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKKworICAgIHN0
YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSwgaW5mbykpOwogfQogCkBAIC0xMDcxLDYgKzEwNzMsOCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4Iik7CiAK
KyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlz
TnVsbCgpKTsKKwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9k
YXRhYmFzZUluZm8pOwogICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNl
SW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSk7CkBAIC0xMTU5LDcgKzExNjMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5h
bWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdQogCiB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRf
dCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdWlu
dDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxi
YWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xMTc1LDYgKzExNzksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVl
SURCRAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgc3RhcnRTcGFjZUluY3JlYXNlVGFz
ayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4
LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkpOwogfQogCkBAIC0xMTk1LDYg
KzEyMDAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgo
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
IHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmluZm9G
b3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgICAgIEFT
U0VSVChvYmplY3RTdG9yZUluZm8pOwpAQCAtMTIyNSw5ICsxMjMxLDExIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBjb25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkQWZ0ZXJRdW90
YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNh
bGxiYWNrIGNhbGxiYWNrKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxi
YWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKKworICAgIHN0YXJ0U3Bh
Y2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVy
KCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwg
b3ZlcndyaXRlTW9kZSkpOwogfQogCkBAIC0xMzE1LDYgKzEzMjMsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJRAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKKyAg
ICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVs
bCgpKTsKICAgICBwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIHJlc3VsdEtleSk7CiB9CiAKQEAgLTIxMDksOSArMjExOCw2IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2soQ3Jvc3NUaHJlYWRUYXNrJiYgdGFzaykKIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFza1JlcGx5KENyb3NzVGhyZWFkVGFz
ayYmIHRhc2spCiB7Ci0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX25ld0RhdGFi
YXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKLQogICAgIG1fZGF0YWJh
c2VSZXBseVF1ZXVlLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKICAgICBtX3NlcnZlci0+cG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpleGVjdXRlTmV4dERhdGFiYXNlVGFza1JlcGx5KSk7CiB9CkBAIC0yMTc2LDggKzIx
ODIsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxl
dGUoKQogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIG1fcGVuZGluZ1NwYWNl
SW5jcmVhc2luZ1Rhc2tzLmNsZWFyKCk7Ci0gICAgbV9zZXJ2ZXItPnJlc2V0U3BhY2VVc2VkKG1f
aWRlbnRpZmllci5vcmlnaW4oKSk7CisgICAgZm9yIChhdXRvIHNpemUgOiBtX3BlbmRpbmdTcGFj
ZUluY3JlYXNlVGFza3MudmFsdWVzKCkpCisgICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVBvdGVu
dGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHNpemUpOworICAgIG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2VUYXNrcy5jbGVhcigpOwogCiAgICAgLy8gRXJyb3Igb3V0IGFsbCB0cmFu
c2FjdGlvbnMKICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9pblBy
b2dyZXNzVHJhbnNhY3Rpb25zLmtleXMoKSkpCkBAIC0yMjUzLDMzICsyMjYwLDggQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSkpOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChPcHRpb25hbDx1aW50
NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIGlmIChvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllcikgewotICAgICAg
ICB1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIgPSBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmll
ci52YWx1ZSgpOwotICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFz
aW5nVGFza3MuZmluZChjYWxsYmFja0lkZW50aWZpZXIpOwotICAgICAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuZW5kKCkpIHsKLSAgICAgICAgICAgIG1f
c2VydmVyLT5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCks
IGl0ZXJhdG9yLT52YWx1ZSk7Ci0gICAgICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdU
YXNrcy5yZW1vdmUoaXRlcmF0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdWludDY0X3Qg
ZGF0YWJhc2VTaXplID0gbV9uZXdEYXRhYmFzZVNpemU7Ci0gICAgaWYgKGRhdGFiYXNlU2l6ZSAh
PSBtX2N1cnJlbnREYXRhYmFzZVNpemUpIHsKLSAgICAgICAgaWYgKGRhdGFiYXNlU2l6ZSA+IG1f
Y3VycmVudERhdGFiYXNlU2l6ZSkKLSAgICAgICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVNwYWNl
VXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGRhdGFiYXNlU2l6ZSAtIG1fY3VycmVudERhdGFi
YXNlU2l6ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVNw
YWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIG1fY3VycmVudERhdGFiYXNlU2l6ZSAtIGRh
dGFiYXNlU2l6ZSk7Ci0gICAgICAgIG1fY3VycmVudERhdGFiYXNlU2l6ZSA9IGRhdGFiYXNlU2l6
ZTsKLSAgICB9Ci19Ci0KIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxi
YWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQog
ewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAg
ICBhdXRvIGNhbGxiYWNrID0gbV9lcnJvckNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmll
cik7CiAgICAgQVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwog
ICAgIGlmIChjYWxsYmFjaykgewpAQCAtMjI5MSw4ICsyMjczLDYgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdAogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNr
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25z
dCBJREJLZXlEYXRhJiByZXN1bHRLZXkpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQo
Y2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxs
YmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBt
X2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKICAgICBpZiAoY2FsbGJhY2spIHsKQEAgLTIzMzcs
OCArMjMxNyw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNr
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7
Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAg
IEFTU0VSVChtX2Vycm9yQ2FsbGJhY2tzLmNvbnRhaW5zKGNhbGxiYWNrSWRlbnRpZmllcikpOwog
ICAgIEFTU0VSVChtX2NhbGxiYWNrUXVldWUubGFzdCgpID09IGNhbGxiYWNrSWRlbnRpZmllcik7
CiAgICAgbV9jYWxsYmFja1F1ZXVlLnJlbW92ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgK
aW5kZXggNTNiMjFkZmU0ZDIxZGE1NWZmY2E2ZjA2ZmIwNmIyMjc1YzFlY2Y4ZC4uNTk0NDNjMWY4
NjM1MDc0MzVhZWE0MzMyYmQ2ZjYwZWYwMzA0YzUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgK
QEAgLTExNiw4ICsxMTYsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZTsgfQogCi0g
ICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3Q7Ci0KICAgICB2b2lkIGZpbmlzaEFjdGl2ZVRy
YW5zYWN0aW9ucygpOwogCiBwcml2YXRlOgpAQCAtMTYwLDcgKzE1OCw3IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBEYXRhYmFzZSB0aHJlYWQgb3BlcmF0aW9ucwogICAgIHZvaWQgZGVsZXRlQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwotICAgIHZvaWQgb3BlbkJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKKyAgICB2b2lkIG9wZW5CYWNr
aW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50
aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwogICAgIHZvaWQgcGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllcik7CiAgICAgdm9pZCBiZWdpblRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUoY29u
c3QgSURCVHJhbnNhY3Rpb25JbmZvJik7CkBAIC0xODgsNyArMTg2LDcgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIE1haW4gdGhyZWFkIGNhbGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRlQmFja2luZ1N0
b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3Rv
cmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRp
ZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3Im
LCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRlT2Jq
ZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwogICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9iamVj
dFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CkBA
IC0yMTEsOCArMjA5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFBlcmZvcm1VbmNvbmRpdGlv
bmFsRGVsZXRlQmFja2luZ1N0b3JlKCk7CiAgICAgdm9pZCBkaWRTaHV0ZG93bkZvckNsb3NlKCk7
CiAKLSAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYm
LCB1aW50NjRfdCB0YXNrU2l6ZSA9IDApOwotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZp
cmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiwgdWludDY0X3QgdGFza1NpemUgPSAwKTsKKyAgICB1
aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmKTsKKyAgICB1
aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYpOwogICAg
IHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihHZXRBbGxSZXN1bHRzQ2FsbGJhY2sm
Jik7CiAgICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEdldFJlc3VsdENhbGxi
YWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihDb3VudENhbGxi
YWNrJiYpOwpAQCAtMjQ5LDcgKzI0NywxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXF1ZXN0
U3BhY2UoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBj
b25zdCBjaGFyKiBlcnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8
SURCRXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9u
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9w
dGlvbmFsPElEQkVycm9yPiYmKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVTcGFjZVVzZWRJZk5lZWRl
ZChPcHRpb25hbDx1aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIgPSBXVEY6Om51
bGxvcHQpOworICAgIHZvaWQgc3RhcnRTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlm
aWVyLCB1aW50NjRfdCB0YXNrU2l6ZSk7CisgICAgdm9pZCBmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpOworCisgICAgc3Rh
dGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CiAKICAgICBS
ZWY8SURCU2VydmVyPiBtX3NlcnZlcjsKICAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9pZGVu
dGlmaWVyOwpAQCAtMzAyLDkgKzMwMyw3IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PElEQlJl
c291cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRjaGVzOwogCi0gICAgSGFzaE1hcDx1aW50
NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzOwotICAgIHVpbnQ2
NF90IG1fY3VycmVudERhdGFiYXNlU2l6ZSB7IDAgfTsKLSAgICB1aW50NjRfdCBtX25ld0RhdGFi
YXNlU2l6ZSB7IDAgfTsKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5n
U3BhY2VJbmNyZWFzZVRhc2tzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCA3Njdh
ZDJlYWY0YWNjYjgzMTkwNDQyMjg5NzA2OTQ5YjcwYjM0MzBlLi5hNWJiZjI4NzgxY2Q2NjIzNWU2
MmVlOTBhNTFjMzFmNjI2ZDdjNGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTg0LDggKzg0LDE0IEBAIHZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAg
ICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2UoKTsK
LSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyh7IH0sIFNob3VsZERlcXVldWVGaXJzdFBl
bmRpbmdSZXF1ZXN0OjpObyk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSBxdW90YSBpcyBzZXQgYmVm
b3JlIGhhbmRsaW5nIGZpcnN0IHJlcXVlc3QuCisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRl
OjpVbmluaXRpYWxpemVkKSB7CisgICAgICAgICAgICBpZiAoIW1fcXVvdGEpCisgICAgICAgICAg
ICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOworICAgICAgICAgICAgbV9zdGF0
ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7CisgICAgICAgIH0KKworICAgICAg
ICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTExOSw3ICsx
MjUsNyBAQCB2b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3Rh
VXNlciYgdXNlcikKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmICht
X3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0
aGlzLT5wcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGlu
Z1JlcXVlc3Q6Ok5vKTsKKyAgICAgICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVuZGluZ1JlcXVl
c3RzKHsgfSk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTE0NSwzMiArMTUxLDQzIEBAIHZv
aWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVh
c2UsIFJlcXVlc3RDYWxsYmFjayYmCiAKICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNw
YWNlSW5jcmVhc2UpKSB7CiAgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNl
SW5jcmVhc2UsIFdURk1vdmUoY2FsbGJhY2spIH0pOworCisgICAgICAgIC8vIFRyeSBwcm9jZXNz
aW5nIHJlcXVlc3QgYWdhaW4gYWZ0ZXIgbWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJhdGUuCisg
ICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2VkOworICAgICAgICBmb3Ig
KGF1dG8mIHVzZXIgOiBjb3B5VG9WZWN0b3IobV91c2VycykpCisgICAgICAgICAgICB1c2VyLT5j
b21wdXRlU3BhY2VVc2VkKCk7CisKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0YXRl
ID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKICAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNw
YWNlSW5jcmVhc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgbV9zdGF0ZSA9IFN0
YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7CiAgICAgY2FsbGJhY2soRGVjaXNpb246Okdy
YW50KTsKIH0KIAogdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWlu
dDY0X3Qgc3BhY2VJbmNyZWFzZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNl
KHNwYWNlSW5jcmVhc2UpKTsKLSAgICBBU1NFUlQoIW1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFz
ZVJlc3BvbnNlKTsKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNw
YWNlKTsKIAogICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFn
ZXI6OmFza0Zvck1vcmVTcGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2UpOwotICAg
IG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlID0gdHJ1ZTsKKyAgICBtX3N0YXRl
ID0gU3RhdGU6OldhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2U7CiAgICAgbV9zcGFjZUlu
Y3JlYXNlUmVxdWVzdGVyKG1fcXVvdGEsIHNwYWNlVXNhZ2UoKSwgc3BhY2VJbmNyZWFzZSwgW3Ro
aXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShPcHRpb25hbDx1aW50NjRfdD4gbmV3
UXVvdGEpIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjph
c2tGb3JNb3JlU3BhY2UgcmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90
YSA/ICpuZXdRdW90YSA6IDApOwogCi0gICAgICAgIG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFz
ZVJlc3BvbnNlID0gZmFsc2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVv
dGEsIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpZZXMpOworICAgICAgICBtX3N0
YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdS
ZXF1ZXN0cyhuZXdRdW90YSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdl
cjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNo
b3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdS
ZXF1ZXN0KQordm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3Rz
KE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkKIHsKICAgICBpZiAobV9wZW5kaW5nUmVxdWVz
dHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xNzgsMTggKzE5NSwxOSBAQCB2b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWlu
dDY0X3Q+IG5ld1F1b3RhLCBTaAogICAgIGlmIChuZXdRdW90YSkKICAgICAgICAgbV9xdW90YSA9
ICpuZXdRdW90YTsKIAotICAgIGlmIChtX2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25z
ZSkKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNw
b25zZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlv
blVzZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNob3VsZERlcXVl
dWVGaXJzdFBlbmRpbmdSZXF1ZXN0ID09IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0
OjpZZXMpIHsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKSB7
CiAgICAgICAgIGF1dG8gcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOwog
ICAgICAgICBib29sIHNob3VsZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3BhY2Uo
cmVxdWVzdC5zcGFjZUluY3JlYXNlKTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAi
JXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJl
cXVlc3QgZGVjaXNpb24gaXMgJWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwogCisgICAg
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwogICAgICAgICBy
ZXF1ZXN0LmNhbGxiYWNrKHNob3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpHcmFudCA6IERl
Y2lzaW9uOjpEZW55KTsKICAgICB9CiAKQEAgLTE5NywxMyArMjE1LDI0IEBAIHZvaWQgU3RvcmFn
ZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4g
bmV3UXVvdGEsIFNoCiAgICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5m
aXJzdCgpOwogCiAgICAgICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFj
ZUluY3JlYXNlKSkgeworICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok1ha2luZ0Rl
Y2lzaW9uRm9yUmVxdWVzdCkgeworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29t
cHV0aW5nU3BhY2VVc2VkOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlU
b1ZlY3RvcihtX3VzZXJzKSkKKyAgICAgICAgICAgICAgICAgICAgdXNlci0+Y29tcHV0ZVNwYWNl
VXNlZCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVz
ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKICAg
ICAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UgPSAwOwotICAgICAgICAgICAgZm9yIChh
dXRvJiByZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCi0gICAgICAgICAgICAgICAgc3BhY2VJ
bmNyZWFzZSArPSByZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IHBlbmRpbmdSZXF1ZXN0IDogbV9wZW5kaW5nUmVxdWVzdHMpCisgICAgICAgICAgICAgICAgc3Bh
Y2VJbmNyZWFzZSArPSBwZW5kaW5nUmVxdWVzdC5zcGFjZUluY3JlYXNlOwogICAgICAgICAgICAg
YXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVl
c3Q7CiAgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxiYWNrKERlY2lz
aW9uOjpHcmFudCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaAppbmRleCA5ZjY0NjMzZWQ2NmNjMTJhOTI4M2MwODkxYmQyNTVhZTkzMDQy
YWI3Li41Y2UzYTIyOTI0MWM3YmFjZjRmYjM2OGMzZTk4ZjEzMjI3OTVlODhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtNzAsMjMgKzcwLDMw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpOwogICAgIHZv
aWQgYXNrVXNlclRvSW5pdGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJik7CiAKLSAgICBlbnVtIGNs
YXNzIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHsgTm8sIFllcyB9OwotICAgIHZv
aWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4sIFNob3VsZERlcXVl
dWVGaXJzdFBlbmRpbmdSZXF1ZXN0KTsKKyAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMo
T3B0aW9uYWw8dWludDY0X3Q+KTsKIAogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CiAKLSAg
ICBib29sIG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlIHsgZmFsc2UgfTsKICAg
ICBTcGFjZUluY3JlYXNlUmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKIAogICAg
IGVudW0gY2xhc3MgV2hlbkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9OwogICAgIEhhc2hN
YXA8U3RvcmFnZVF1b3RhVXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4gbV9wZW5kaW5nSW5p
dGlhbGl6YXRpb25Vc2VyczsKLSAgICBIYXNoU2V0PGNvbnN0IFN0b3JhZ2VRdW90YVVzZXIqPiBt
X3VzZXJzOworICAgIEhhc2hTZXQ8U3RvcmFnZVF1b3RhVXNlcio+IG1fdXNlcnM7CiAKICAgICBz
dHJ1Y3QgUGVuZGluZ1JlcXVlc3QgewogICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlOwog
ICAgICAgICBSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgfTsKICAgICBEZXF1ZTxQZW5k
aW5nUmVxdWVzdD4gbV9wZW5kaW5nUmVxdWVzdHM7CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIHsK
KyAgICAgICAgVW5pbml0aWFsaXplZCwKKyAgICAgICAgQ29tcHV0aW5nU3BhY2VVc2VkLAorICAg
ICAgICBXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlLAorICAgICAgICBBc2tpbmdGb3JN
b3JlU3BhY2UsCisgICAgICAgIE1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCwKKyAgICB9OworICAg
IFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6VW5pbml0aWFsaXplZCB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFVc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaApp
bmRleCBiNDIzMGM1ZTEyZDA5NGQ2OTllMWUyOTk3OTE2NGFmNWI3YzgzOGUwLi5iNzEwY2VlYzYw
YzVkZTUwYzYwOWQyMzFiMGYwZGY5Njc0OTQ5NDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YVVzZXIuaApAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U3RvcmFnZVF1b3RhVXNlcigpID0gZGVmYXVsdDsKIAogICAgIHZpcnR1YWwgdWludDY0X3Qg
c3BhY2VVc2VkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2Vk
KCkgeyB9OwogICAgIHZpcnR1YWwgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380385</attachid>
            <date>2019-10-07 19:36:46 -0700</date>
            <delta_ts>2019-10-09 14:50:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201957-20191007193646.patch</filename>
            <type>text/plain</type>
            <size>33602</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwODExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmViYmUwNTExN2Y5ZDlm
N2E5YmUzMGU0YmI1MTU2Yjg4OWI3MGYyZi4uNDg1NjZhMGJkYjg1ZjJmNjVmOGFiY2EwNDhmNGU4
ZDMzYzE3Nzk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE5LTEwLTA3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogdXBkYXRl
IHNpemUgdG8gYWN0dWFsIGRpc2sgdXNhZ2Ugb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBp
cyBiaWdnZXIgdGhhbiBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisKKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQpOiBtX2VzdGltYXRlZFNwYWNlSW5jcmVh
c2Ugd2lsbCBiZSB1cGRhdGVkIHdoZW4gdGFzaworICAgICAgICBpcyBmaW5pc2hlZCwgc28gbm8g
bmVlZCB0byBjbGVhciBpdCB3aGVuIGRvaW5nIHJlc2V0LgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6Y29tcHV0ZVNwYWNlVXNlZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDogaW5zdGVhZCBvZiBy
ZWFkaW5nIGZpbGUgc2l6ZSBhZnRlciBlYWNoIHRhc2ssIGp1c3QgYWRkIHRoZSAKKyAgICAgICAg
dGFzayBzaXplIHRvIGtub3duIHVzYWdlIGFuZCBnZXQgYW4gZXN0aW1hdGVkIHVzYWdlLgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3RhcnRTcGFjZUlu
Y3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVD
YWxsYmFja0lkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpj
cmVhdGVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2Jq
ZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJR
dW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVD
bG9zZUZvclVzZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUVycm9yQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6Z2VuZXJhdGVVbmlxdWVDYWxs
YmFja0lkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorCisg
ICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcDogdXNlIG1fc3RhdGUgdG8g
ZGVjaWRlIHdoYXQgYWN0aW9uIHRvIHRha2Ugb24gbmV4dCByZXF1ZXN0LiBQcmV2aW91c2x5IHdo
ZW4gYSAKKyAgICAgICAgcmVxdWVzdCBhc2tlZCBmb3Igc2l6ZSBiaWdnZXIgdGhhbiBzcGFjZSBh
dmFpbGFibGUsIHdlIHdvdWxkIGdvIHRvIGFzayBmb3IgbW9yZSBzcGFjZSBkaXJlY3RseS4gTm93
IGJlY2F1c2UgSURCCisgICAgICAgIGNhbiBiZSByZXBvcnRpbmcgZXN0aW1hdGVkIHVzYWdlLCB3
ZSBmaXJzdCBhc2sgSURCIHRvIGNvbXB1dGUgaXRzIGFjdHVhbCBkaXNrIHVzYWdlIGFuZCBhc2sg
Zm9yIG1vcmUgc3BhY2UgaWYgCisgICAgICAgIGFjdHVhbCBzcGFjZSBhdmFpbGFibGUgaXMgc21h
bGxlciB0aGFuIHJlcXVlc3RlZCBzaXplLgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6YXNrVXNlclRvSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZW1vdmVVc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlUXVvdGFNYW5hZ2VyLmg6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFVc2VyOjpjb21wdXRlU3BhY2VVc2VkKToK
KwogMjAxOS0xMC0wNyAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIE9ubHkgd3JhcHBpbmcgQ3J5cHRvS2V5cyBmb3IgSURCIGR1cmluZyBzZXJpYWxpemF0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuY3BwCmluZGV4IGI1OWVkN2YyMjQ0NzA0MTQ3ZmQxOTBhMWQxN2ZhODk0ZDM5ZmNiMGMu
LjQyOGFhODAwYjUxMWQ0YTg4MDNiMWJkZGMxYzJlYWU2Y2M5MTBjZjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBA
IC03MTIsNyArNzEyLDYgQEAgSURCU2VydmVyOjpRdW90YVVzZXI6On5RdW90YVVzZXIoKQogdm9p
ZCBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQoKQogewogICAgIG1fc3BhY2VV
c2VkID0gMDsKLSAgICBtX2VzdGltYXRlZFNwYWNlSW5jcmVhc2UgPSAwOwogCiAgICAgaWYgKCFt
X21hbmFnZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTczMiw2ICs3MzEsMTEgQEAgdm9pZCBJREJT
ZXJ2ZXI6OlF1b3RhVXNlcjo6cmVzZXRTcGFjZVVzZWQoKQogICAgIG1fbWFuYWdlci0+YWRkVXNl
cigqdGhpcyk7CiB9CiAKK3ZvaWQgSURCU2VydmVyOjpRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVz
ZWQoKQoreworICAgIHJlc2V0U3BhY2VVc2VkKCk7Cit9CisKIHZvaWQgSURCU2VydmVyOjpRdW90
YVVzZXI6OmluY3JlYXNlU3BhY2VVc2VkKHVpbnQ2NF90IHNpemUpCiB7CiAgICAgaWYgKCFtX2lz
SW5pdGlhbGl6ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggMTllNjk2MmVkMTlhYmE1NDAzMmNhMDQ0NzI0ZWQxMTE1
MzU0YTVhZi4uNWFhM2RiNWExODljODNlOTJiYjRlZWVkNWRlZTBiNTNjMmQxMDEwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
aApAQCAtMTY3LDcgKzE2NywxMiBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXRpYWxpemVT
cGFjZVVzZWQodWludDY0X3Qgc3BhY2VVc2VkKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHVp
bnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9l
c3RpbWF0ZWRTcGFjZUluY3JlYXNlOyB9CisgICAgICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNv
bnN0IGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2lzSW5pdGlhbGl6ZWQp
OworICAgICAgICAgICAgcmV0dXJuIG1fc3BhY2VVc2VkICsgbV9lc3RpbWF0ZWRTcGFjZUluY3Jl
YXNlOworICAgICAgICB9CisgICAgICAgIHZvaWQgY29tcHV0ZVNwYWNlVXNlZCgpIGZpbmFsOwog
ICAgICAgICB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
IGZpbmFsOwogCiAgICAgICAgIElEQlNlcnZlciYgbV9zZXJ2ZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlLmNwcAppbmRleCBjOTM5YTAwMTgyN2Y4OTgwNWRjODJiOGM1YTM5ZjYzOGE3MzRhYWI0Li4y
ZmU5ZjJlOGZhZjg0ZjhkM2YxZjZmMjg5MjY3ODlhMWFiZWUyMDk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5jcHAKQEAgLTIxOSw2ICsyMTksMjMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGkK
ICAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIDAsICIiLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CiB9CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJbmNyZWFzZVRhc2sodWlu
dDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpCit7CisgICAgbV9zZXJ2ZXItPmlu
Y3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUp
OworICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1Np
emUpOworfQorCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayh1aW50NjRfdCBpZGVudGlmaWVyLCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpCit7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIp
OworICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkp
IHsKKyAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRp
Zmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgaWYgKGlzVGFza1N1Y2Nl
c3NmdWwpCisgICAgICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVudGlm
aWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOworICAgICAgICBtX3BlbmRpbmdTcGFjZUlu
Y3JlYXNlVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0
aW9uICglcCkiLCB0aGlzKTsKQEAgLTI0Nyw3ICsyNjQsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24oKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpEZWNpc2lvbjo6R3JhbnQ6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMtPnBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUsIG1faWRlbnRpZmllcikpOworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNhbGxiYWNrSUQgPSB0aGlzLT5nZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRp
ZmllcigpOworICAgICAgICAgICAgICAgICAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSUQsIGRlZmF1bHRXcml0ZU9wZXJhdGlvbkNvc3QpOworICAgICAgICAgICAgICAgICAgICB0
aGlzLT5wb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlLCBtX2lkZW50aWZpZXIsIGNhbGxiYWNrSUQp
KTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTM2
MCwxNCArMzc5LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICBpZiAobV9iYWNr
aW5nU3RvcmUpIHsKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgp
OwotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0b3JlLT5kYXRhYmFzZVNp
emUoKTsKIAogICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgICAgIG1fYmFj
a2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICAg
ICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGF1dG8gYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVu
dGlmaWVyKTsKLSAgICAgICAgbV9jdXJyZW50RGF0YWJhc2VTaXplID0gYmFja2luZ1N0b3JlLT5k
YXRhYmFzZVNpemUoKTsKIAogICAgICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwog
ICAgICAgICBhdXRvIGVycm9yID0gYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNl
SW5mbyhkYXRhYmFzZUluZm8pOwpAQCAtMzc2LDcgKzM5Myw2IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlk
ZW50aWZpCiAKICAgICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigp
OwogICAgICAgICBiYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBt
X25ld0RhdGFiYXNlU2l6ZSA9IGJhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7CiAgICAgfQog
CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0ZWRWZXJzaW9u
KSk7CkBAIC00MTIsMTAgKzQyOCw4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3du
Rm9yQ2xvc2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnNodXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgIGlm
IChtX2JhY2tpbmdTdG9yZSkKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKCk7Ci0gICAg
ICAgIG1fbmV3RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwot
ICAgIH0KIAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2JhY2tpbmdTdG9y
ZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CkBAIC00MzQsOCArNDQ4
LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkU2h1dGRvd25Gb3JDbG9zZSgpCiB7CiAg
ICAgQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzRW1wdHkoKSk7CiAgICAgbV9kYXRhYmFz
ZVJlcGx5UXVldWUua2lsbCgpOwotCi0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoKTsKIH0K
IAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90
IGRlbGV0ZWRWZXJzaW9uKQpAQCAtNDY3LDggKzQ3OSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKICAgICAg
ICAgbV9jdXJyZW50T3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgdXBkYXRl
U3BhY2VVc2VkSWZOZWVkZWQoKTsKLQogICAgIG1fZGVsZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVz
cyA9IGZhbHNlOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpCkBAIC01NDks
MTQgKzU1OSwxNCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjphbGxDb25uZWN0aW9uc0FyZUNs
b3NlZE9yQ2xvc2luZygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1aW50
NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRpZmllcigpCit1aW50NjRfdCBVbmlxdWVJ
REJEYXRhYmFzZTo6Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgc3RhdGljIHVpbnQ2NF90IGN1cnJlbnRJRCA9IDA7
CiAgICAgcmV0dXJuICsrY3VycmVudElEOwogfQogCi11aW50NjRfdCBVbmlxdWVJREJEYXRhYmFz
ZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaywgdWlu
dDY0X3QgdGFza1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFj
a09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKICAgICBpZiAobV9oYXJk
Q2xvc2VkRm9yVXNlckRlbGV0ZSkgewogICAgICAgICBjYWxsYmFjayhJREJFcnJvcjo6dXNlckRl
bGV0ZUVycm9yKCkpOwpAQCAtNTY3LDE2ICs1NzcsMTEgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0
YWJhc2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihFcnJvckNhbGxiYWNrJiYgY2FsbGJhY2ss
IHUKICAgICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwog
ICAgIG1fZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsK
IAotICAgIGlmICh0YXNrU2l6ZSkgewotICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRp
YWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgICAgIG1f
cGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci0g
ICAgfQotCiAgICAgbV9jYWxsYmFja1F1ZXVlLmFwcGVuZChpZGVudGlmaWVyKTsKICAgICByZXR1
cm4gaWRlbnRpZmllcjsKIH0KIAotdWludDY0X3QgVW5pcXVlSURCRGF0YWJhc2U6OnN0b3JlQ2Fs
bGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywgdWludDY0X3QgdGFz
a1NpemUpCit1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKEtleURhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlmIChtX2hhcmRDbG9zZWRG
b3JVc2VyRGVsZXRlKSB7CiAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVsZXRlRXJy
b3IoKSwgeyB9KTsKQEAgLTU4NywxMSArNTkyLDYgQEAgdWludDY0X3QgVW5pcXVlSURCRGF0YWJh
c2U6OnN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaywK
ICAgICBBU1NFUlQoIW1fa2V5RGF0YUNhbGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAg
ICAgbV9rZXlEYXRhQ2FsbGJhY2tzLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CiAKLSAgICBpZiAodGFza1NpemUpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmluY3JlYXNlUG90ZW50
aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUpOwotICAgICAgICBt
X3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5hZGQoaWRlbnRpZmllciwgdGFza1NpemUpOwot
ICAgIH0KLQogICAgIG1fY2FsbGJhY2tRdWV1ZS5hcHBlbmQoaWRlbnRpZmllcik7CiAgICAgcmV0
dXJuIGlkZW50aWZpZXI7CiB9CkBAIC03OTIsNyArNzkyLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6YWRkT3BlbkRhdGFiYXNlQ29ubmVjdGlvbihSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW8KICAgICBtX29wZW5EYXRhYmFzZUNvbm5lY3Rpb25zLmFkZChhZG9wdFJlZihjb25uZWN0
aW9uLmxlYWtSZWYoKSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3ZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlm
aWVyJiBpZGVudGlmaWVyLCB1aW50NjRfdCB0YXNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRh
YmFzZTo6b3BlbkJhY2tpbmdTdG9yZSAoJXApIiwgdGhpcyk7CkBAIC04MDIsMTcgKzgwMiwxMyBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmllcgogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11
bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVv
dXNUcmFuc2FjdGlvbnMoKTsKICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNr
aW5nU3RvcmUtPmlzRXBoZW1lcmFsKCk7CiAKLSAgICAvLyBRdW90YVVzZXIgc2hvdWxkIGhhdmUg
aW5pdGlsaWF6ZWQgc3RvcmFnZSB1c2FnZSwgd2hpY2ggY29udGFpbnMgdGhlCi0gICAgLy8gc2l6
ZSBvZiB0aGlzIGRhdGFiYXNlLgotICAgIG1fY3VycmVudERhdGFiYXNlU2l6ZSA9IG1fYmFja2lu
Z1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKLQogICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUlu
Zm87CiAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFi
YXNlSW5mbyhkYXRhYmFzZUluZm8pOwogCi0gICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2lu
Z1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yKSk7CisgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVu
QmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yLCAgdGFza0lkZW50aWZpZXIpKTsKIH0K
IAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJE
YXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3ZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZv
LCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IHRhc2tJZGVudGlmaWVyKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZSIpOwpAQCAtODIzLDcgKzgxOSw3IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBJCiAgICAgQVNTRVJUKG1faXNPcGVuaW5nQmFja2luZ1N0
b3JlKTsKICAgICBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSA9IGZhbHNlOwogCi0gICAgdXBkYXRl
U3BhY2VVc2VkSWZOZWVkZWQoKTsKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh0YXNrSWRl
bnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogCiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJE
ZWxldGUpCiAgICAgICAgIHJldHVybjsKQEAgLTg0OCwxMCArODQ0LDExIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3Jl
QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBFcnJv
ckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKIHsKLSAgICB1
aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2Fs
bGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQs
IHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxi
YWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8sICBxdW90YUVycm9y
KSk7CiB9CiAKQEAgLTg3Nyw2ICs4NzQsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLAogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlIik7CiAKKyAgICBmaW5p
c2hTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsK
ICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5hZGRFeGlz
dGluZ09iamVjdFN0b3JlKGluZm8pOwogCkBAIC05NTIsNyArOTUwLDcgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVB
ZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSURCRXJyb3Im
IHF1b3RhRXJyb3IpCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOworICAgIHVpbnQ2NF90IGNh
bGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjaykpOwog
ICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOwogCkBAIC05NjEsNiArOTU5LDcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hl
Y2sodWludDY0X3QgdGFza1NpemUsIFVuaXEKICAgICBpZiAoIWluZm8pCiAgICAgICAgIGVycm9y
ID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhpc3Rh
bnQgb2JqZWN0IHN0b3JlIl9zIH07CiAKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUs
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgbmV3TmFtZSwgZXJyb3IpKTsKIH0KIApAQCAtOTg1LDYgKzk4NCw3IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1l
T2JqZWN0U3RvcmUiKTsKIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAg
ICAgbV9kYXRhYmFzZUluZm8tPnJlbmFtZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgbmV3TmFtZSk7CiAKQEAgLTEwNTAsOSArMTA1MCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgYwogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleEFmdGVyUXVvdGFDaGVj
ayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgRXJyb3JDYWxsYmFjayBjYWxsYmFjaywg
Y29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCiB7Ci0gICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1NpemUpOwor
ICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJuOworCisg
ICAgc3RhcnRTcGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lELCB0YXNrU2l6ZSk7CiAgICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lELCB0cmFuc2FjdGlvbi5pbmZvKCku
aWRlbnRpZmllcigpLCBpbmZvLCBxdW90YUVycm9yKSk7CiB9CiAKQEAgLTEwODQsNiArMTA4Niw4
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
Q3JlYXRlSW5kZXgiKTsKIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOworCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAg
ICAgICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAgICAgICAgIGF1dG8qIG9iamVjdFN0b3Jl
SW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9i
amVjdFN0b3JlSWRlbnRpZmllcigpKTsKQEAgLTExNzIsNyArMTE3Niw3IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnJlbmFtZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCB1CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJR
dW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBp
bmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgRXJyb3JDYWxsYmFjayBjYWxs
YmFjaywgY29uc3QgSURCRXJyb3ImIHF1b3RhRXJyb3IpCiB7Ci0gICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSwgdGFza1Np
emUpOworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3Io
V1RGTW92ZShjYWxsYmFjaykpOwogICAgIGlmICghY2FsbGJhY2tJRCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMTg1LDYgKzExODksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVJ
bmRleEFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5pcXVlSURCRAogICAgIGlm
ICghaW5kZXhJbmZvKQogICAgICAgICBlcnJvciA9IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAi
QXR0ZW1wdCB0byByZW5hbWUgbm9uLWV4aXN0YW50IGluZGV4Il9zIH07CiAKKyAgICBzdGFydFNw
YWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VU
YXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCksIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBlcnJv
cikpOwogfQogCkBAIC0xMjA5LDYgKzEyMTQsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4Iik7CiAKKyAgICBmaW5pc2hT
cGFjZUluY3JlYXNlVGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAg
ICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0g
bV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRl
bnRpZmllcik7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8pOwpAQCAtMTIzOSw5ICsx
MjQ1LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zCiAKIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnB1dE9yQWRkQWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0
IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3Zl
cndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
aWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CisKKyAgICBzdGFydFNwYWNlSW5jcmVh
c2VUYXNrKGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpLCByZXF1
ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0
ZU1vZGUsIHF1b3RhRXJyb3IpKTsKIH0KIApAQCAtMTMzNCw2ICsxMzQyLDcgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSUQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCIpOwog
CisgICAgZmluaXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5p
c051bGwoKSk7CiAgICAgcGVyZm9ybUtleURhdGFDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLCByZXN1bHRLZXkpOwogfQogCkBAIC0yMTI4LDkgKzIxMzcsNiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKENyb3NzVGhyZWFkVGFzayYmIHRhc2spCiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2tSZXBseShDcm9zc1RocmVh
ZFRhc2smJiB0YXNrKQogewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9uZXdE
YXRhYmFzZVNpemUgPSBtX2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0KICAgICBtX2Rh
dGFiYXNlUmVwbHlRdWV1ZS5hcHBlbmQoV1RGTW92ZSh0YXNrKSk7CiAgICAgbV9zZXJ2ZXItPnBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZXhlY3V0ZU5leHREYXRhYmFzZVRhc2tSZXBseSkpOwogfQpAQCAtMjE5NSw4
ICsyMjAxLDkgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2Vy
RGVsZXRlKCkKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX3BlbmRpbmdT
cGFjZUluY3JlYXNpbmdUYXNrcy5jbGVhcigpOwotICAgIG1fc2VydmVyLT5yZXNldFNwYWNlVXNl
ZChtX2lkZW50aWZpZXIub3JpZ2luKCkpOworICAgIGZvciAoYXV0byBzaXplIDogbV9wZW5kaW5n
U3BhY2VJbmNyZWFzZVRhc2tzLnZhbHVlcygpKQorICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQ
b3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBzaXplKTsKKyAgICBtX3Bl
bmRpbmdTcGFjZUluY3JlYXNlVGFza3MuY2xlYXIoKTsKIAogICAgIC8vIEVycm9yIG91dCBhbGwg
dHJhbnNhY3Rpb25zCiAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1f
aW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5rZXlzKCkpKQpAQCAtMjI3MiwzMyArMjI3OSw4IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpCiAgICAg
cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUpKTsKIH0KIAot
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6dXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8
dWludDY0X3Q+IG9wdGlvbmFsQ2FsbGJhY2tJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAob3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIpIHsKLSAg
ICAgICAgdWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyID0gb3B0aW9uYWxDYWxsYmFja0lkZW50
aWZpZXIudmFsdWUoKTsKLSAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGluZ1NwYWNlSW5j
cmVhc2luZ1Rhc2tzLmZpbmQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLSAgICAgICAgaWYgKGl0ZXJh
dG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmVuZCgpKSB7Ci0gICAgICAgICAg
ICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdp
bigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgICAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFz
aW5nVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVpbnQ2
NF90IGRhdGFiYXNlU2l6ZSA9IG1fbmV3RGF0YWJhc2VTaXplOwotICAgIGlmIChkYXRhYmFzZVNp
emUgIT0gbV9jdXJyZW50RGF0YWJhc2VTaXplKSB7Ci0gICAgICAgIGlmIChkYXRhYmFzZVNpemUg
PiBtX2N1cnJlbnREYXRhYmFzZVNpemUpCi0gICAgICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VT
cGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBkYXRhYmFzZVNpemUgLSBtX2N1cnJlbnRE
YXRhYmFzZVNpemUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3NlcnZlci0+ZGVjcmVh
c2VTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBtX2N1cnJlbnREYXRhYmFzZVNpemUg
LSBkYXRhYmFzZVNpemUpOwotICAgICAgICBtX2N1cnJlbnREYXRhYmFzZVNpemUgPSBkYXRhYmFz
ZVNpemU7Ci0gICAgfQotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JD
YWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJv
cikKIHsKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChjYWxsYmFja0lkZW50aWZpZXIpOwot
CiAgICAgYXV0byBjYWxsYmFjayA9IG1fZXJyb3JDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50
aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRl
KTsKICAgICBpZiAoY2FsbGJhY2spIHsKQEAgLTIzMTAsOCArMjI5Miw2IEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUtleURhdGFDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwg
Y29uc3QgSURCS2V5RGF0YSYgcmVzdWx0S2V5KQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVl
ZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0gbV9rZXlEYXRh
Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsKICAgICBBU1NFUlQoY2FsbGJhY2sg
fHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAgICAgaWYgKGNhbGxiYWNrKSB7CkBAIC0y
MzU2LDggKzIzMzYsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ291bnRDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
KQogewotICAgIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0K
ICAgICBBU1NFUlQobV9lcnJvckNhbGxiYWNrcy5jb250YWlucyhjYWxsYmFja0lkZW50aWZpZXIp
KTsKICAgICBBU1NFUlQobV9jYWxsYmFja1F1ZXVlLmxhc3QoKSA9PSBjYWxsYmFja0lkZW50aWZp
ZXIpOwogICAgIG1fY2FsbGJhY2tRdWV1ZS5yZW1vdmVMYXN0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCmluZGV4IDE0MTgwMWRhN2ZmZTU2MTlhNzEwZGEyZmIyNjk1NGRjNmNlZDJjNGYuLmNhYzI3
MDgxMTdhYzA4NGQ0MjA4ZDc5N2FjNzk3OWZmOWJkYzIwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5oCkBAIC0xMTYsOCArMTE2LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkQ2xvc2VkRm9y
VXNlckRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGU7IH0K
IAotICAgIHVpbnQ2NF90IHNwYWNlVXNlZCgpIGNvbnN0OwotCiAgICAgdm9pZCBmaW5pc2hBY3Rp
dmVUcmFuc2FjdGlvbnMoKTsKIAogcHJpdmF0ZToKQEAgLTE2MCw3ICsxNTgsNyBAQCBwcml2YXRl
OgogCiAgICAgLy8gRGF0YWJhc2UgdGhyZWFkIG9wZXJhdGlvbnMKICAgICB2b2lkIGRlbGV0ZUJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICB2b2lkIG9wZW5C
YWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgdm9pZCBvcGVu
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IHRhc2tJ
ZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyKTsKICAgICB2b2lkIHBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQgYmVnaW5UcmFuc2FjdGlvbkluQmFja2luZ1N0b3Jl
KGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpOwpAQCAtMTg4LDcgKzE4Niw3IEBAIHByaXZhdGU6
CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFja3MKICAgICB2b2lkIGRpZERlbGV0ZUJhY2tp
bmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbik7Ci0gICAgdm9pZCBkaWRPcGVuQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVycm9yJik7CisgICAgdm9p
ZCBkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIGNvbnN0IElEQkVy
cm9yJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybUNyZWF0
ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3Im
LCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKTsKICAgICB2b2lkIGRpZFBlcmZvcm1EZWxldGVP
YmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICB2b2lkIGRpZFBlcmZvcm1SZW5h
bWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9y
JiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUp
OwpAQCAtMjExLDggKzIwOSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRQZXJmb3JtVW5jb25k
aXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgZGlkU2h1dGRvd25Gb3JDbG9z
ZSgpOwogCi0gICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJh
Y2smJiwgdWludDY0X3QgdGFza1NpemUgPSAwKTsKLSAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYsIHVpbnQ2NF90IHRhc2tTaXplID0gMCk7Cisg
ICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEVycm9yQ2FsbGJhY2smJik7Cisg
ICAgdWludDY0X3Qgc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFDYWxsYmFjayYmKTsK
ICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoR2V0QWxsUmVzdWx0c0NhbGxi
YWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihHZXRSZXN1bHRD
YWxsYmFjayYmKTsKICAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoQ291bnRD
YWxsYmFjayYmKTsKQEAgLTI0OSw3ICsyNDcsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVx
dWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCB1aW50NjRfdCB0YXNrU2l6
ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVy
cm9yJiYpPiYmKTsKICAgICB2b2lkIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElEQkVycm9y
JiYpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZVNwYWNlVXNlZElmTmVlZGVkKE9wdGlvbmFsPHVpbnQ2
NF90PiBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllciA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9p
ZCBzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRh
c2tTaXplKTsKKyAgICB2b2lkIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50
aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCk7CisKKyAgICBzdGF0aWMgdWludDY0X3QgZ2Vu
ZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKIAogICAgIFJlZjxJREJTZXJ2ZXI+IG1f
c2VydmVyOwogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CkBAIC0zMDIs
OSArMzAzLDcgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVudGlmaWVy
PiBtX2N1cnNvclByZWZldGNoZXM7CiAKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4g
bV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3M7Ci0gICAgdWludDY0X3QgbV9jdXJyZW50RGF0
YWJhc2VTaXplIHsgMCB9OwotICAgIHVpbnQ2NF90IG1fbmV3RGF0YWJhc2VTaXplIHsgMCB9Owor
ICAgIEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFz
a3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCmluZGV4IDc2N2FkMmVhZjRhY2NiODMxOTA0
NDIyODk3MDY5NDliNzBiMzQzMGUuLmE1YmJmMjg3ODFjZDY2MjM1ZTYyZWU5MGE1MWMzMWY2MjZk
N2M0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
LmNwcApAQCAtODQsOCArODQsMTQgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tVc2Vy
VG9Jbml0aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImIHVzZXIpCiAgICAgICAgIGlmICghbV9wZW5k
aW5nSW5pdGlhbGl6YXRpb25Vc2Vycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZSgpOwotICAgICAgICBwcm9jZXNz
UGVuZGluZ1JlcXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Ok5v
KTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHF1b3RhIGlzIHNldCBiZWZvcmUgaGFuZGxpbmcgZmly
c3QgcmVxdWVzdC4KKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlVuaW5pdGlhbGl6ZWQp
IHsKKyAgICAgICAgICAgIGlmICghbV9xdW90YSkKKyAgICAgICAgICAgICAgICB1cGRhdGVRdW90
YUJhc2VkT25TcGFjZVVzYWdlKCk7CisgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2lu
Z0RlY2lzaW9uRm9yUmVxdWVzdDsKKyAgICAgICAgfQorCisgICAgICAgIHByb2Nlc3NQZW5kaW5n
UmVxdWVzdHMoeyB9KTsKICAgICB9KTsKIH0KIApAQCAtMTE5LDcgKzEyNSw3IEBAIHZvaWQgU3Rv
cmFnZVF1b3RhTWFuYWdlcjo6cmVtb3ZlVXNlcihTdG9yYWdlUXVvdGFVc2VyJiB1c2VyKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgaWYgKG1fcGVuZGluZ0luaXRpYWxp
emF0aW9uVXNlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5k
aW5nUmVxdWVzdHMoeyB9LCBTaG91bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOwor
ICAgICAgICAgICAgICAgIHRoaXMtPnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9KTsKICAgICAg
ICAgfSk7CiAgICAgfQogfQpAQCAtMTQ1LDMyICsxNTEsNDMgQEAgdm9pZCBTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpyZXF1ZXN0U3BhY2UodWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgUmVxdWVzdENhbGxi
YWNrJiYKIAogICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkpIHsK
ICAgICAgICAgbV9wZW5kaW5nUmVxdWVzdHMuYXBwZW5kKHsgc3BhY2VJbmNyZWFzZSwgV1RGTW92
ZShjYWxsYmFjaykgfSk7CisKKyAgICAgICAgLy8gVHJ5IHByb2Nlc3NpbmcgcmVxdWVzdCBhZ2Fp
biBhZnRlciBtYWtpbmcgc3VyZSB1c2FnZSBpcyBhY2N1cmF0ZS4KKyAgICAgICAgbV9zdGF0ZSA9
IFN0YXRlOjpDb21wdXRpbmdTcGFjZVVzZWQ7CisgICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNv
cHlUb1ZlY3RvcihtX3VzZXJzKSkKKyAgICAgICAgICAgIHVzZXItPmNvbXB1dGVTcGFjZVVzZWQo
KTsKKworICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5n
Rm9yTW9yZVNwYWNlOwogICAgICAgICBhc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lz
aW9uRm9yUmVxdWVzdDsKICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwogfQogCiB2b2lk
IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSh1aW50NjRfdCBzcGFjZUluY3Jl
YXNlKQogewogICAgIEFTU0VSVChzaG91bGRBc2tGb3JNb3JlU3BhY2Uoc3BhY2VJbmNyZWFzZSkp
OwotICAgIEFTU0VSVCghbV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UpOworICAg
IEFTU0VSVChtX3N0YXRlID09IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2UpOwogCiAgICAgUkVM
RUFTRV9MT0coU3RvcmFnZSwgIiVwIC0gU3RvcmFnZVF1b3RhTWFuYWdlcjo6YXNrRm9yTW9yZVNw
YWNlICUiIFBSSXU2NCwgdGhpcywgc3BhY2VJbmNyZWFzZSk7Ci0gICAgbV9pc1dhaXRpbmdGb3JT
cGFjZUluY3JlYXNlUmVzcG9uc2UgPSB0cnVlOworICAgIG1fc3RhdGUgPSBTdGF0ZTo6V2FpdGlu
Z0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZTsKICAgICBtX3NwYWNlSW5jcmVhc2VSZXF1ZXN0ZXIo
bV9xdW90YSwgc3BhY2VVc2FnZSgpLCBzcGFjZUluY3JlYXNlLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyldKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSkgewogICAgICAg
ICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFJFTEVBU0Vf
TE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVTcGFjZSBy
ZWNlaXZlZCByZXNwb25zZSAlIiBQUkl1NjQsIHRoaXMsIG5ld1F1b3RhID8gKm5ld1F1b3RhIDog
MCk7CiAKLSAgICAgICAgbV9pc1dhaXRpbmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UgPSBmYWxz
ZTsKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90YSwgU2hvdWxkRGVxdWV1
ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Olllcyk7CisgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6QXNr
aW5nRm9yTW9yZVNwYWNlOworICAgICAgICBwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKG5ld1F1b3Rh
KTsKICAgICB9KTsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGlu
Z1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSwgU2hvdWxkRGVxdWV1ZUZpcnN0
UGVuZGluZ1JlcXVlc3Qgc2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3QpCit2b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0
X3Q+IG5ld1F1b3RhKQogewogICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE3OCwxOCArMTk1LDE5IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFu
YWdlcjo6cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEs
IFNoCiAgICAgaWYgKG5ld1F1b3RhKQogICAgICAgICBtX3F1b3RhID0gKm5ld1F1b3RhOwogCi0g
ICAgaWYgKG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKQorICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1Jl
cXVlc3QgPT0gU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6OlllcykgeworICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpBc2tpbmdGb3JNb3JlU3BhY2UpIHsKICAgICAgICAgYXV0byBy
ZXF1ZXN0ID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7CiAgICAgICAgIGJvb2wgc2hv
dWxkQWxsb3dSZXF1ZXN0ID0gIXNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5j
cmVhc2UpOwogCiAgICAgICAgIFJFTEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMgZmlyc3QgcmVxdWVzdCBkZWNpc2lvbiBp
cyAlZCIsIHRoaXMsIHNob3VsZEFsbG93UmVxdWVzdCk7CiAKKyAgICAgICAgbV9zdGF0ZSA9IFN0
YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7CiAgICAgICAgIHJlcXVlc3QuY2FsbGJhY2so
c2hvdWxkQWxsb3dSZXF1ZXN0ID8gRGVjaXNpb246OkdyYW50IDogRGVjaXNpb246OkRlbnkpOwog
ICAgIH0KIApAQCAtMTk3LDEzICsyMTUsMjQgQEAgdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpw
cm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdRdW90YSwgU2gKICAg
ICAgICAgYXV0byYgcmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLmZpcnN0KCk7CiAKICAgICAg
ICAgaWYgKHNob3VsZEFza0Zvck1vcmVTcGFjZShyZXF1ZXN0LnNwYWNlSW5jcmVhc2UpKSB7Cisg
ICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0
KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wdXRpbmdTcGFjZVVzZWQ7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB1c2VyIDogY29weVRvVmVjdG9yKG1fdXNlcnMp
KQorICAgICAgICAgICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2VkKCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fcGVuZGluZ0luaXRpYWxpemF0aW9uVXNlcnMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1fc3RhdGUgPSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlOwogICAgICAgICAgICAgdWludDY0
X3Qgc3BhY2VJbmNyZWFzZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlcXVlc3QgOiBt
X3BlbmRpbmdSZXF1ZXN0cykKLSAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHJlcXVl
c3Quc3BhY2VJbmNyZWFzZTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGVuZGluZ1JlcXVlc3Qg
OiBtX3BlbmRpbmdSZXF1ZXN0cykKKyAgICAgICAgICAgICAgICBzcGFjZUluY3JlYXNlICs9IHBl
bmRpbmdSZXF1ZXN0LnNwYWNlSW5jcmVhc2U7CiAgICAgICAgICAgICBhc2tGb3JNb3JlU3BhY2Uo
c3BhY2VJbmNyZWFzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdDsKICAgICAgICAgbV9w
ZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCkuY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCmlu
ZGV4IDlmNjQ2MzNlZDY2Y2MxMmE5MjgzYzA4OTFiZDI1NWFlOTMwNDJhYjcuLjVjZTNhMjI5MjQx
YzdiYWNmNGZiMzY4YzNlOThmMTMyMjc5NWU4OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC03MCwyMyArNzAsMzAgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGluaXRpYWxpemVVc2Vyc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBhc2tVc2VyVG9Jbml0
aWFsaXplKFN0b3JhZ2VRdW90YVVzZXImKTsKIAotICAgIGVudW0gY2xhc3MgU2hvdWxkRGVxdWV1
ZUZpcnN0UGVuZGluZ1JlcXVlc3QgeyBObywgWWVzIH07Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGlu
Z1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2NF90PiwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1Jl
cXVlc3QpOworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRf
dD4pOwogCiAgICAgdWludDY0X3QgbV9xdW90YSB7IDAgfTsKIAotICAgIGJvb2wgbV9pc1dhaXRp
bmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2UgeyBmYWxzZSB9OwogICAgIFNwYWNlSW5jcmVhc2VS
ZXF1ZXN0ZXIgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVyOwogCiAgICAgZW51bSBjbGFzcyBXaGVu
SW5pdGlhbGl6ZWRDYWxsZWQgeyBObywgWWVzIH07CiAgICAgSGFzaE1hcDxTdG9yYWdlUXVvdGFV
c2VyKiwgV2hlbkluaXRpYWxpemVkQ2FsbGVkPiBtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJz
OwotICAgIEhhc2hTZXQ8Y29uc3QgU3RvcmFnZVF1b3RhVXNlcio+IG1fdXNlcnM7CisgICAgSGFz
aFNldDxTdG9yYWdlUXVvdGFVc2VyKj4gbV91c2VyczsKIAogICAgIHN0cnVjdCBQZW5kaW5nUmVx
dWVzdCB7CiAgICAgICAgIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2U7CiAgICAgICAgIFJlcXVlc3RD
YWxsYmFjayBjYWxsYmFjazsKICAgICB9OwogICAgIERlcXVlPFBlbmRpbmdSZXF1ZXN0PiBtX3Bl
bmRpbmdSZXF1ZXN0czsKKworICAgIGVudW0gY2xhc3MgU3RhdGUgeworICAgICAgICBVbmluaXRp
YWxpemVkLAorICAgICAgICBDb21wdXRpbmdTcGFjZVVzZWQsCisgICAgICAgIFdhaXRpbmdGb3JT
cGFjZUluY3JlYXNlUmVzcG9uc2UsCisgICAgICAgIEFza2luZ0Zvck1vcmVTcGFjZSwKKyAgICAg
ICAgTWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0LAorICAgIH07CisgICAgU3RhdGUgbV9zdGF0ZSB7
IFN0YXRlOjpVbmluaXRpYWxpemVkIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNlci5oCmluZGV4IGI0MjMwYzVlMTJk
MDk0ZDY5OWUxZTI5OTc5MTY0YWY1YjdjODM4ZTAuLmI3MTBjZWVjNjBjNWRlNTBjNjA5ZDIzMWIw
ZjBkZjk2NzQ5NDk0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZVF1b3RhVXNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhVXNl
ci5oCkBAIC0zNCw2ICszNCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdG9yYWdlUXVvdGFV
c2VyKCkgPSBkZWZhdWx0OwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSB7IH07CiAgICAgdmly
dHVhbCB2b2lkIHdoZW5Jbml0aWFsaXplZChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spIHsgY2FsbGJhY2soKTsgfQogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380569</attachid>
            <date>2019-10-09 14:50:54 -0700</date>
            <delta_ts>2019-10-09 17:56:42 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-201957-20191009145053.patch</filename>
            <type>text/plain</type>
            <size>33717</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWExY2EzZWQyODk0YTNm
NDdiNTNmODA5NjdhMDE1MDM4YzFlMmE1Ny4uZjNiMmQ1ZTQ2NDE2Y2UwOTc0MmZiOTgzMmQwZGU1
MDhjMmRkZWY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE5LTEwLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogdXBkYXRl
IHNpemUgdG8gYWN0dWFsIGRpc2sgdXNhZ2Ugb25seSB3aGVuIGVzdGltYXRlZCBpbmNyZWFzZSBp
cyBiaWdnZXIgdGhhbiBzcGFjZSBhdmFpbGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk1NworCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVu
biBGYWJsZXQuCisKKyAgICAgICAgRm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6UXVvdGFVc2VyOjpyZXNldFNwYWNlVXNlZCk6IG1fZXN0aW1hdGVkU3BhY2VJbmNyZWFz
ZSB3aWxsIGJlIHVwZGF0ZWQgd2hlbiB0YXNrCisgICAgICAgIGlzIGZpbmlzaGVkLCBzbyBubyBu
ZWVkIHRvIGNsZWFyIGl0IHdoZW4gZG9pbmcgcmVzZXQuCisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3BhY2VVc2VkKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOiBpbnN0ZWFkIG9mIHJl
YWRpbmcgZmlsZSBzaXplIGFmdGVyIGVhY2ggdGFzaywganVzdCBhZGQgdGhlIAorICAgICAgICB0
YXNrIHNpemUgdG8ga25vd24gdXNhZ2UgYW5kIGdldCBhbiBlc3RpbWF0ZWQgdXNhZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5j
cmVhc2VUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OmZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVCYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
c2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRTaHV0ZG93bkZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZW5lcmF0ZVVuaXF1ZUNh
bGxiYWNrSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNy
ZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmpl
Y3RTdG9yZUFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhBZnRlclF1
b3RhQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
dXRPckFkZEFmdGVyUXVvdGFDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cG9zdERhdGFiYXNlVGFza1JlcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNs
b3NlRm9yVXNlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpnZW5lcmF0ZVVuaXF1ZUNhbGxi
YWNrSWRlbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjp1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKKyAg
ICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwOiB1c2UgbV9zdGF0ZSB0byBk
ZWNpZGUgd2hhdCBhY3Rpb24gdG8gdGFrZSBvbiBuZXh0IHJlcXVlc3QuIFByZXZpb3VzbHkgd2hl
biBhIAorICAgICAgICByZXF1ZXN0IGFza2VkIGZvciBzaXplIGJpZ2dlciB0aGFuIHNwYWNlIGF2
YWlsYWJsZSwgd2Ugd291bGQgZ28gdG8gYXNrIGZvciBtb3JlIHNwYWNlIGRpcmVjdGx5LiBOb3cg
YmVjYXVzZSBJREIKKyAgICAgICAgY2FuIGJlIHJlcG9ydGluZyBlc3RpbWF0ZWQgdXNhZ2UsIHdl
IGZpcnN0IGFzayBJREIgdG8gY29tcHV0ZSBpdHMgYWN0dWFsIGRpc2sgdXNhZ2UgYW5kIGFzayBm
b3IgbW9yZSBzcGFjZSBpZiAKKyAgICAgICAgYWN0dWFsIHNwYWNlIGF2YWlsYWJsZSBpcyBzbWFs
bGVyIHRoYW4gcmVxdWVzdGVkIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjphc2tVc2VyVG9Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OnJlbW92ZVVzZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVxdWVzdFNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1h
bmFnZXI6OmFza0Zvck1vcmVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VRdW90YU1hbmFnZXIuaDoKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VRdW90YVVzZXI6OmNvbXB1dGVTcGFjZVVzZWQpOgor
CiAyMDE5LTEwLTA5ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdFBvaW50ZXJUdXBsZTwuLi4sIE9wdGlvblNldDwuLi4+
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAppbmRleCBiNTllZDdmMjI0NDcwNDE0N2ZkMTkwYTFkMTdmYTg5NGQzOWZjYjBj
Li40MjhhYTgwMGI1MTFkNGE4ODAzYjFiZGRjMWMyZWFlNmNjOTEwY2YwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApA
QCAtNzEyLDcgKzcxMiw2IEBAIElEQlNlcnZlcjo6UXVvdGFVc2VyOjp+UXVvdGFVc2VyKCkKIHZv
aWQgSURCU2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKIHsKICAgICBtX3NwYWNl
VXNlZCA9IDA7Ci0gICAgbV9lc3RpbWF0ZWRTcGFjZUluY3JlYXNlID0gMDsKIAogICAgIGlmICgh
bV9tYW5hZ2VyKQogICAgICAgICByZXR1cm47CkBAIC03MzIsNiArNzMxLDExIEBAIHZvaWQgSURC
U2VydmVyOjpRdW90YVVzZXI6OnJlc2V0U3BhY2VVc2VkKCkKICAgICBtX21hbmFnZXItPmFkZFVz
ZXIoKnRoaXMpOwogfQogCit2b2lkIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpjb21wdXRlU3BhY2VV
c2VkKCkKK3sKKyAgICByZXNldFNwYWNlVXNlZCgpOworfQorCiB2b2lkIElEQlNlcnZlcjo6UXVv
dGFVc2VyOjppbmNyZWFzZVNwYWNlVXNlZCh1aW50NjRfdCBzaXplKQogewogICAgIGlmICghbV9p
c0luaXRpYWxpemVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDE5ZTY5NjJlZDE5YWJhNTQwMzJjYTA0NDcyNGVkMTEx
NTM1NGE1YWYuLjVhYTNkYjVhMTg5YzgzZTkyYmI0ZWVlZDVkZWUwYjUzYzJkMTAxMDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmgKQEAgLTE2Nyw3ICsxNjcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0aWFsaXpl
U3BhY2VVc2VkKHVpbnQ2NF90IHNwYWNlVXNlZCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB1
aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NwYWNlVXNlZCArIG1f
ZXN0aW1hdGVkU3BhY2VJbmNyZWFzZTsgfQorICAgICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBj
b25zdCBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9pc0luaXRpYWxpemVk
KTsKKyAgICAgICAgICAgIHJldHVybiBtX3NwYWNlVXNlZCArIG1fZXN0aW1hdGVkU3BhY2VJbmNy
ZWFzZTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGNvbXB1dGVTcGFjZVVzZWQoKSBmaW5hbDsK
ICAgICAgICAgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KSBmaW5hbDsKIAogICAgICAgICBJREJTZXJ2ZXImIG1fc2VydmVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5jcHAKaW5kZXggYzkzOWEwMDE4MjdmODk4MDVkYzgyYjhjNWEzOWY2MzhhNzM0YWFiNC4u
M2ExNzNkMDJmNjhiMGE2NmY3MjQxY2RlMTNlOTBiN2YzMTYzODE2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCkBAIC0yMTksNiArMjE5LDI1IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
CiAgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCAwLCAiIiwgV1RGTW92ZShjYWxsYmFjaykp
OwogfQogCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdGFydFNwYWNlSW5jcmVhc2VUYXNrKHVp
bnQ2NF90IGlkZW50aWZpZXIsIHVpbnQ2NF90IHRhc2tTaXplKQoreworICAgIG1fc2VydmVyLT5p
bmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIHRhc2tTaXpl
KTsKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CisgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmFkZChpZGVudGlmaWVy
LCB0YXNrU2l6ZSk7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaFNwYWNlSW5j
cmVhc2VUYXNrKHVpbnQ2NF90IGlkZW50aWZpZXIsIGJvb2wgaXNUYXNrU3VjY2Vzc2Z1bCkKK3sK
KyAgICBhdXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLmZpbmQoaWRl
bnRpZmllcik7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VU
YXNrcy5lbmQoKSB8fCAhaXNUYXNrU3VjY2Vzc2Z1bCk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1f
cGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSkgeworICAgICAgICBtX3NlcnZlci0+ZGVj
cmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+
dmFsdWUpOworICAgICAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkKKyAgICAgICAgICAgIG1fc2Vy
dmVyLT5pbmNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52
YWx1ZSk7CisgICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5yZW1vdmUoaXRlcmF0
b3IpOworICAgIH0KK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRP
cGVuT3BlcmF0aW9uKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3VycmVudE9wZW5PcGVyYXRpb24gKCVwKSIsIHRoaXMpOwpAQCAtMjQ3
LDcgKzI2Niw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DdXJyZW50T3Blbk9w
ZXJhdGlvbigpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBjYXNlIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uOjpHcmFu
dDoKLSAgICAgICAgICAgICAgICAgICAgdGhpcy0+cG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSwg
bV9pZGVudGlmaWVyKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IHRo
aXMtPmdlbmVyYXRlVW5pcXVlQ2FsbGJhY2tJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgZGVmYXVsdFdyaXRlT3BlcmF0
aW9uQ29zdCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMtPnBvc3REYXRhYmFzZVRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5n
U3RvcmUsIG1faWRlbnRpZmllciwgY2FsbGJhY2tJRCkpOwogICAgICAgICAgICAgICAgIH07CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQpAQCAtMzYwLDE0ICszODEsMTIgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmkKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VT
aXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAgIG1fYmFja2lu
Z1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFu
ZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwogICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1l
cmFsID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBt
X3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwotICAgICAgICBtX2N1cnJl
bnREYXRhYmFzZVNpemUgPSBiYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwogCiAgICAgICAg
IElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CiAgICAgICAgIGF1dG8gZXJyb3IgPSBiYWNr
aW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CkBAIC0z
NzYsNyArMzk1LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKIAogICAgICAgICBkZWxldGVk
VmVyc2lvbiA9IGRhdGFiYXNlSW5mby52ZXJzaW9uKCk7CiAgICAgICAgIGJhY2tpbmdTdG9yZS0+
ZGVsZXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1fbmV3RGF0YWJhc2VTaXplID0gYmFja2lu
Z1N0b3JlLT5kYXRhYmFzZVNpemUoKTsKICAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZERl
bGV0ZUJhY2tpbmdTdG9yZSwgZGVsZXRlZFZlcnNpb24pKTsKQEAgLTQxMiwxMCArNDMwLDggQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSgpCiAKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSIpOwogCi0g
ICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQogICAgICAg
ICBtX2JhY2tpbmdTdG9yZS0+Y2xvc2UoKTsKLSAgICAgICAgbV9uZXdEYXRhYmFzZVNpemUgPSBt
X2JhY2tpbmdTdG9yZS0+ZGF0YWJhc2VTaXplKCk7Ci0gICAgfQogCiAgICAgbV9iYWNraW5nU3Rv
cmUgPSBudWxscHRyOwogICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFu
c2FjdGlvbnMgPSBmYWxzZTsKQEAgLTQzNCw4ICs0NTAsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRTaHV0ZG93bkZvckNsb3NlKCkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZVJlcGx5
UXVldWUuaXNFbXB0eSgpKTsKICAgICBtX2RhdGFiYXNlUmVwbHlRdWV1ZS5raWxsKCk7Ci0KLSAg
ICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCkBAIC00Njcs
OCArNDgxLDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3Jl
KHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQogICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0
ID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOwotCiAg
ICAgbV9kZWxldGVCYWNraW5nU3RvcmVJblByb2dyZXNzID0gZmFsc2U7CiAKICAgICBpZiAobV9o
YXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKQEAgLTU0OSwxNCArNTYxLDE0IEBAIGJvb2wgVW5pcXVl
SURCRGF0YWJhc2U6OmFsbENvbm5lY3Rpb25zQXJlQ2xvc2VkT3JDbG9zaW5nKCkgY29uc3QKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5pcXVlQ2FsbGJh
Y2tJZGVudGlmaWVyKCkKK3VpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpnZW5lcmF0ZVVuaXF1
ZUNhbGxiYWNrSWRlbnRpZmllcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBzdGF0aWMgdWludDY0X3QgY3VycmVudElEID0gMDsKICAgICByZXR1cm4gKytjdXJyZW50SUQ7
CiB9CiAKLXVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJy
b3IoRXJyb3JDYWxsYmFjayYmIGNhbGxiYWNrLCB1aW50NjRfdCB0YXNrU2l6ZSkKK3VpbnQ2NF90
IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFj
ayYmIGNhbGxiYWNrKQogewogICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAg
ICAgICAgIGNhbGxiYWNrKElEQkVycm9yOjp1c2VyRGVsZXRlRXJyb3IoKSk7CkBAIC01NjcsMTYg
KzU3OSwxMSBAQCB1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKEVycm9yQ2FsbGJhY2smJiBjYWxsYmFjaywgdQogICAgIEFTU0VSVCghbV9lcnJvckNh
bGxiYWNrcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgbV9lcnJvckNhbGxiYWNrcy5hZGQo
aWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOwogCi0gICAgaWYgKHRhc2tTaXplKSB7Ci0g
ICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIu
b3JpZ2luKCksIHRhc2tTaXplKTsKLSAgICAgICAgbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFz
a3MuYWRkKGlkZW50aWZpZXIsIHRhc2tTaXplKTsKLSAgICB9Ci0KICAgICBtX2NhbGxiYWNrUXVl
dWUuYXBwZW5kKGlkZW50aWZpZXIpOwogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQogCi11aW50
NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVycm9yKEtleURhdGFD
YWxsYmFjayYmIGNhbGxiYWNrLCB1aW50NjRfdCB0YXNrU2l6ZSkKK3VpbnQ2NF90IFVuaXF1ZUlE
QkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYgY2Fs
bGJhY2spCiB7CiAgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKICAgICAgICAg
Y2FsbGJhY2soSURCRXJyb3I6OnVzZXJEZWxldGVFcnJvcigpLCB7IH0pOwpAQCAtNTg3LDExICs1
OTQsNiBAQCB1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFja09yRmlyZUVy
cm9yKEtleURhdGFDYWxsYmFjayYmIGNhbGxiYWNrLAogICAgIEFTU0VSVCghbV9rZXlEYXRhQ2Fs
bGJhY2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2tleURhdGFDYWxsYmFja3MuYWRk
KGlkZW50aWZpZXIsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIGlmICh0YXNrU2l6ZSkgewot
ICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVy
Lm9yaWdpbigpLCB0YXNrU2l6ZSk7Ci0gICAgICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rh
c2tzLmFkZChpZGVudGlmaWVyLCB0YXNrU2l6ZSk7Ci0gICAgfQotCiAgICAgbV9jYWxsYmFja1F1
ZXVlLmFwcGVuZChpZGVudGlmaWVyKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KQEAgLTc5
Miw3ICs3OTQsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphZGRPcGVuRGF0YWJhc2VDb25u
ZWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3RpbwogICAgIG1fb3BlbkRhdGFiYXNl
Q29ubmVjdGlvbnMuYWRkKGFkb3B0UmVmKGNvbm5lY3Rpb24ubGVha1JlZigpKSk7CiB9CiAKLXZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIHVpbnQ2NF90
IHRhc2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExP
RyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlICgl
cCkiLCB0aGlzKTsKQEAgLTgwMiwxNyArODA0LDEzIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVy
CiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1f
YmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpOwogICAgIG1f
YmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsK
IAotICAgIC8vIFF1b3RhVXNlciBzaG91bGQgaGF2ZSBpbml0aWxpYXplZCBzdG9yYWdlIHVzYWdl
LCB3aGljaCBjb250YWlucyB0aGUKLSAgICAvLyBzaXplIG9mIHRoaXMgZGF0YWJhc2UuCi0gICAg
bV9jdXJyZW50RGF0YWJhc2VTaXplID0gbV9iYWNraW5nU3RvcmUtPmRhdGFiYXNlU2l6ZSgpOwot
CiAgICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKICAgICBhdXRvIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CiAK
LSAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJy
b3IpKTsKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5m
bywgZXJyb3IsICB0YXNrSWRlbnRpZmllcikpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRPcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3Qg
SURCRXJyb3ImIGVycm9yKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IElEQkVycm9yJiBlcnJvciwg
dWludDY0X3QgdGFza0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFj
a2luZ1N0b3JlIik7CkBAIC04MjMsNyArODIxLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkT3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IEkK
ICAgICBBU1NFUlQobV9pc09wZW5pbmdCYWNraW5nU3RvcmUpOwogICAgIG1faXNPcGVuaW5nQmFj
a2luZ1N0b3JlID0gZmFsc2U7CiAKLSAgICB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZCgpOworICAg
IGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKHRhc2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7
CiAKICAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSkKICAgICAgICAgcmV0dXJuOwpA
QCAtODQ4LDEwICs4NDYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3QKIAogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodWludDY0X3Qg
dGFza1NpemUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIEVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssIGNvbnN0
IElEQkVycm9yJiBxdW90YUVycm9yKQogewotICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayksIHRhc2tTaXplKTsKKyAgICB1
aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAgIHJldHVybjsKIAorICAgIHN0
YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBvc3REYXRh
YmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSwgaW5mbywgIHF1b3RhRXJyb3IpKTsKIH0KIApAQCAtODc3LDYgKzg3Niw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
Q3JlYXRlT2JqZWN0U3RvcmUiKTsKIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkK
ICAgICAgICAgbV9kYXRhYmFzZUluZm8tPmFkZEV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mbyk7CiAK
QEAgLTk1Miw3ICs5NTIsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RT
dG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogCiB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0
YXNrU2l6ZSwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBFcnJvckNh
bGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJvcikKIHsKLSAgICB1aW50
NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9yKFdURk1vdmUoY2FsbGJh
Y2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tP
ckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTk2MSw2ICs5NjEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpyZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh1aW50NjRfdCB0YXNrU2l6ZSwgVW5p
cQogICAgIGlmICghaW5mbykKICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgIkF0dGVtcHQgdG8gcmVuYW1lIG5vbi1leGlzdGFudCBvYmplY3Qgc3RvcmUiX3MgfTsKIAor
ICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1NpemUpOwogICAgIHBv
c3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJhY2tJRCwgdHJhbnNhY3Rpb24u
aW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBlcnJv
cikpOwogfQogCkBAIC05ODUsNiArOTg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSIpOwogCisgICAgZmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7
CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2RhdGFiYXNlSW5mby0+cmVuYW1l
T2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKIApAQCAtMTA1MCw5
ICsxMDUyLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAKIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNyZWF0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2NF90IHRhc2tTaXplLCBVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCSW5kZXhJbmZv
JiBpbmZvLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVvdGFFcnJv
cikKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmlyZUVycm9y
KFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9
IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFj
YWxsYmFja0lEKQogICAgICAgICByZXR1cm47CisKKyAgICBzdGFydFNwYWNlSW5jcmVhc2VUYXNr
KGNhbGxiYWNrSUQsIHRhc2tTaXplKTsKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgs
IGNhbGxiYWNrSUQsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGluZm8sIHF1b3Rh
RXJyb3IpKTsKIH0KIApAQCAtMTA4NCw2ICsxMDg4LDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCIpOwogCisgICAgZmlu
aXNoU3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvci5pc051bGwoKSk7
CisKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2VJ
bmZvKTsKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8tPmlu
Zm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwpA
QCAtMTE3Miw3ICsxMTc4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgo
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHUKIAogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXhBZnRlclF1b3RhQ2hlY2sodWludDY0X3QgdGFza1Np
emUsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBuZXdOYW1lLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJREJFcnJvciYgcXVv
dGFFcnJvcikKIHsKLSAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spLCB0YXNrU2l6ZSk7CisgICAgdWludDY0X3QgY2FsbGJh
Y2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
aWYgKCFjYWxsYmFja0lEKQogICAgICAgICByZXR1cm47CiAKQEAgLTExODUsNiArMTE5MSw3IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHVpbnQ2
NF90IHRhc2tTaXplLCBVbmlxdWVJREJECiAgICAgaWYgKCFpbmRleEluZm8pCiAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBdHRlbXB0IHRvIHJlbmFtZSBub24tZXhp
c3RhbnQgaW5kZXgiX3MgfTsKIAorICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJ
RCwgdGFza1NpemUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJ
RCwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGVycm9yKSk7CiB9CiAKQEAgLTEyMDksNiArMTIx
Niw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtUmVuYW1lSW5kZXgiKTsKIAorICAgIGZpbmlzaFNwYWNlSW5jcmVhc2VUYXNrKGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IuaXNOdWxsKCkpOwogICAgIGlmIChlcnJvci5pc051bGwoKSkgewog
ICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4
aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICAgICAgQVNTRVJU
KG9iamVjdFN0b3JlSW5mbyk7CkBAIC0xMjM5LDkgKzEyNDcsMTEgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cHV0T3JBZGQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnMKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGRBZnRlclF1b3RhQ2hl
Y2sodWludDY0X3QgdGFza1NpemUsIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwg
Y29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVlLCBJbmRleGVk
REI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJh
Y2sgY2FsbGJhY2ssIGNvbnN0IElEQkVycm9yJiBxdW90YUVycm9yKQogewotICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBzdG9yZUNhbGxiYWNrT3JGaXJlRXJyb3IoV1RGTW92ZShjYWxsYmFjayks
IHRhc2tTaXplKTsKKyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gc3RvcmVDYWxsYmFja09yRmly
ZUVycm9yKFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBpZiAoIWNhbGxiYWNrSUQpCiAgICAgICAg
IHJldHVybjsKKworICAgIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2soY2FsbGJhY2tJRCwgdGFza1Np
emUpOwogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJRCwgcmVxdWVzdERh
dGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCksIHJlcXVlc3REYXRhLm9iamVjdFN0b3JlSWRlbnRp
ZmllcigpLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgcXVvdGFFcnJvcikpOwogfQog
CkBAIC0xMzM0LDYgKzEzNDQsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3Jt
UHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkIik7CiAKKyAgICBmaW5pc2hTcGFjZUluY3JlYXNl
VGFzayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLmlzTnVsbCgpKTsKICAgICBwZXJmb3JtS2V5
RGF0YUNhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdEtleSk7CiB9CiAK
QEAgLTIxMjgsOSArMjEzOSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFz
ZVRhc2soQ3Jvc3NUaHJlYWRUYXNrJiYgdGFzaykKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cG9zdERhdGFiYXNlVGFza1JlcGx5KENyb3NzVGhyZWFkVGFzayYmIHRhc2spCiB7Ci0gICAgaWYg
KG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX25ld0RhdGFiYXNlU2l6ZSA9IG1fYmFja2luZ1N0
b3JlLT5kYXRhYmFzZVNpemUoKTsKLQogICAgIG1fZGF0YWJhc2VSZXBseVF1ZXVlLmFwcGVuZChX
VEZNb3ZlKHRhc2spKTsKICAgICBtX3NlcnZlci0+cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpleGVjdXRlTmV4dERh
dGFiYXNlVGFza1JlcGx5KSk7CiB9CkBAIC0yMTk1LDggKzIyMDMsOSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjppbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKQogCiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAotICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2luZ1Rhc2tzLmNsZWFy
KCk7Ci0gICAgbV9zZXJ2ZXItPnJlc2V0U3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSk7
CisgICAgZm9yIChhdXRvIHNpemUgOiBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MudmFsdWVz
KCkpCisgICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChtX2lkZW50
aWZpZXIub3JpZ2luKCksIHNpemUpOworICAgIG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5j
bGVhcigpOwogCiAgICAgLy8gRXJyb3Igb3V0IGFsbCB0cmFuc2FjdGlvbnMKICAgICBmb3IgKGF1
dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9pblByb2dyZXNzVHJhbnNhY3Rpb25zLmtl
eXMoKSkpCkBAIC0yMjcyLDMzICsyMjgxLDggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1t
ZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKICAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRp
b25hbERlbGV0ZUJhY2tpbmdTdG9yZSkpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp1
cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChPcHRpb25hbDx1aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFj
a0lkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChv
cHRpb25hbENhbGxiYWNrSWRlbnRpZmllcikgewotICAgICAgICB1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIgPSBvcHRpb25hbENhbGxiYWNrSWRlbnRpZmllci52YWx1ZSgpOwotICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9wZW5kaW5nU3BhY2VJbmNyZWFzaW5nVGFza3MuZmluZChjYWxsYmFj
a0lkZW50aWZpZXIpOwotICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9wZW5kaW5nU3BhY2VJbmNy
ZWFzaW5nVGFza3MuZW5kKCkpIHsKLSAgICAgICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVBvdGVu
dGlhbFNwYWNlVXNlZChtX2lkZW50aWZpZXIub3JpZ2luKCksIGl0ZXJhdG9yLT52YWx1ZSk7Ci0g
ICAgICAgICAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdUYXNrcy5yZW1vdmUoaXRlcmF0b3Ip
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdWludDY0X3QgZGF0YWJhc2VTaXplID0gbV9uZXdE
YXRhYmFzZVNpemU7Ci0gICAgaWYgKGRhdGFiYXNlU2l6ZSAhPSBtX2N1cnJlbnREYXRhYmFzZVNp
emUpIHsKLSAgICAgICAgaWYgKGRhdGFiYXNlU2l6ZSA+IG1fY3VycmVudERhdGFiYXNlU2l6ZSkK
LSAgICAgICAgICAgIG1fc2VydmVyLT5pbmNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIub3Jp
Z2luKCksIGRhdGFiYXNlU2l6ZSAtIG1fY3VycmVudERhdGFiYXNlU2l6ZSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fc2VydmVyLT5kZWNyZWFzZVNwYWNlVXNlZChtX2lkZW50aWZpZXIu
b3JpZ2luKCksIG1fY3VycmVudERhdGFiYXNlU2l6ZSAtIGRhdGFiYXNlU2l6ZSk7Ci0gICAgICAg
IG1fY3VycmVudERhdGFiYXNlU2l6ZSA9IGRhdGFiYXNlU2l6ZTsKLSAgICB9Ci19Ci0KIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNr
SWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yKQogewotICAgIHVwZGF0ZVNwYWNlVXNl
ZElmTmVlZGVkKGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KICAgICBhdXRvIGNhbGxiYWNrID0gbV9l
cnJvckNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgQVNTRVJUKGNhbGxi
YWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogICAgIGlmIChjYWxsYmFjaykgewpA
QCAtMjMxMCw4ICsyMjk0LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUVycm9y
Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogCiB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtS2V5RGF0YUNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiByZXN1bHRL
ZXkpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2VkSWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsK
LQogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2tleURhdGFDYWxsYmFja3MudGFrZShjYWxsYmFja0lk
ZW50aWZpZXIpOwogICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVs
ZXRlKTsKICAgICBpZiAoY2FsbGJhY2spIHsKQEAgLTIzNTYsOCArMjMzOCw2IEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db3VudENhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QKIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxs
YmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiB7Ci0gICAgdXBkYXRlU3BhY2VVc2Vk
SWZOZWVkZWQoY2FsbGJhY2tJZGVudGlmaWVyKTsKLQogICAgIEFTU0VSVChtX2Vycm9yQ2FsbGJh
Y2tzLmNvbnRhaW5zKGNhbGxiYWNrSWRlbnRpZmllcikpOwogICAgIEFTU0VSVChtX2NhbGxiYWNr
UXVldWUubGFzdCgpID09IGNhbGxiYWNrSWRlbnRpZmllcik7CiAgICAgbV9jYWxsYmFja1F1ZXVl
LnJlbW92ZUxhc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggMTQxODAxZGE3ZmZlNTYx
OWE3MTBkYTJmYjI2OTU0ZGM2Y2VkMmM0Zi4uY2FjMjcwODExN2FjMDg0ZDQyMDhkNzk3YWM3OTc5
ZmY5YmRjMjA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTExNiw4ICsxMTYsNiBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkgY29uc3QgeyByZXR1
cm4gbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZTsgfQogCi0gICAgdWludDY0X3Qgc3BhY2VVc2Vk
KCkgY29uc3Q7Ci0KICAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpOwogCiBwcml2
YXRlOgpAQCAtMTYwLDcgKzE1OCw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBEYXRhYmFzZSB0aHJl
YWQgb3BlcmF0aW9ucwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYpOwotICAgIHZvaWQgb3BlbkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImKTsKKyAgICB2b2lkIG9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdGFza0lkZW50aWZpZXIpOwogICAgIHZvaWQgcGVy
Zm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIHZvaWQg
cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBiZWdpblRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUoY29uc3QgSURCVHJhbnNhY3Rpb25JbmZv
Jik7CkBAIC0xODgsNyArMTg2LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1haW4gdGhyZWFkIGNh
bGxiYWNrcwogICAgIHZvaWQgZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRW
ZXJzaW9uKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiwgY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCB0YXNrSWRlbnRp
Zmllcik7CiAgICAgdm9pZCBkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5m
byYpOwogICAgIHZvaWQgZGlkUGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIpOwogICAgIHZvaWQgZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNh
bGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSk7CkBAIC0yMTEsOCArMjA5LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpZFBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3Jl
KCk7CiAgICAgdm9pZCBkaWRTaHV0ZG93bkZvckNsb3NlKCk7CiAKLSAgICB1aW50NjRfdCBzdG9y
ZUNhbGxiYWNrT3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmLCB1aW50NjRfdCB0YXNrU2l6ZSA9
IDApOwotICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihLZXlEYXRhQ2FsbGJh
Y2smJiwgdWludDY0X3QgdGFza1NpemUgPSAwKTsKKyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoRXJyb3JDYWxsYmFjayYmKTsKKyAgICB1aW50NjRfdCBzdG9yZUNhbGxiYWNr
T3JGaXJlRXJyb3IoS2V5RGF0YUNhbGxiYWNrJiYpOwogICAgIHVpbnQ2NF90IHN0b3JlQ2FsbGJh
Y2tPckZpcmVFcnJvcihHZXRBbGxSZXN1bHRzQ2FsbGJhY2smJik7CiAgICAgdWludDY0X3Qgc3Rv
cmVDYWxsYmFja09yRmlyZUVycm9yKEdldFJlc3VsdENhbGxiYWNrJiYpOwogICAgIHVpbnQ2NF90
IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihDb3VudENhbGxiYWNrJiYpOwpAQCAtMjQ5LDcgKzI0
NywxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBlcnJvck1lc3Nh
Z2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwogICAgIHZvaWQgd2Fp
dEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSURCRXJyb3ImJik+JiYpOwotICAgIHZvaWQgdXBkYXRl
U3BhY2VVc2VkSWZOZWVkZWQoT3B0aW9uYWw8dWludDY0X3Q+IG9wdGlvbmFsQ2FsbGJhY2tJZGVu
dGlmaWVyID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIHN0YXJ0U3BhY2VJbmNyZWFzZVRhc2so
dWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFza1NpemUpOworICAgIHZvaWQgZmluaXNo
U3BhY2VJbmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgYm9vbCBpc1Rhc2tTdWNjZXNz
ZnVsKTsKKworICAgIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuaXF1ZUNhbGxiYWNrSWRlbnRp
ZmllcigpOwogCiAgICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CiAgICAgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyIG1faWRlbnRpZmllcjsKQEAgLTMwMiw5ICszMDMsNyBAQCBwcml2YXRlOgogCiAg
ICAgSGFzaFNldDxJREJSZXNvdXJjZUlkZW50aWZpZXI+IG1fY3Vyc29yUHJlZmV0Y2hlczsKIAot
ICAgIEhhc2hNYXA8dWludDY0X3QsIHVpbnQ2NF90PiBtX3BlbmRpbmdTcGFjZUluY3JlYXNpbmdU
YXNrczsKLSAgICB1aW50NjRfdCBtX2N1cnJlbnREYXRhYmFzZVNpemUgeyAwIH07Ci0gICAgdWlu
dDY0X3QgbV9uZXdEYXRhYmFzZVNpemUgeyAwIH07CisgICAgSGFzaE1hcDx1aW50NjRfdCwgdWlu
dDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdl
ci5jcHAKaW5kZXggNzY3YWQyZWFmNGFjY2I4MzE5MDQ0MjI4OTcwNjk0OWI3MGIzNDMwZS4uODUy
NTc1MmU2MzM0Nzk1MzBlZjE0ZWNiNzRmODViYWY2OGQ5YzU1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCkBAIC04NCw4ICs4NCwxMyBAQCB2
b2lkIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza1VzZXJUb0luaXRpYWxpemUoU3RvcmFnZVF1b3Rh
VXNlciYgdXNlcikKICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB1cGRhdGVRdW90YUJhc2Vk
T25TcGFjZVVzYWdlKCk7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoeyB9LCBTaG91
bGREZXF1ZXVlRmlyc3RQZW5kaW5nUmVxdWVzdDo6Tm8pOworICAgICAgICAvLyBNYWtlIHN1cmUg
cXVvdGEgaXMgc2V0IGJlZm9yZSBoYW5kbGluZyBmaXJzdCByZXF1ZXN0LgorICAgICAgICBpZiAo
bV9zdGF0ZSA9PSBTdGF0ZTo6VW5pbml0aWFsaXplZCkgeworICAgICAgICAgICAgdXBkYXRlUXVv
dGFCYXNlZE9uU3BhY2VVc2FnZSgpOworICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtp
bmdEZWNpc2lvbkZvclJlcXVlc3Q7CisgICAgICAgIH0KKworICAgICAgICBwcm9jZXNzUGVuZGlu
Z1JlcXVlc3RzKHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTExOSw3ICsxMjQsNyBAQCB2b2lkIFN0
b3JhZ2VRdW90YU1hbmFnZXI6OnJlbW92ZVVzZXIoU3RvcmFnZVF1b3RhVXNlciYgdXNlcikKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmIChtX3BlbmRpbmdJbml0aWFs
aXphdGlvblVzZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVu
ZGluZ1JlcXVlc3RzKHsgfSwgU2hvdWxkRGVxdWV1ZUZpcnN0UGVuZGluZ1JlcXVlc3Q6Ok5vKTsK
KyAgICAgICAgICAgICAgICB0aGlzLT5wcm9jZXNzUGVuZGluZ1JlcXVlc3RzKHsgfSk7CiAgICAg
ICAgIH0pOwogICAgIH0KIH0KQEAgLTE0NSwzMiArMTUwLDQzIEBAIHZvaWQgU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVxdWVzdFNwYWNlKHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIFJlcXVlc3RDYWxs
YmFjayYmCiAKICAgICBpZiAoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpKSB7
CiAgICAgICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZCh7IHNwYWNlSW5jcmVhc2UsIFdURk1v
dmUoY2FsbGJhY2spIH0pOworCisgICAgICAgIC8vIFRyeSBwcm9jZXNzaW5nIHJlcXVlc3QgYWdh
aW4gYWZ0ZXIgbWFraW5nIHN1cmUgdXNhZ2UgaXMgYWNjdXJhdGUuCisgICAgICAgIG1fc3RhdGUg
PSBTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2VkOworICAgICAgICBmb3IgKGF1dG8mIHVzZXIgOiBj
b3B5VG9WZWN0b3IobV91c2VycykpCisgICAgICAgICAgICB1c2VyLT5jb21wdXRlU3BhY2VVc2Vk
KCk7CisKKyAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFza2lu
Z0Zvck1vcmVTcGFjZTsKICAgICAgICAgYXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNp
c2lvbkZvclJlcXVlc3Q7CiAgICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKIH0KIAogdm9p
ZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2UodWludDY0X3Qgc3BhY2VJbmNy
ZWFzZSkKIHsKICAgICBBU1NFUlQoc2hvdWxkQXNrRm9yTW9yZVNwYWNlKHNwYWNlSW5jcmVhc2Up
KTsKLSAgICBBU1NFUlQoIW1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlKTsKKyAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKTsKIAogICAgIFJF
TEVBU0VfTE9HKFN0b3JhZ2UsICIlcCAtIFN0b3JhZ2VRdW90YU1hbmFnZXI6OmFza0Zvck1vcmVT
cGFjZSAlIiBQUkl1NjQsIHRoaXMsIHNwYWNlSW5jcmVhc2UpOwotICAgIG1faXNXYWl0aW5nRm9y
U3BhY2VJbmNyZWFzZVJlc3BvbnNlID0gdHJ1ZTsKKyAgICBtX3N0YXRlID0gU3RhdGU6OldhaXRp
bmdGb3JTcGFjZUluY3JlYXNlUmVzcG9uc2U7CiAgICAgbV9zcGFjZUluY3JlYXNlUmVxdWVzdGVy
KG1fcXVvdGEsIHNwYWNlVXNhZ2UoKSwgc3BhY2VJbmNyZWFzZSwgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpXShPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEpIHsKICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBSRUxFQVNF
X0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVvdGFNYW5hZ2VyOjphc2tGb3JNb3JlU3BhY2Ug
cmVjZWl2ZWQgcmVzcG9uc2UgJSIgUFJJdTY0LCB0aGlzLCBuZXdRdW90YSA/ICpuZXdRdW90YSA6
IDApOwogCi0gICAgICAgIG1faXNXYWl0aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlID0gZmFs
c2U7Ci0gICAgICAgIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMobmV3UXVvdGEsIFNob3VsZERlcXVl
dWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpZZXMpOworICAgICAgICBtX3N0YXRlID0gU3RhdGU6OkFz
a2luZ0Zvck1vcmVTcGFjZTsKKyAgICAgICAgcHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhuZXdRdW90
YSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNob3VsZERlcXVldWVGaXJz
dFBlbmRpbmdSZXF1ZXN0IHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0KQordm9pZCBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzKE9wdGlvbmFsPHVpbnQ2
NF90PiBuZXdRdW90YSkKIHsKICAgICBpZiAobV9wZW5kaW5nUmVxdWVzdHMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzgsMTggKzE5NCwxOSBAQCB2b2lkIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OnByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0X3Q+IG5ld1F1b3Rh
LCBTaAogICAgIGlmIChuZXdRdW90YSkKICAgICAgICAgbV9xdW90YSA9ICpuZXdRdW90YTsKIAot
ICAgIGlmIChtX2lzV2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6V2FpdGluZ0ZvclNwYWNlSW5jcmVhc2VSZXNwb25zZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdS
ZXF1ZXN0ID09IFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdSZXF1ZXN0OjpZZXMpIHsKKyAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6QXNraW5nRm9yTW9yZVNwYWNlKSB7CiAgICAgICAgIGF1dG8g
cmVxdWVzdCA9IG1fcGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpOwogICAgICAgICBib29sIHNo
b3VsZEFsbG93UmVxdWVzdCA9ICFzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUlu
Y3JlYXNlKTsKIAogICAgICAgICBSRUxFQVNFX0xPRyhTdG9yYWdlLCAiJXAgLSBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpwcm9jZXNzUGVuZGluZ1JlcXVlc3RzIGZpcnN0IHJlcXVlc3QgZGVjaXNpb24g
aXMgJWQiLCB0aGlzLCBzaG91bGRBbGxvd1JlcXVlc3QpOwogCisgICAgICAgIG1fc3RhdGUgPSBT
dGF0ZTo6TWFraW5nRGVjaXNpb25Gb3JSZXF1ZXN0OwogICAgICAgICByZXF1ZXN0LmNhbGxiYWNr
KHNob3VsZEFsbG93UmVxdWVzdCA/IERlY2lzaW9uOjpHcmFudCA6IERlY2lzaW9uOjpEZW55KTsK
ICAgICB9CiAKQEAgLTE5NywxMyArMjE0LDI0IEBAIHZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6
cHJvY2Vzc1BlbmRpbmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4gbmV3UXVvdGEsIFNoCiAg
ICAgICAgIGF1dG8mIHJlcXVlc3QgPSBtX3BlbmRpbmdSZXF1ZXN0cy5maXJzdCgpOwogCiAgICAg
ICAgIGlmIChzaG91bGRBc2tGb3JNb3JlU3BhY2UocmVxdWVzdC5zcGFjZUluY3JlYXNlKSkgewor
ICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6Ok1ha2luZ0RlY2lzaW9uRm9yUmVxdWVz
dCkgeworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcHV0aW5nU3BhY2VVc2Vk
OworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdXNlciA6IGNvcHlUb1ZlY3RvcihtX3VzZXJz
KSkKKyAgICAgICAgICAgICAgICAgICAgdXNlci0+Y29tcHV0ZVNwYWNlVXNlZCgpOworCisgICAg
ICAgICAgICAgICAgaWYgKCFtX3BlbmRpbmdJbml0aWFsaXphdGlvblVzZXJzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBtX3N0YXRlID0gU3RhdGU6OkFza2luZ0Zvck1vcmVTcGFjZTsKICAgICAgICAgICAgIHVpbnQ2
NF90IHNwYWNlSW5jcmVhc2UgPSAwOwotICAgICAgICAgICAgZm9yIChhdXRvJiByZXF1ZXN0IDog
bV9wZW5kaW5nUmVxdWVzdHMpCi0gICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFzZSArPSByZXF1
ZXN0LnNwYWNlSW5jcmVhc2U7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHBlbmRpbmdSZXF1ZXN0
IDogbV9wZW5kaW5nUmVxdWVzdHMpCisgICAgICAgICAgICAgICAgc3BhY2VJbmNyZWFzZSArPSBw
ZW5kaW5nUmVxdWVzdC5zcGFjZUluY3JlYXNlOwogICAgICAgICAgICAgYXNrRm9yTW9yZVNwYWNl
KHNwYWNlSW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpNYWtpbmdEZWNpc2lvbkZvclJlcXVlc3Q7CiAgICAgICAgIG1f
cGVuZGluZ1JlcXVlc3RzLnRha2VGaXJzdCgpLmNhbGxiYWNrKERlY2lzaW9uOjpHcmFudCk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApp
bmRleCA5ZjY0NjMzZWQ2NmNjMTJhOTI4M2MwODkxYmQyNTVhZTkzMDQyYWI3Li41Y2UzYTIyOTI0
MWM3YmFjZjRmYjM2OGMzZTk4ZjEzMjI3OTVlODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtNzAsMjMgKzcwLDMwIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBpbml0aWFsaXplVXNlcnNJZk5lZWRlZCgpOwogICAgIHZvaWQgYXNrVXNlclRvSW5p
dGlhbGl6ZShTdG9yYWdlUXVvdGFVc2VyJik7CiAKLSAgICBlbnVtIGNsYXNzIFNob3VsZERlcXVl
dWVGaXJzdFBlbmRpbmdSZXF1ZXN0IHsgTm8sIFllcyB9OwotICAgIHZvaWQgcHJvY2Vzc1BlbmRp
bmdSZXF1ZXN0cyhPcHRpb25hbDx1aW50NjRfdD4sIFNob3VsZERlcXVldWVGaXJzdFBlbmRpbmdS
ZXF1ZXN0KTsKKyAgICB2b2lkIHByb2Nlc3NQZW5kaW5nUmVxdWVzdHMoT3B0aW9uYWw8dWludDY0
X3Q+KTsKIAogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CiAKLSAgICBib29sIG1faXNXYWl0
aW5nRm9yU3BhY2VJbmNyZWFzZVJlc3BvbnNlIHsgZmFsc2UgfTsKICAgICBTcGFjZUluY3JlYXNl
UmVxdWVzdGVyIG1fc3BhY2VJbmNyZWFzZVJlcXVlc3RlcjsKIAogICAgIGVudW0gY2xhc3MgV2hl
bkluaXRpYWxpemVkQ2FsbGVkIHsgTm8sIFllcyB9OwogICAgIEhhc2hNYXA8U3RvcmFnZVF1b3Rh
VXNlciosIFdoZW5Jbml0aWFsaXplZENhbGxlZD4gbV9wZW5kaW5nSW5pdGlhbGl6YXRpb25Vc2Vy
czsKLSAgICBIYXNoU2V0PGNvbnN0IFN0b3JhZ2VRdW90YVVzZXIqPiBtX3VzZXJzOworICAgIEhh
c2hTZXQ8U3RvcmFnZVF1b3RhVXNlcio+IG1fdXNlcnM7CiAKICAgICBzdHJ1Y3QgUGVuZGluZ1Jl
cXVlc3QgewogICAgICAgICB1aW50NjRfdCBzcGFjZUluY3JlYXNlOwogICAgICAgICBSZXF1ZXN0
Q2FsbGJhY2sgY2FsbGJhY2s7CiAgICAgfTsKICAgICBEZXF1ZTxQZW5kaW5nUmVxdWVzdD4gbV9w
ZW5kaW5nUmVxdWVzdHM7CisKKyAgICBlbnVtIGNsYXNzIFN0YXRlIHsKKyAgICAgICAgVW5pbml0
aWFsaXplZCwKKyAgICAgICAgQ29tcHV0aW5nU3BhY2VVc2VkLAorICAgICAgICBXYWl0aW5nRm9y
U3BhY2VJbmNyZWFzZVJlc3BvbnNlLAorICAgICAgICBBc2tpbmdGb3JNb3JlU3BhY2UsCisgICAg
ICAgIE1ha2luZ0RlY2lzaW9uRm9yUmVxdWVzdCwKKyAgICB9OworICAgIFN0YXRlIG1fc3RhdGUg
eyBTdGF0ZTo6VW5pbml0aWFsaXplZCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFVc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVzZXIuaAppbmRleCBiNDIzMGM1ZTEy
ZDA5NGQ2OTllMWUyOTk3OTE2NGFmNWI3YzgzOGUwLi5iNzEwY2VlYzYwYzVkZTUwYzYwOWQyMzFi
MGYwZGY5Njc0OTQ5NDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VRdW90YVVzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YVVz
ZXIuaApAQCAtMzQsNiArMzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RvcmFnZVF1b3Rh
VXNlcigpID0gZGVmYXVsdDsKIAogICAgIHZpcnR1YWwgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU3BhY2VVc2VkKCkgeyB9OwogICAgIHZp
cnR1YWwgdm9pZCB3aGVuSW5pdGlhbGl6ZWQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNh
bGxiYWNrKSB7IGNhbGxiYWNrKCk7IH0KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380597</attachid>
            <date>2019-10-09 17:56:44 -0700</date>
            <delta_ts>2019-10-09 18:44:57 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-201957-20191009175630.patch</filename>
            <type>text/plain</type>
            <size>2642</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTdlM2YzZWNhNDYwYTNl
OWVmNmUyZmZmMTBjNzU5YzUyZDEwZWNjZS4uOWVlNWM0Njk0NDE0YTg2NmE5Nzg3N2ViNjAxODc3
ODA4MmJkZTVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTEwLTA5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBh
biBhc3Nlcml0aW9uIGFmdGVyIHIyNTA5MzcuCisKKyAgICAgICAgU3BhY2UgaW5jcmVhc2UgdGFz
a3Mgd2lsbCBiZSBmaW5pc2hlZCBvbmNlIGl0J3Mgc3RhcnRlZC4KKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppbW1l
ZGlhdGVDbG9zZUZvclVzZXJEZWxldGUpOgorCiAyMDE5LTEwLTA5ICBKaWV3ZW4gVGFuICA8amll
d2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBNb3ZlIHRoZSBtb2NrIHRl
c3RpbmcgZW50cmFuY2UgdG8gSW50ZXJuYWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRl
eCAwNmU5NTZjMDliOTVmNDQzYWQ5MTg0NjZkZTk4ZjhhOWM5ZWE0MThjLi41MjVhZGU5Y2MwMGUw
YWYyMWFmYTkzYjRjZjNmMzBjMGQ4ODhiMzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
QEAgLTIyOSwxMyArMjI5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN0YXJ0U3BhY2VJ
bmNyZWFzZVRhc2sodWludDY0X3QgaWRlbnRpZmllciwgdWludDY0X3QgdGFzCiB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpmaW5pc2hTcGFjZUluY3JlYXNlVGFzayh1aW50NjRfdCBpZGVudGlmaWVy
LCBib29sIGlzVGFza1N1Y2Nlc3NmdWwpCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fcGVuZGlu
Z1NwYWNlSW5jcmVhc2VUYXNrcy5maW5kKGlkZW50aWZpZXIpOwotICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5kKCkgfHwgIWlzVGFza1N1Y2Nlc3Nm
dWwpOwotICAgIGlmIChpdGVyYXRvciAhPSBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuZW5k
KCkpIHsKLSAgICAgICAgbV9zZXJ2ZXItPmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRl
bnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgaWYgKGlzVGFza1N1
Y2Nlc3NmdWwpCi0gICAgICAgICAgICBtX3NlcnZlci0+aW5jcmVhc2VTcGFjZVVzZWQobV9pZGVu
dGlmaWVyLm9yaWdpbigpLCBpdGVyYXRvci0+dmFsdWUpOwotICAgICAgICBtX3BlbmRpbmdTcGFj
ZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKLSAgICB9CisgICAgQVNTRVJUKGl0ZXJh
dG9yICE9IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrcy5lbmQoKSk7CisgICAgbV9zZXJ2ZXIt
PmRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0
b3ItPnZhbHVlKTsKKyAgICBpZiAoaXNUYXNrU3VjY2Vzc2Z1bCkKKyAgICAgICAgbV9zZXJ2ZXIt
PmluY3JlYXNlU3BhY2VVc2VkKG1faWRlbnRpZmllci5vcmlnaW4oKSwgaXRlcmF0b3ItPnZhbHVl
KTsKKyAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MucmVtb3ZlKGl0ZXJhdG9yKTsKIH0K
IAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUN1cnJlbnRPcGVuT3BlcmF0aW9uKCkK
QEAgLTIyMDgsMTAgKzIyMDYsNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjppbW1lZGlhdGVD
bG9zZUZvclVzZXJEZWxldGUoKQogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAg
IGZvciAoYXV0byBzaXplIDogbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzLnZhbHVlcygpKQot
ICAgICAgICBtX3NlcnZlci0+ZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQobV9pZGVudGlmaWVy
Lm9yaWdpbigpLCBzaXplKTsKLSAgICBtX3BlbmRpbmdTcGFjZUluY3JlYXNlVGFza3MuY2xlYXIo
KTsKLQogICAgIC8vIEVycm9yIG91dCBhbGwgdHJhbnNhY3Rpb25zCiAgICAgZm9yIChhdXRvJiBp
ZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5rZXlzKCkp
KQogICAgICAgICBtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuZ2V0KGlkZW50aWZpZXIpLT5hYm9y
dFdpdGhvdXRDYWxsYmFjaygpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>