<?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>204379</bug_id>
          
          <creation_ts>2019-11-19 14:34:54 -0800</creation_ts>
          <short_desc>IndexedDB: lock-based implementation of suspension</short_desc>
          <delta_ts>2019-11-22 11:15:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <blocked>203971</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>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1591705</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-19 14:34:54 -0800</bug_when>
    <thetext>When process is about to suspend, we would:
1. suspend the database thread (by making it wait on a condition variable)
2. (wait on main thread until 1 finishes) stop all transactions on the main thread
To implement this, database thread would check whether it needs to suspend *after each task*. If it needs to, it would wake up the main thread, and wait on suspend condition.

However, if the database thread is already suspended (e.g. waiting on lock) in the middle of some task, the thread will not get to the point of checking suspension state and waking up main thread. Main thread would be stuck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591709</commentid>
    <comment_count>1</comment_count>
      <attachid>383907</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-19 14:45:54 -0800</bug_when>
    <thetext>Created attachment 383907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592070</commentid>
    <comment_count>2</comment_count>
      <attachid>383907</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-11-20 11:04:57 -0800</bug_when>
    <thetext>Comment on attachment 383907
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h:273
&gt; +    Lock m_backingStoreLock;

This change adds fragility.

I think it would make it easier to avoid future mistakes if the backing store itself had a notion of a lock that it could assert is locked for each backing store operation.

I can think of at least two ways to accomplish this:

1 - Since UniqueIDBDatabase needs a lock for the setting/getting of the backing store itself, add a second lock to the backing store.
2 - Pass a Lock&amp; to the backing store constructor so it can ASSERT the lock is appropriately held.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592071</commentid>
    <comment_count>3</comment_count>
      <attachid>383907</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-11-20 11:07:37 -0800</bug_when>
    <thetext>Comment on attachment 383907
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:2473
&gt; +    if (m_isSuspended)
&gt; +        return;
&gt; +    m_isSuspended = true;
&gt; +
&gt; +    m_backingStoreLock.lock();
&gt; +

This change adds fragility.

To make it harder to introduce future mistakes I think we should make this be ASSERT-crazy.

If not suspended, assert the lock is not held.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:2508
&gt; +void UniqueIDBDatabase::resume()
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +
&gt; +    if (!m_isSuspended)
&gt; +        return;
&gt; +
&gt; +    m_isSuspended = false;
&gt; +    m_backingStoreLock.unlock();
&gt; +}

This change adds fragility.

To make it harder to introduce future mistakes I think we should make this be ASSERT-crazy.

If suspended, assert the lock is held</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592218</commentid>
    <comment_count>4</comment_count>
      <attachid>384006</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-20 17:13:18 -0800</bug_when>
    <thetext>Created attachment 384006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592220</commentid>
    <comment_count>5</comment_count>
      <attachid>384007</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-20 17:23:54 -0800</bug_when>
    <thetext>Created attachment 384007
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592393</commentid>
    <comment_count>6</comment_count>
      <attachid>384059</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-21 09:15:28 -0800</bug_when>
    <thetext>Created attachment 384059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592455</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-11-21 11:24:45 -0800</bug_when>
    <thetext>A design pattern that can help you remember to take the lock is to require a lock holder reference as an argument to each function that wants the lock to be held. 

That way, the compiler will verify that you did acquire the lock before calling the function. (Technically, you can still make a mistake and lock a different lock of the same type, but that mistake is very rare.)

If we do it that way, we don&apos;t really need the backing store to hold the lock as a data member or assert that it is locked; the type of the locker can only be instantiated by locking the lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592457</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-11-21 11:26:49 -0800</bug_when>
    <thetext>It would also be nice to add a comment next to the declaration of the backing store lock that explains that its purpose is to synchronize against process suspension (even though the backing store is usually only accessed on one thread).

Maybe we could even rename it to backingStoreSuspensionLock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592472</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-11-21 11:57:10 -0800</bug_when>
    <thetext>Here&apos;s an alternative solution to consider: What if, before calling the quota manager on the main thread, the database thread pre-emptively suspended its own task queue?

Like so (similar to CrossThreadTaskHandler::taskRunLoop()):

            m_suspendedLock.lock();
            ASSERT(!m_suspended);
            m_suspended = true;
            m_suspendedCondition.notifyOne();
            m_suspendedLock.unlock();

And then, upon reply, it checked whether to suspend?

Like so (duplicating CrossThreadTaskHandler::taskRunLoop()):

        Locker&lt;Lock&gt; shouldSuspendLocker(m_shouldSuspendLock);
        while (m_shouldSuspend) {
            m_suspendedLock.lock();
            if (!m_suspended) {
                m_suspended = true;
                m_suspendedCondition.notifyOne();
            }
            m_suspendedLock.unlock();
            m_shouldSuspendCondition.wait(m_shouldSuspendLock);
        }

I believe, if you did that, you would solve the conundrum of waiting for acknowledgement from the database thread because the database thread would acknowledge being suspended preemptively before it went to sleep; and it would honor any request to suspend after it woke up.

(Of course, rather than duplicating code from CrossThreadTaskHandler::taskRunLoop(), I would probably make helper functions.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592591</commentid>
    <comment_count>10</comment_count>
      <attachid>384106</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-21 16:51:54 -0800</bug_when>
    <thetext>Created attachment 384106
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592595</commentid>
    <comment_count>11</comment_count>
      <attachid>384106</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-11-21 17:18:17 -0800</bug_when>
    <thetext>Comment on attachment 384106
Patch

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

r=me

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:196
&gt; +    HashSet&lt;UniqueIDBDatabase*&gt; m_allUniqueIDBDatabases;

It would be better to use a WeakHashSet. That way, you don&apos;t need registerDatabase / unregisterDatabase, and you have pointer safety by default.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h:273
&gt; +    Lock m_backingStoreLock;

Would be nice to add a comment explaining that the purpose of this lock is to synchronize vs suspension.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592900</commentid>
    <comment_count>12</comment_count>
      <attachid>384172</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-11-22 10:55:28 -0800</bug_when>
    <thetext>Created attachment 384172
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592914</commentid>
    <comment_count>13</comment_count>
      <attachid>384172</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-22 11:14:29 -0800</bug_when>
    <thetext>Comment on attachment 384172
Patch for landing

Clearing flags on attachment: 384172

Committed r252787: &lt;https://trac.webkit.org/changeset/252787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592915</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-22 11:14:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592917</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-22 11:15:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/57434641&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383907</attachid>
            <date>2019-11-19 14:45:54 -0800</date>
            <delta_ts>2019-11-20 17:13:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204379-20191119144553.patch</filename>
            <type>text/plain</type>
            <size>32102</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzBlZDViODE1YzM1ZDA1
NjFkZWNjYzJjOGNlMTIwYWE5ZDBkYTY3MC4uZGI0MzhjNTlkNjZjZWJmMjA3YzA1MDUxYjE3NWUz
YjVkOTNhOWY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE5LTExLTE5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogbG9jay1i
YXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzdXNwZW5zaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQzNzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0OiBJ
bmRleGVkREIuSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OnRyeVN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJ
REJTZXJ2ZXI6OnJlc3VtZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlZ2lz
dGVyRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnVu
cmVnaXN0ZXJEYXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtU3RhcnRWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9i
amVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybURlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldFJlY29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5k
ZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVByZWZldGNoQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJv
cnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rp
b25Pbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZXN1bWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZmluaXNoQWN0aXZlVHJhbnNhY3Rp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaDoKKwogMjAxOS0xMS0xOSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxl
LmNvbT4KIAogICAgICAgICBVcGRhdGUgZXhwZWN0YXRpb25zIGZvciBidWZmZXJlZEFtb3VudC11
bmNoYW5nZWQtYnktc3luYy14aHIuYW55Lndvcmtlci5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGU2MWRi
OGM5NDI4ZDk4NGRhNjQ2OTZlN2M4NDI3ODc0MjY5YzI3ZTYuLjNlZmE5Nzg3YWJkNGFlNThmYjdm
M2Y3ZmVjMTQwNzYwNDZiMzQ5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC04NTMsMTQgKzg1MywxMSBAQCB2
b2lkIElEQlNlcnZlcjo6dHJ5U3RvcChTaG91bGRGb3JjZVN0b3Agc2hvdWxkRm9yY2VTdG9wKQog
ICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzdXNwZW5kQW5kV2FpdCgpOwotICAgIGlmIChzaG91bGRGb3JjZVN0b3AgPT0gU2hvdWxkRm9y
Y2VTdG9wOjpObyAmJiBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9n
cmVzcygpKSB7Ci0gICAgICAgIENyb3NzVGhyZWFkVGFza0hhbmRsZXI6OnJlc3VtZSgpOworICAg
IGlmIChzaG91bGRGb3JjZVN0b3AgPT0gU2hvdWxkRm9yY2VTdG9wOjpObyAmJiBTUUxpdGVEYXRh
YmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fdW5pcXVlSURCRGF0YWJhc2VN
YXAudmFsdWVzKCkpCi0gICAgICAgIGRhdGFiYXNlLT5maW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMo
KTsKKyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlIDogbV9hbGxVbmlxdWVJREJEYXRhYmFzZXMpCisg
ICAgICAgIGRhdGFiYXNlLT5zdXNwZW5kKCk7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpyZXN1bWUo
KQpAQCAtODY4LDcgKzg2NSw4IEBAIHZvaWQgSURCU2VydmVyOjpyZXN1bWUoKQogICAgIGlmICht
X3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDcm9zc1Ro
cmVhZFRhc2tIYW5kbGVyOjpyZXN1bWUoKTsKKyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlIDogbV9h
bGxVbmlxdWVJREJEYXRhYmFzZXMpCisgICAgICAgIGRhdGFiYXNlLT5yZXN1bWUoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggZDNhMjIzZDkzMmQ5MTU5ZDU0NjY2
MjlmNzE3ZWZmYjU3NzQxM2NhZi4uZGZiZmY2YjZiZDIwOTVhYjg0MWQ4NTA1NzcyY2IyYjY0NzNj
YzA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuaApAQCAtMTIzLDYgKzEyMyw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9wKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlc3VtZSgpOwogCisgICAgdm9pZCByZWdpc3RlckRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFi
YXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5hZGQoJmRhdGFiYXNlKTsg
fQorICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFz
ZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5yZW1vdmUoJmRhdGFiYXNlKTsgfQorCiBwcml2
YXRlOgogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYp
OwogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURp
cmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKQEAgLTE5MCw2ICsxOTMsNyBAQCBw
cml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogICAgIEhhc2hNYXA8SURC
Q29ubmVjdGlvbklkZW50aWZpZXIsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nv
bm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6dW5p
cXVlX3B0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CisgICAg
SGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzOwogCiAg
ICAgSGFzaE1hcDx1aW50NjRfdCwgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKj4gbV9kYXRh
YmFzZUNvbm5lY3Rpb25zOwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4gbV90cmFuc2FjdGlvbnM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcAppbmRleCBmZGVkYTYzNWViN2RjMDVmN2ZmN2UwNTgyY2M0OTJmMGMyZDgzMmJi
Li5kNThkYzc1NjkzOTMxZDRiNzhmNmIxNGE3MWI3ZDdkMzZkOTAyNzQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKQEAgLTEyMiw2ICsxMjIsNyBAQCBVbmlxdWVJREJEYXRhYmFzZTo6VW5p
cXVlSURCRGF0YWJhc2UoSURCU2VydmVyJiBzZXJ2ZXIsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZgogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX29wZXJhdGlvbkFuZFRy
YW5zYWN0aW9uVGltZXIoKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5kVHJh
bnNhY3Rpb25UaW1lckZpcmVkKQogeworICAgIG1fc2VydmVyLT5yZWdpc3RlckRhdGFiYXNlKCp0
aGlzKTsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRh
dGFiYXNlKCkgKCVwKSAlcyIsIHRoaXMsIG1faWRlbnRpZmllci5kZWJ1Z1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogfQogCkBAIC0xMzksNiArMTQwLDggQEAgVW5pcXVlSURCRGF0YWJhc2U6On5V
bmlxdWVJREJEYXRhYmFzZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9kYXRhYmFzZVF1ZXVlLmlz
S2lsbGVkKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzS2ls
bGVkKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisKKyAgICBtX3Nl
cnZlci0+dW5yZWdpc3RlckRhdGFiYXNlKCp0aGlzKTsKIH0KIAogY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiBVbmlxdWVJREJEYXRhYmFzZTo6aW5mbygpIGNvbnN0CkBAIC0zNzgsOSArMzgxLDExIEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAgICAgdWludDY0X3QgZGVsZXRlZFZlcnNpb24gPSAw
OwogCiAgICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlLT5k
ZWxldGVCYWNraW5nU3RvcmUoKTsKLQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7
CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3Jl
TG9jayk7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7
CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgIH0KICAgICAg
ICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNl
OwogICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CiAgICAgfSBlbHNl
IHsKQEAgLTQwMyw4ICs0MDgsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVu
Y29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3RvcmUoKQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
VW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0
b3JlKQotICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAg
ICBpZiAobV9iYWNraW5nU3RvcmUpCisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRl
QmFja2luZ1N0b3JlKCk7CisgICAgfQogCiAgICAgc2h1dGRvd25Gb3JDbG9zZSgpOwogfQpAQCAt
NDI4LDEwICs0MzYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9z
ZSgpCiAKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRv
d25Gb3JDbG9zZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgIGlmIChtX2JhY2tp
bmdTdG9yZSkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2sp
OwogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xvc2UoKTsKLQotICAgIG1fYmFja2luZ1N0b3Jl
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIH0KICAg
ICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7
CiAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogCkBAIC02NzAsNyArNjc5
LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
biIpOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFuc2Fj
dGlvbihpbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmJlZ2luVHJhbnNhY3Rpb24oaW5mbyk7CisgICAgfQorCiAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtU3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24sIGVycm9yKSk7CiB9CiAK
QEAgLTgyNywxMiArODQxLDE2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5n
U3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIs
IHRoaXMpOwogCiAgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3Rv
cmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwotICAgIG1fYmFj
a2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9y
ZS0+c3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZUlzRXBoZW1lcmFsID0gbV9iYWNraW5nU3RvcmUtPmlzRXBoZW1lcmFsKCk7CiAKICAgICBJREJE
YXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwotICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKKyAgICBJREJFcnJv
ciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3Jl
TG9jayk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdT
dG9yZShpZGVudGlmaWVyKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFu
ZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1Ry
YW5zYWN0aW9ucygpOworICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNr
aW5nU3RvcmUtPmlzRXBoZW1lcmFsKCk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUt
PmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CisgICAgfQogCiAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yLCAg
dGFza0lkZW50aWZpZXIpKTsKIH0KQEAgLTg5Miw3ICs5MTAsMTAgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY28KICAgICB9CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8p
OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgaW5mbyk7CisgICAgfQogCiAgICAgSURCRXJyb3IgZXJyb3I7CiAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIGluZm8pKTsKQEAgLTk0NSw3ICs5NjYsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y28KICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURl
bGV0ZU9iamVjdFN0b3JlIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1f
YmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0
U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAg
IH0KIAogICAgIElEQkVycm9yIGVycm9yOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURl
bGV0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIpKTsKQEAgLTEwMDMsNyArMTAyNywxMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
bwogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3Rv
cmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
YmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVPYmplY3RT
dG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFt
ZSk7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3
TmFtZSkpOwogfQpAQCAtMTA0OCw3ICsxMDc1LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVh
ck9iamVjdFN0b3JlIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFj
a2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyKTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFj
a2luZ1N0b3JlTG9jayk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3Jl
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICB9CiAK
ICAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DbGVhck9i
amVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKSk7CkBAIC0xMDk5LDE0ICsxMTI5
LDE3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAKICAgICBJREJFcnJvciBlcnJvcjsKICAg
ICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKLSAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUNyZWF0ZUluZGV4OiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7Ci0g
ICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3Jl
IGlzIGludmFsaWQgZm9yIGNhbGwgdG8gY3JlYXRlIGluZGV4Il9zKTsKLSAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Is
IGluZm8pKTsKLSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4OiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhp
cyk7CisgICAgICAgICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiQmFj
a2luZyBzdG9yZSBpcyBpbnZhbGlkIGZvciBjYWxsIHRvIGNyZWF0ZSBpbmRleCJfcyk7CisgICAg
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgaW5mbykpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgaW5mbyk7CiAgICAgfQogCi0gICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y3Jl
YXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvKTsKICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgaW5mbykp
OwogfQogCkBAIC0xMTY4LDcgKzEyMDEsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUlu
ZGV4Iik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3Jl
LT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
YmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleCh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlm
aWVyKTsKKyAgICB9CiAKICAgICBJREJFcnJvciBlcnJvcjsKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1EZWxldGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIpKTsKQEAgLTEyMzMsNyArMTI2OSwxMCBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAg
ICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAgIH0KIAog
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFt
ZSkpOwogfQpAQCAtMTMwMyw3MSArMTM0Miw3NCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtUHV0T3JBZGQ6IG1fYmFja2luZ1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKLSAgICAg
ICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgaXMg
aW52YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRkIl9zKTsKLSAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEluZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZDogbV9iYWNraW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMp
OworICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tp
bmcgc3RvcmUgaXMgaW52YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRkIl9zKTsKKyAgICAgICAg
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLCB1c2VkS2V5KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAg
IGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgewot
ICAgICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiT2JqZWN0IHN0b3Jl
IGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBzdG9yZSJfcyk7Ci0gICAgICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1
c2VkS2V5KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGF1dG8qIG9iamVjdFN0
b3JlSW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pIHsKKyAgICAgICAgICAg
IGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJPYmplY3Qgc3RvcmUgY2Fubm90
IGJlIGZvdW5kIGluIHRoZSBiYWNraW5nIHN0b3JlIl9zKTsKKyAgICAgICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2Vk
S2V5KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGJvb2wgdXNlZEtl
eUlzR2VuZXJhdGVkID0gZmFsc2U7Ci0gICAgdWludDY0X3Qga2V5TnVtYmVyOwotICAgIGF1dG8g
Z2VuZXJhdGVkS2V5UmVzZXR0ZXIgPSBXVEY6Om1ha2VTY29wZUV4aXQoW3RoaXMsIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCAma2V5TnVtYmVyLCAmdXNlZEtl
eUlzR2VuZXJhdGVkXSgpIHsKLSAgICAgICAgaWYgKHVzZWRLZXlJc0dlbmVyYXRlZCkKLSAgICAg
ICAgICAgIG1fYmFja2luZ1N0b3JlLT5yZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7Ci0gICAgfSk7
Ci0gICAgaWYgKG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmICFrZXlEYXRhLmlz
VmFsaWQoKSkgewotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51
bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVt
YmVyKTsKKyAgICAgICAgYm9vbCB1c2VkS2V5SXNHZW5lcmF0ZWQgPSBmYWxzZTsKKyAgICAgICAg
dWludDY0X3Qga2V5TnVtYmVyOworICAgICAgICBhdXRvIGdlbmVyYXRlZEtleVJlc2V0dGVyID0g
V1RGOjptYWtlU2NvcGVFeGl0KFt0aGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgJmtleU51bWJlciwgJnVzZWRLZXlJc0dlbmVyYXRlZF0oKSB7CisgICAg
ICAgICAgICBpZiAodXNlZEtleUlzR2VuZXJhdGVkKQorICAgICAgICAgICAgICAgIG1fYmFja2lu
Z1N0b3JlLT5yZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7CisgICAgICAgIH0pOworICAgICAgICBp
ZiAob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYgIWtleURhdGEuaXNWYWxpZCgp
KSB7CisgICAgICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJl
cih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVtYmVy
KTsKKyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJv
ciwgdXNlZEtleSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgdXNlZEtleS5zZXROdW1iZXJWYWx1ZShrZXlOdW1iZXIp
OworICAgICAgICAgICAgdXNlZEtleUlzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICB1c2VkS2V5ID0ga2V5RGF0YTsKKworICAgICAgICBpZiAob3ZlcndyaXRl
TW9kZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUp
IHsKKyAgICAgICAgICAgIGJvb2wga2V5RXhpc3RzOworICAgICAgICAgICAgZXJyb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIs
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdXNlZEtleSwga2V5RXhpc3RzKTsKKyAgICAgICAgICAg
IGlmIChlcnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCisgICAgICAgICAgICAgICAgZXJyb3Ig
PSBJREJFcnJvcihDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9i
amVjdCBzdG9yZSJfcyk7CisKKyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBT
dG9yYWdlIE9wZXJhdGlvbgorICAgICAgICAvLyAuLi5JZiBhIHJlY29yZCBhbHJlYWR5IGV4aXN0
cyBpbiBzdG9yZSAuLi4KKyAgICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0
b3JlIHVzaW5nIHRoZSBzdGVwcyBmb3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBz
dG9yZS4uLgorICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRl
bGV0aW5nIGl0IGZyb20gZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9t
IHRoZSBhcHByb3ByaWF0ZSBpbmRleGVzLgorICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgdXNlZEtleSk7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCB1c2VkS2V5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHVzZWRLZXkuc2V0TnVtYmVyVmFsdWUoa2V5TnVtYmVyKTsKLSAgICAgICAgdXNl
ZEtleUlzR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgdXNlZEtleSA9IGtl
eURhdGE7Ci0KLSAgICBpZiAob3ZlcndyaXRlTW9kZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3Jl
T3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUpIHsKLSAgICAgICAgYm9vbCBrZXlFeGlzdHM7Ci0g
ICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXksIGtleUV4
aXN0cyk7Ci0gICAgICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCi0gICAgICAg
ICAgICBlcnJvciA9IElEQkVycm9yKENvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0
cyBpbiB0aGUgb2JqZWN0IHN0b3JlIl9zKTsKKworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5hZGRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCAqb2JqZWN0U3RvcmVJbmZvLCB1
c2VkS2V5LCBvcmlnaW5hbFJlY29yZFZhbHVlKTsKIAogICAgICAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMy40LjEgT2JqZWN0IFN0b3JlIFN0b3JhZ2UgT3Bl
cmF0aW9uCi0gICAgLy8gLi4uSWYgYSByZWNvcmQgYWxyZWFkeSBleGlzdHMgaW4gc3RvcmUgLi4u
Ci0gICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3JlIHVzaW5nIHRoZSBzdGVw
cyBmb3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9yZS4uLgotICAgIC8vIFRo
aXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcgaXQgZnJvbSBmcm9tIHRo
ZSBvYmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFwcHJvcHJpYXRlIGluZGV4
ZXMuCi0gICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXkpOwotICAgIGlmICghZXJy
b3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFkZFJlY29yZCh0cmFuc2FjdGlv
bklkZW50aWZpZXIsICpvYmplY3RTdG9yZUluZm8sIHVzZWRLZXksIG9yaWdpbmFsUmVjb3JkVmFs
dWUpOworICAgICAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3Jl
T3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0
b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVt
YmVyKQorICAgICAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+bWF5YmVVcGRhdGVLZXlH
ZW5lcmF0b3JOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGtleURhdGEubnVtYmVyKCkpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAg
ICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvciwgdXNlZEtleSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGdlbmVyYXRlZEtl
eVJlc2V0dGVyLnJlbGVhc2UoKTsKICAgICB9Ci0KLSAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYm
IG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IElu
ZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7Ci0KLSAgICBnZW5lcmF0ZWRL
ZXlSZXNldHRlci5yZWxlYXNlKCk7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JB
ZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKIH0KIApAQCAtMTQzNyw3
ICsxNDc5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQodWlu
dDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSCiAgICAgQVNTRVJUKG1fYmFja2lu
Z1N0b3JlKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURCRXJyb3IgZXJyb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJlc3VsdCk7CisgICAgSURCRXJy
b3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9y
ZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgdHlw
ZSwgcmVzdWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNv
cmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQpAQCAtMTQ0OCw5ICsx
NDk0LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCiAgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURC
RXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3Jk
VHlwZSwgcmFuZ2UsIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5nZXRJbmRleFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCByZWNvcmRUeXBlLCByYW5nZSwg
cmVzdWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQpAQCAtMTQ3MSw3ICsxNTIw
LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2
NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUp
OwogCiAgICAgSURCR2V0QWxsUmVzdWx0IHJlc3VsdDsKLSAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxs
UmVjb3Jkc0RhdGEsIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0
QWxsUmVjb3Jkc0RhdGEsIHJlc3VsdCk7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShy
ZXN1bHQpKSk7CiB9CkBAIC0xNTE1LDcgKzE1NjgsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURC
UmUKICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIAogICAgIHVpbnQ2NF90IGNv
dW50OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIs
IGtleVJhbmdlRGF0YSwgY291bnQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+Z2V0Q291bnQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCBjb3VudCk7Cisg
ICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIGNvdW50KSk7CiB9CkBAIC0xNTU1LDcgKzE2MTIsMTEgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lk
ZW50aWZpZXIsIGNvbnN0IEkKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCIp
OwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlKTsKKyAgICBJ
REJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2lu
Z1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdl
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7Cisg
ICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yKSk7CiB9CkBAIC0xNTk2LDcgKzE2NTcsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREIKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybU9wZW5DdXJzb3IiKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAg
SURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGluZm8sIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5m
bywgcmVzdWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vy
c29yLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKIH0KQEAgLTE2MzcsNyAr
MTcwMiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcih1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yIik7CiAKICAgICBJREJH
ZXRSZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPml0
ZXJhdGVDdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBkYXRh
LCByZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdT
dG9yZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZp
ZXIsIGRhdGEsIHJlc3VsdCk7CisgICAgfQogCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAg
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jdXJzb3JQcmVmZXRjaGVzLmFkZChjdXJzb3JJZGVu
dGlmaWVyKTsKQEAgLTE2NTQsMTAgKzE3MjMsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnMK
ICAgICBBU1NFUlQobV9jdXJzb3JQcmVmZXRjaGVzLmNvbnRhaW5zKGN1cnNvcklkZW50aWZpZXIp
KTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVBy
ZWZldGNoQ3Vyc29yIik7CiAKLSAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSB8fCAh
bV9iYWNraW5nU3RvcmUtPnByZWZldGNoQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vy
c29ySWRlbnRpZmllcikpCisgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKICAg
ICAgICAgbV9jdXJzb3JQcmVmZXRjaGVzLnJlbW92ZShjdXJzb3JJZGVudGlmaWVyKTsKLSAgICBl
bHNlCi0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVmZXRjaEN1cnNvciwgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2sp
OworICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5wcmVmZXRjaEN1cnNvcih0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICBtX2N1cnNvclBy
ZWZldGNoZXMucmVtb3ZlKGN1cnNvcklkZW50aWZpZXIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVByZWZldGNoQ3Vyc29yLCB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIpKTsKIH0KIAogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KQpAQCAtMTcyMiw3ICsxODAxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIElEQkVycm9y
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRl
bnRpZmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIH0KICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKQEAgLTE4MTIsNyAr
MTg5NSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlv
bih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtQWJvcnRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdT
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBJREJF
cnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0
b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFib3J0VHJhbnNhY3Rp
b24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB9CiAgICAgcG9zdERhdGFiYXNlVGFza1Jl
cGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKQEAgLTIwMjIsNyArMjEwOSwxMiBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IGNhbGxiYQogewogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlIik7CiAKLSAgICBJ
REJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5iZWdpblRyYW5zYWN0aW9uKGluZm8pOwor
ICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9i
YWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5U
cmFuc2FjdGlvbihpbmZvKTsKKyAgICB9CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1B
Y3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IpKTsKIH0KIApAQCAtMjM1NywyMCArMjQ0OSwyOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
Ojpmb3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIAogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKKyAgICBBU1NFUlQobV9iYWNr
aW5nU3RvcmVMb2NrLmlzSGVsZCgpKTsKICAgICB0cmFuc2FjdGlvbi5zZXRSZXN1bHQobV9iYWNr
aW5nU3RvcmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIo
KSkpOwogICAgIHRyYW5zYWN0aW9uLnNldFN0YXRlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OlN0YXRlOjpBYm9ydGVkKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0
VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCiB7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlTG9jay5pc0hlbGQoKSk7CiAg
ICAgdHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0b3JlLT5jb21taXRUcmFuc2FjdGlv
bih0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiAgICAgdHJhbnNhY3Rpb24uc2V0
U3RhdGUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkNvbW1pdHRlZCk7CiB9
CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpCit2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdXNwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogCisgICAgaWYgKG1faXNTdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2lzU3VzcGVuZGVkID0gdHJ1ZTsKKworICAgIG1fYmFja2luZ1N0b3JlTG9jay5sb2NrKCk7CisK
ICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9pblByb2dyZXNzVHJh
bnNhY3Rpb25zLmtleXMoKSkpIHsKICAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1faW5Qcm9n
cmVzc1RyYW5zYWN0aW9ucy5nZXQoaWRlbnRpZmllcik7CiAgICAgICAgIGFib3J0VHJhbnNhY3Rp
b25Pbk1haW5UaHJlYWQoKnRyYW5zYWN0aW9uKTsKQEAgLTIzOTYsNiArMjQ5NiwxNyBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKQogICAgIH0KIH0K
IAordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVzdW1lKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgaWYgKCFtX2lzU3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAgbV9iYWNraW5nU3RvcmVMb2NrLnVubG9j
aygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBlYzNmYzBjNzNlYTMwZTI0ZTdhMGNlZTU4
ODlmMzk2MWYwY2M0YzI3Li5lYWRiZmZkMjFmMjk3YmRiN2Y4YzQzODU0NTJjYjMzM2IyMTY4ZTI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTE2LDcgKzExNiw4IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaGFyZENsb3NlZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBtX2hhcmRD
bG9zZWRGb3JVc2VyRGVsZXRlOyB9CiAKLSAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9u
cygpOworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZhdGU6
CiAgICAgdm9pZCBoYW5kbGVEYXRhYmFzZU9wZXJhdGlvbnMoKTsKQEAgLTI2OSw2ICsyNzAsNyBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSB7IGZhbHNlIH07
CiAgICAgSURCRXJyb3IgbV9iYWNraW5nU3RvcmVPcGVuRXJyb3I7CisgICAgTG9jayBtX2JhY2tp
bmdTdG9yZUxvY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNr
aW5nU3RvcmU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9kYXRhYmFz
ZUluZm87CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9tb3N0UmVjZW50
RGVsZXRlZERhdGFiYXNlSW5mbzsKQEAgLTMwNiw2ICszMDgsOCBAQCBwcml2YXRlOgogICAgIEhh
c2hTZXQ8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnNvclByZWZldGNoZXM7CiAKICAgICBI
YXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzOwor
CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IElEQlNlcnZlcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384006</attachid>
            <date>2019-11-20 17:13:18 -0800</date>
            <delta_ts>2019-11-20 17:23:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204379-20191120171318.patch</filename>
            <type>text/plain</type>
            <size>45927</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRmN2QyMzE1ZWY3NTZl
NTQxMzdiY2JkYTlmMDQyNDFkYTg4NjU4YS4uYmU3MjcxNjBhNTExN2RkZmVlYjBlNTVjYjBkNjVm
MTc1NjI3YTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE5LTExLTIwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogbG9jay1i
YXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzdXNwZW5zaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQzNzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0OiBJ
bmRleGVkREIuSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6dHJ5U3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6cmVzdW1lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
cmVnaXN0ZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6dW5yZWdpc3RlckRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJldmVy
dEdlbmVyYXRlZEtleU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cHJlZmV0Y2hDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y2xvc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6flVuaXF1ZUlEQkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1TdGFydFZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVs
ZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVh
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3Bl
bkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHJlZmV0Y2hDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1BYm9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1BY3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFu
c2FjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hBY3RpdmVUcmFu
c2FjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oOgorCiAyMDE5LTExLTIwICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nl
b2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBbR1RLXSBBZGQgQU5HTEUgYmFja2VuZCB0byBHVEsg
cG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcAppbmRleCBlNjFkYjhjOTQyOGQ5ODRkYTY0Njk2ZTdjODQyNzg3NDI2OWMy
N2U2Li44OTJlOGZiZmI4ZDNkYzg1MWI3ZTAzODQ5ZTgxZWZlYzAyMTUzYWUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cApAQCAtMTI2LDcgKzEyNiw3IEBAIFVuaXF1ZUlEQkRhdGFiYXNlJiBJREJTZXJ2ZXI6OmdldE9y
Q3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVuCiAgICAgcmV0dXJu
ICp1bmlxdWVJREJEYXRhYmFzZS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3N0ZDo6dW5pcXVlX3B0cjxJREJCYWNr
aW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYgaWRlbnRpZmllciwgTG9jayYgYmFja2luZ1N0b3JlTG9jaykKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMTM0LDcgKzEzNCw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlCiAgICAgaWYgKGRhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZShtX3Nlc3Npb25JRCwg
aWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxTUUxpdGVJREJCYWNraW5nU3Rv
cmU+KG1fc2Vzc2lvbklELCBpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAg
IHJldHVybiBtYWtlVW5pcXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4obV9zZXNzaW9uSUQsIGlk
ZW50aWZpZXIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgYmFja2luZ1N0b3JlTG9jayk7CiB9CiAK
IHZvaWQgSURCU2VydmVyOjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhKQpAQCAtODUzLDE0ICs4NTMsMTEgQEAgdm9pZCBJREJTZXJ2ZXI6OnRyeVN0b3AoU2hv
dWxkRm9yY2VTdG9wIHNob3VsZEZvcmNlU3RvcCkKICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3VzcGVuZEFuZFdhaXQoKTsKLSAgICBp
ZiAoc2hvdWxkRm9yY2VTdG9wID09IFNob3VsZEZvcmNlU3RvcDo6Tm8gJiYgU1FMaXRlRGF0YWJh
c2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotICAgICAgICBDcm9zc1Ro
cmVhZFRhc2tIYW5kbGVyOjpyZXN1bWUoKTsKKyAgICBpZiAoc2hvdWxkRm9yY2VTdG9wID09IFNo
b3VsZEZvcmNlU3RvcDo6Tm8gJiYgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlv
bkluUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwLnZhbHVlcygpKQotICAgICAgICBkYXRh
YmFzZS0+ZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CisgICAgZm9yIChhdXRvJiBkYXRhYmFz
ZSA6IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFzZS0+c3VzcGVuZCgp
OwogfQogCiB2b2lkIElEQlNlcnZlcjo6cmVzdW1lKCkKQEAgLTg2OCw3ICs4NjUsOCBAQCB2b2lk
IElEQlNlcnZlcjo6cmVzdW1lKCkKICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcjo6cmVzdW1lKCk7
CisgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzKQorICAg
ICAgICBkYXRhYmFzZS0+cmVzdW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCmluZGV4IGQzYTIyM2Q5MzJkOTE1OWQ1NDY2NjI5ZjcxN2VmZmI1Nzc0MTNjYWYuLjA0YTli
ODBmYTcxZjZkZDQ1MGMwZGVhNmZiM2YxMmE1ZDkyNDFiZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTEwNiw3ICsx
MDYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+
IGNsb3NlQW5kVGFrZVVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlJik7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGVCYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tp
bmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYs
IExvY2smKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFz
ZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
Rm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMTIzLDYgKzEyMyw5IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9wKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZSgpOwogCisgICAgdm9pZCByZWdpc3RlckRhdGFiYXNl
KFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5h
ZGQoJmRhdGFiYXNlKTsgfQorICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlKFVuaXF1ZUlEQkRh
dGFiYXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5yZW1vdmUoJmRhdGFi
YXNlKTsgfQorCiBwcml2YXRlOgogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYpOwogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKQEAgLTE5
MCw2ICsxOTMsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwog
ICAgIEhhc2hNYXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJlZlB0cjxJREJDb25uZWN0aW9u
VG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50
aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0
YWJhc2VNYXA7CisgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG1fYWxsVW5pcXVlSURC
RGF0YWJhc2VzOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uKj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25zOwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJ
ZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4gbV90cmFuc2FjdGlvbnM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDJhYzBjZTVlYmYzZWI1NWZi
ZjQ3ZjllOWZiMGRkYzNhNTA1MTlhMDkuLjE2NzdiYjk4MDdmMTBmNWUwZmRlMjg3OTU0NDM0MjFm
NTIwZDE0ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yMjksMTIg
KzIyOSwxNCBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVy
bmF0ZSgpCiAgICAgcmV0dXJuIGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nOwogfQogCi1TUUxp
dGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnkpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3RE
aXJlY3RvcnksIExvY2smIGxvY2spCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGF0YWJhc2VSb290RGlyZWN0b3J5
KGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKICAgICAsIG1fc2VyaWFsaXphdGlvbkNvbnRleHQoSURC
U2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQo
c2Vzc2lvbklEKSkKKyAgICAsIG1fbG9jayhsb2NrKQogeworICAgIEFTU0VSVChtX2xvY2suaXNI
ZWxkKCkpOwogICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBmdWxsRGF0YWJhc2VEaXJlY3RvcnlX
aXRoVXBncmFkZSgpOwogfQogCkBAIC04NjcsNiArODY5LDcgQEAgSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYg
aW5mbykKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlz
T3BlbigpKTsKICAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOworICAgIEFTU0VSVChtX2xvY2su
aXNIZWxkKCkpOwogCiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3RyYW5zYWN0aW9ucy5hZGQoaW5m
by5pZGVudGlmaWVyKCksIG51bGxwdHIpOwogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKQEAgLTg5Nyw2ICs5MDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFi
b3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZAogCiAgICAgQVNT
RVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAg
QVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMudGFrZShpZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7CkBAIC05
MTYsNiArOTIwLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjb21taXRUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGkKIAogICAgIEFTU0VSVChtX3Nx
bGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworICAgIEFTU0VSVCht
X2xvY2suaXNIZWxkKCkpOwogCiAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LnRha2UoaWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbikgewpAQCAtOTQxLDYgKzk0
Niw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7
CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlz
SGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rp
b24tPmluUHJvZ3Jlc3MoKSkKQEAgLTk5Miw2ICs5OTgsNyBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdAogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5p
c09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAg
IGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0xMDgz
LDYgKzEwOTAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogCiAgICAgQVNTRVJUKG1fc3Fs
aXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1f
bG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRy
YW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0xMTE1LDYgKzExMjMsNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cgogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3Nx
bGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBh
dXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZp
ZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkp
CkBAIC0xMTU1LDYgKzExNjQsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNy
ZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgIExPRyhJ
bmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4IC0gT2JqZWN0U3Rv
cmUgJSIgUFJJdTY0ICIsIEluZGV4ICUiIFBSSXU2NCwgaW5mby5vYmplY3RTdG9yZUlkZW50aWZp
ZXIoKSwgaW5mby5pZGVudGlmaWVyKCkpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBB
U1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkp
OwogCiAgICAgYXV0byogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rp
b25JZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Q
cm9ncmVzcygpKQpAQCAtMTM0Myw2ICsxMzUzLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMK
IAogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVu
KCkpOworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogCiAgICAgYXV0byogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBpZiAo
IXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQpAQCAtMTM4OCw2ICsx
Mzk5LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKIAogICAgIEFTU0VSVChtX3NxbGl0ZURC
KTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworICAgIEFTU0VSVChtX2xvY2su
aXNIZWxkKCkpOwogCiAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRhYmFzZUluZm8t
PmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAg
aWYgKCFvYmplY3RTdG9yZUluZm8pCkBAIC0xNDI5LDYgKzE0NDEsNyBAQCBJREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaQogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0
ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBrZXlF
eGlzdHMgPSBmYWxzZTsKIApAQCAtMTYwNCw2ICsxNjE3LDcgQEAgSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWMKIAogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+
aXNPcGVuKCkpOworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogCiAgICAgYXV0byogdHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAg
ICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQpAQCAtMTcy
Niw2ICsxNzQwLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICBBU1NFUlQobV9zcWxp
dGVEQi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVCh2YWx1ZS5kYXRhKCkuZGF0YSgpKTsKICAgICBB
U1NFUlQodmFsdWUuYmxvYlVSTHMoKS5zaXplKCkgPT0gdmFsdWUuYmxvYkZpbGVQYXRocygpLnNp
emUoKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlm
ICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0xODg2LDYg
KzE5MDEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogCiAgICAgQVNTRVJUKG1fc3FsaXRl
REIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9j
ay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5z
YWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0yMDE3LDYgKzIwMzMsOCBAQCBJREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aQogCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEFsbFJlY29y
ZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgSURCR2V0QWxsUmVz
dWx0JiByZXN1bHQpCiB7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CisKICAgICByZXR1
cm4gZ2V0QWxsUmVjb3Jkc0RhdGEuaW5kZXhJZGVudGlmaWVyID8gZ2V0QWxsSW5kZXhSZWNvcmRz
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxsUmVjb3Jkc0RhdGEsIHJlc3VsdCkgOiBnZXRB
bGxPYmplY3RTdG9yZVJlY29yZHModHJhbnNhY3Rpb25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRz
RGF0YSwgcmVzdWx0KTsKIH0KIApAQCAtMjIwMSw2ICsyMjE5LDcgQEAgSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpnZXRJbmRleFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW4KIAogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVE
Qi0+aXNPcGVuKCkpOworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogCiAgICAgYXV0byog
dHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsK
ICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQpAQCAt
MjMwMiw2ICsyMzIxLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRDb3Vu
dChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW8KICAgICBMT0coSW5kZXhl
ZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRDb3VudCAtIG9iamVjdCBzdG9yZSAlIiBQ
Ukl1NjQsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwog
ICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hl
bGQoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9u
LT5pblByb2dyZXNzKCkpCkBAIC0yNDIwLDYgKzI0NDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdAogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5p
c09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAg
IGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0yNDQ4
LDYgKzI0NjksNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJldmVydEdlbmVy
YXRlZEtleU51bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aQogCiAgICAgQVNTRVJUKG1fc3Fs
aXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1f
bG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25z
LmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRy
YW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0yNDkzLDYgKzI1MTUsNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6Om9wZW5DdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdAogewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9z
cWxpdGVEQi0+aXNPcGVuKCkpOworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogCiAgICAg
YXV0byogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlm
aWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygp
KQpAQCAtMjUxOCw2ICsyNTQxLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpp
dGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnMKIAogICAgIEFT
U0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworICAg
IEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogCiAgICAgYXV0byogY3Vyc29yID0gbV9jdXJzb3Jz
LmdldChjdXJzb3JJZGVudGlmaWVyKTsKICAgICBpZiAoIWN1cnNvcikgewpAQCAtMjU2MSw2ICsy
NTg1LDcgQEAgYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnByZWZldGNoQ3Vyc29yKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3QKIAogICAgIEFTU0VSVChtX3NxbGl0ZURC
KTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworICAgIEFTU0VSVChtX2xvY2su
aXNIZWxkKCkpOwogCiAgICAgYXV0byogY3Vyc29yID0gbV9jdXJzb3JzLmdldChjdXJzb3JJZGVu
dGlmaWVyKTsKICAgICBpZiAoIWN1cnNvciB8fCAhY3Vyc29yLT50cmFuc2FjdGlvbigpIHx8ICFj
dXJzb3ItPnRyYW5zYWN0aW9uKCktPmluUHJvZ3Jlc3MoKSkKQEAgLTI1NzksNiArMjYwNCw3IEBA
IElEQk9iamVjdFN0b3JlSW5mbyogU1FMaXRlSURCQmFja2luZ1N0b3JlOjppbmZvRm9yT2JqZWN0
U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvCiAKIHZvaWQgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVCYWNraW5nU3RvcmUoKQogeworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogICAg
IFN0cmluZyBkYkZpbGVuYW1lID0gZnVsbERhdGFiYXNlUGF0aCgpOwogCiAgICAgTE9HKEluZGV4
ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlIGRlbGV0aW5n
IGZpbGUgJyVzJyBvbiBkaXNrIiwgZGJGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKQEAgLTI2NDks
NiArMjY3NSw3IEBAIFNRTGl0ZVN0YXRlbWVudCogU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjYWNo
ZWRTdGF0ZW1lbnQoU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTCiAKIHZvaWQgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpjbG9zZSgpCiB7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAgICAg
Y2xvc2VTUUxpdGVEQigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXgg
ZGMxZjljMWU5MDg5MjE4MTViMDc5ODkyMWE0ZWI0M2U0ZWYxOWZjNy4uMjQyZmMzYmFmNTY4NWRk
ZTVmNTJiNzBiMDU5NTJmY2IzMjI0ZTBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aApAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBTUUxpdGVJREJDdXJzb3I7CiBjbGFzcyBTUUxpdGVJ
REJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlIHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VSb290RGlyZWN0b3J5KTsKKyAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VSb290RGlyZWN0b3J5LCBMb2NrJik7CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZSgpIGZpbmFsOwogCkBAIC0yMTEsNiArMjExLDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9k
YXRhYmFzZURpcmVjdG9yeTsKIAogICAgIFJlZjxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4gbV9z
ZXJpYWxpemF0aW9uQ29udGV4dDsKKworICAgIExvY2smIG1fbG9jazsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggZmYwOTBmNzZi
YjVkNDI4MzkyNjU2MTg4ZWZhN2ZmMWM5NDViMWM5Yy4uYWY3MjY3YTM0MGU4NWRiMWUzZWY1ZDY2
OGQxYjAwMjlmMTA2NDNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0xMjIsNiAr
MTIyLDcgQEAgVW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKElEQlNlcnZlciYg
c2VydmVyLCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWYKICAgICAsIG1faWRlbnRpZmllcihpZGVu
dGlmaWVyKQogICAgICwgbV9vcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6Om9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXJGaXJlZCkKIHsKKyAg
ICBtX3NlcnZlci0+cmVnaXN0ZXJEYXRhYmFzZSgqdGhpcyk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJEYXRhYmFzZSgpICglcCkgJXMiLCB0aGlzLCBt
X2lkZW50aWZpZXIuZGVidWdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIH0KIApAQCAtMTM5LDYg
KzE0MCw4IEBAIFVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UoKQogICAgIFJF
TEVBU0VfQVNTRVJUKG1fZGF0YWJhc2VRdWV1ZS5pc0tpbGxlZCgpKTsKICAgICBSRUxFQVNFX0FT
U0VSVChtX2RhdGFiYXNlUmVwbHlRdWV1ZS5pc0tpbGxlZCgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghbV9iYWNraW5nU3RvcmUpOworCisgICAgbV9zZXJ2ZXItPnVucmVnaXN0ZXJEYXRhYmFzZSgq
dGhpcyk7CiB9CiAKIGNvbnN0IElEQkRhdGFiYXNlSW5mbyYgVW5pcXVlSURCRGF0YWJhc2U6Omlu
Zm8oKSBjb25zdApAQCAtMzc4LDEzICszODEsMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkK
ICAgICB1aW50NjRfdCBkZWxldGVkVmVyc2lvbiA9IDA7CiAKICAgICBpZiAobV9iYWNraW5nU3Rv
cmUpIHsKLSAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotCi0g
ICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgeworICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgICAgIG1fYmFj
a2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0
b3JlID0gbnVsbHB0cjsKKyAgICAgICAgfQogICAgICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRz
U2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CiAgICAgICAgIG1fYmFja2luZ1N0b3Jl
SXNFcGhlbWVyYWwgPSBmYWxzZTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGJhY2tpbmdT
dG9yZSA9IG1fc2VydmVyLT5jcmVhdGVCYWNraW5nU3RvcmUoaWRlbnRpZmllcik7CisgICAgICAg
IGF1dG8gYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlm
aWVyLCBtX2JhY2tpbmdTdG9yZUxvY2spOwogCiAgICAgICAgIElEQkRhdGFiYXNlSW5mbyBkYXRh
YmFzZUluZm87CiAgICAgICAgIGF1dG8gZXJyb3IgPSBiYWNraW5nU3RvcmUtPmdldE9yRXN0YWJs
aXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CkBAIC00MDMsOCArNDA4LDExIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3Jl
KCkKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRi
KSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNraW5nU3Rv
cmUiKTsKIAotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9iYWNraW5nU3RvcmUt
PmRlbGV0ZUJhY2tpbmdTdG9yZSgpOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAg
ICAgICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOworICAgIH0KIAogICAg
IHNodXRkb3duRm9yQ2xvc2UoKTsKIH0KQEAgLTQyOCwxMCArNDM2LDExIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UoKQogCiAgICAgTE9HKEluZGV4ZWREQiwgIihk
YikgVW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UiKTsKIAotICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZSkKKyAgICBpZiAobV9iYWNraW5nU3RvcmUpIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNs
b3NlKCk7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgIG1fYmFja2lu
Z1N0b3JlID0gbnVsbHB0cjsKKyAgICB9CiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVs
dGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwogICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVy
YWwgPSBmYWxzZTsKIApAQCAtNjcwLDcgKzY3OSwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtU3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rp
bwogewogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
U3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24iKTsKIAotICAgIElEQkVycm9yIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPmJlZ2luVHJhbnNhY3Rpb24oaW5mbyk7CisgICAgSURCRXJyb3IgZXJy
b3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2sp
OworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5iZWdpblRyYW5zYWN0aW9uKGluZm8p
OworICAgIH0KKwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVN0YXJ0VmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uLCBlcnJvcikpOwogfQogCkBAIC04MjcsMTIgKzg0MSwxNiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmllcgogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVuQmFja2luZ1N0b3JlICglcCkiLCB0aGlzKTsKIAogICAgIEFTU0VSVCghbV9iYWNr
aW5nU3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdT
dG9yZShpZGVudGlmaWVyKTsKLSAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3Vz
VHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNh
Y3Rpb25zKCk7Ci0gICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IG1fYmFja2luZ1N0b3Jl
LT5pc0VwaGVtZXJhbCgpOwogCiAgICAgSURCRGF0YWJhc2VJbmZvIGRhdGFiYXNlSW5mbzsKLSAg
ICBhdXRvIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZv
KGRhdGFiYXNlSW5mbyk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9y
ZSA9IG1fc2VydmVyLT5jcmVhdGVCYWNraW5nU3RvcmUoaWRlbnRpZmllciwgbV9iYWNraW5nU3Rv
cmVMb2NrKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5z
YWN0aW9ucyA9IG1fYmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9u
cygpOworICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNraW5nU3RvcmUt
PmlzRXBoZW1lcmFsKCk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0
YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7CisgICAgfQogCiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRPcGVuQmFja2luZ1N0b3JlLCBkYXRhYmFzZUluZm8sIGVycm9yLCAgdGFza0lkZW50
aWZpZXIpKTsKIH0KQEAgLTg5Miw3ICs5MTAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28K
ICAgICB9CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIElEQkVycm9yIGVycm9y
ID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgaW5mbyk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5jcmVhdGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8pOworICAg
IH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLCBpbmZvKSk7CiB9CkBAIC05NDQsNyArOTY2LDExIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSIpOwogCiAgICAgQVNTRVJUKG1fYmFj
a2luZ1N0b3JlKTsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVP
YmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxl
dGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmll
cik7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllcikpOwog
fQpAQCAtMTAwMSw3ICsxMDI3LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1S
ZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAgfQog
CiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+cmVuYW1l
T2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IG5ld05hbWUpOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3Rv
cmVMb2NrKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZU9iamVjdFN0b3JlKHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICB9
CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lKSk7CiB9
CkBAIC0xMDQ2LDcgKzEwNzUsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNs
ZWFyT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb24KICAgICBMT0co
SW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3Rv
cmUiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgSURCRXJyb3IgZXJyb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIs
IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1DbGVhck9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKSk7CiB9
CkBAIC0xMDk2LDE0ICsxMTI5LDE3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
cmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAKICAgICBJ
REJFcnJvciBlcnJvcjsKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIGlmICghbV9i
YWNraW5nU3RvcmUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAg
LSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4OiBtX2JhY2tpbmdTdG9yZSBp
cyBudWxsIiwgdGhpcyk7Ci0gICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJy
b3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwgdG8gY3JlYXRlIGluZGV4Il9z
KTsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKLSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgaWYgKCFt
X2JhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERC
LCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4OiBtX2JhY2tpbmdT
dG9yZSBpcyBudWxsIiwgdGhpcyk7CisgICAgICAgICAgICBlcnJvciA9IElEQkVycm9yKEludmFs
aWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBpcyBpbnZhbGlkIGZvciBjYWxsIHRvIGNyZWF0
ZSBpbmRleCJfcyk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJ
bmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgaW5mbykpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlu
ZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbyk7CiAgICAgfQogCi0gICAgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvKTsK
ICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgaW5mbykpOwogfQogCkBAIC0xMTY1LDcgKzEyMDEsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSUQKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybURlbGV0ZUluZGV4Iik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwot
ICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIpOwor
ICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9i
YWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRl
SW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4
SWRlbnRpZmllcik7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNy
b3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRl
SW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
aW5kZXhJZGVudGlmaWVyKSk7CiB9CkBAIC0xMjI5LDcgKzEyNjksMTAgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSUQKICAgICB9CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1f
YmFja2luZ1N0b3JlLT5yZW5hbWVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIG1fYmFja2lu
Z1N0b3JlLT5yZW5hbWVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKTsKKyAgICB9CiAKICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KQEAg
LTEyOTksNzEgKzEzNDIsNzQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9y
QWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1
dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7Ci0gICAgICAgIGVycm9yID0g
SURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9y
IGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tp
bmdTdG9yZUxvY2spOworICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUHV0T3JBZGQ6IG1fYmFja2luZ1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKKyAgICAgICAg
ICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlz
IGludmFsaWQgZm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7CisgICAgICAgICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNl
ZEtleSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBhdXRvKiBvYmpl
Y3RTdG9yZUluZm8gPSBtX2JhY2tpbmdTdG9yZS0+aW5mb0Zvck9iamVjdFN0b3JlKG9iamVjdFN0
b3JlSWRlbnRpZmllcik7Ci0gICAgaWYgKCFvYmplY3RTdG9yZUluZm8pIHsKLSAgICAgICAgZXJy
b3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIk9iamVjdCBzdG9yZSBjYW5ub3QgYmUg
Zm91bmQgaW4gdGhlIGJhY2tpbmcgc3RvcmUiX3MpOwotICAgICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBt
X2JhY2tpbmdTdG9yZS0+aW5mb0Zvck9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CisgICAgICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKSB7CisgICAgICAgICAgICBlcnJvciA9IElE
QkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiT2JqZWN0IHN0b3JlIGNhbm5vdCBiZSBmb3VuZCBp
biB0aGUgYmFja2luZyBzdG9yZSJfcyk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBib29sIHVzZWRLZXlJc0dlbmVyYXRl
ZCA9IGZhbHNlOwotICAgIHVpbnQ2NF90IGtleU51bWJlcjsKLSAgICBhdXRvIGdlbmVyYXRlZEtl
eVJlc2V0dGVyID0gV1RGOjptYWtlU2NvcGVFeGl0KFt0aGlzLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgJmtleU51bWJlciwgJnVzZWRLZXlJc0dlbmVyYXRl
ZF0oKSB7Ci0gICAgICAgIGlmICh1c2VkS2V5SXNHZW5lcmF0ZWQpCi0gICAgICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlOdW1iZXIpOwotICAgIH0pOwotICAgIGlmIChv
YmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiAha2V5RGF0YS5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2VuZXJhdGVLZXlOdW1iZXIodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7CisgICAg
ICAgIGJvb2wgdXNlZEtleUlzR2VuZXJhdGVkID0gZmFsc2U7CisgICAgICAgIHVpbnQ2NF90IGtl
eU51bWJlcjsKKyAgICAgICAgYXV0byBnZW5lcmF0ZWRLZXlSZXNldHRlciA9IFdURjo6bWFrZVNj
b3BlRXhpdChbdGhpcywgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsICZrZXlOdW1iZXIsICZ1c2VkS2V5SXNHZW5lcmF0ZWRdKCkgeworICAgICAgICAgICAgaWYg
KHVzZWRLZXlJc0dlbmVyYXRlZCkKKyAgICAgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmV2
ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBrZXlOdW1iZXIpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKG9iamVjdFN0
b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmICFrZXlEYXRhLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2VuZXJhdGVLZXlOdW1iZXIodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7CisgICAgICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHVzZWRLZXkuc2V0TnVtYmVyVmFsdWUoa2V5TnVtYmVyKTsKKyAgICAgICAg
ICAgIHVzZWRLZXlJc0dlbmVyYXRlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgdXNlZEtleSA9IGtleURhdGE7CisKKyAgICAgICAgaWYgKG92ZXJ3cml0ZU1vZGUgPT0gSW5k
ZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlKSB7CisgICAgICAg
ICAgICBib29sIGtleUV4aXN0czsKKyAgICAgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUt
PmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVzZWRLZXksIGtleUV4aXN0cyk7CisgICAgICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkgJiYga2V5RXhpc3RzKQorICAgICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3Io
Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUi
X3MpOworCisgICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIHVzZWRLZXkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyAzLjQuMSBPYmplY3QgU3RvcmUgU3RvcmFnZSBPcGVy
YXRpb24KKyAgICAgICAgLy8gLi4uSWYgYSByZWNvcmQgYWxyZWFkeSBleGlzdHMgaW4gc3RvcmUg
Li4uCisgICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBzdG9yZSB1c2luZyB0
aGUgc3RlcHMgZm9yIGRlbGV0aW5nIHJlY29yZHMgZnJvbSBhbiBvYmplY3Qgc3RvcmUuLi4KKyAg
ICAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBmb3JtYWxseSBkZWxldGluZyBpdCBm
cm9tIGZyb20gdGhlIG9iamVjdCBzdG9yZSBhbHNvIHJlbW92ZXMgaXQgZnJvbSB0aGUgYXBwcm9w
cmlhdGUgaW5kZXhlcy4KKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFu
Z2UodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXkp
OwogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJh
c2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtl
eSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1
c2VkS2V5LnNldE51bWJlclZhbHVlKGtleU51bWJlcik7Ci0gICAgICAgIHVzZWRLZXlJc0dlbmVy
YXRlZCA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAgICAgIHVzZWRLZXkgPSBrZXlEYXRhOwotCi0g
ICAgaWYgKG92ZXJ3cml0ZU1vZGUgPT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGU6Ok5vT3ZlcndyaXRlKSB7Ci0gICAgICAgIGJvb2wga2V5RXhpc3RzOwotICAgICAgICBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2VkS2V5LCBrZXlFeGlzdHMpOwotICAg
ICAgICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYga2V5RXhpc3RzKQotICAgICAgICAgICAgZXJyb3Ig
PSBJREJFcnJvcihDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9i
amVjdCBzdG9yZSJfcyk7CisKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YWRkUmVj
b3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgKm9iamVjdFN0b3JlSW5mbywgdXNlZEtleSwgb3Jp
Z2luYWxSZWNvcmRWYWx1ZSk7CiAKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAg
ICAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgIH0KIAotICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBTdG9yYWdlIE9wZXJhdGlvbgotICAg
IC8vIC4uLklmIGEgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGluIHN0b3JlIC4uLgotICAgIC8vIHRo
ZW4gcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBzdG9yZSB1c2luZyB0aGUgc3RlcHMgZm9yIGRlbGV0
aW5nIHJlY29yZHMgZnJvbSBhbiBvYmplY3Qgc3RvcmUuLi4KLSAgICAvLyBUaGlzIGlzIGltcG9y
dGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0aW5nIGl0IGZyb20gZnJvbSB0aGUgb2JqZWN0IHN0
b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRoZSBhcHByb3ByaWF0ZSBpbmRleGVzLgotICAgIGVy
cm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2VkS2V5KTsKLSAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
ICAgIGlmIChvdmVyd3JpdGVNb2RlICE9IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlOjpPdmVyd3JpdGVGb3JDdXJzb3IgJiYgb2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50
KCkgJiYga2V5RGF0YS50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXIpCisgICAg
ICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51
bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0
YS5udW1iZXIoKSk7CiAKLSAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5hZGRSZWNvcmQodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCAqb2JqZWN0U3RvcmVJbmZvLCB1c2VkS2V5LCBvcmlnaW5hbFJl
Y29yZFZhbHVlKTsKLQotICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVz
ZWRLZXkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBnZW5lcmF0ZWRLZXlSZXNldHRlci5y
ZWxlYXNlKCk7CiAgICAgfQotCi0gICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9y
ZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVkREI6Oktl
eVR5cGU6Ok51bWJlcikKLSAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+bWF5YmVVcGRh
dGVLZXlHZW5lcmF0b3JOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGtleURhdGEubnVtYmVyKCkpOwotCi0gICAgZ2VuZXJhdGVkS2V5UmVzZXR0ZXIu
cmVsZWFzZSgpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CiB9CiAKQEAgLTE0MzMsNyArMTQ3OSwxMSBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uc3QgSURCUgogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7CiAK
ICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRp
Zmllciwga2V5UmFuZ2VEYXRhLCB0eXBlLCByZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOwor
ICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAg
ICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJlc3VsdCk7
CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKIH0KQEAgLTE0NDQsOSArMTQ5NCwxMiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtR2V0SW5kZXhSZWNvcmQiKTsKIAogICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZSk7Ci0KICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVycm9y
ID0gbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIHJlY29yZFR5cGUsIHJhbmdl
LCByZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdT
dG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlwZSwgcmFuZ2UsIHJlc3VsdCk7Cisg
ICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKIH0KQEAgLTE0NjcsNyArMTUyMCwxMSBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0CiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKIAogICAgIElE
QkdldEFsbFJlc3VsdCByZXN1bHQ7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+Z2V0QWxsUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdldEFsbFJlY29yZHNEYXRh
LCByZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdT
dG9yZS0+Z2V0QWxsUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdldEFsbFJlY29yZHNE
YXRhLCByZXN1bHQpOworICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldEFs
bFJlY29yZHMsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIFdURk1vdmUocmVzdWx0KSkpOwog
fQpAQCAtMTUxMSw3ICsxNTY4LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRDb3VudCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgQVNT
RVJUKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAKICAgICB1aW50NjRfdCBjb3VudDsKLSAgICBJ
REJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRDb3VudCh0cmFuc2FjdGlvbklkZW50
aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBrZXlSYW5nZURh
dGEsIGNvdW50KTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmdldENvdW50KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgY291bnQpOworICAgIH0KIAogICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50LCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCBjb3VudCkpOwogfQpAQCAtMTU1MSw3ICsxNjEyLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBj
b25zdCBJCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVSZWNvcmQiKTsKIAotICAgIElE
QkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7CisgICAgSURCRXJyb3IgZXJy
b3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2sp
OworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOworICAgIH0KIAogICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvcikpOwogfQpAQCAtMTU5Miw3ICsxNjU3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3Qg
SURCCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1P
cGVuQ3Vyc29yIik7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVy
cm9yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5DdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBp
bmZvLCByZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tp
bmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8sIHJlc3VsdCk7
CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvciwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KSk7CiB9CkBAIC0xNjMzLDcgKzE3MDIsMTEgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0X3QgY2Fs
bGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0IHJl
c3VsdDsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29y
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vyc29ySWRlbnRpZmllciwgZGF0YSwgcmVzdWx0KTsK
KyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
YmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPml0ZXJh
dGVDdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBkYXRhLCBy
ZXN1bHQpOworICAgIH0KIAogICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fY3Vyc29yUHJlZmV0Y2hlcy5hZGQoY3Vyc29ySWRlbnRpZmllcik7CkBA
IC0xNjUwLDEwICsxNzIzLDIwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVm
ZXRjaEN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zCiAgICAgQVNTRVJU
KG1fY3Vyc29yUHJlZmV0Y2hlcy5jb250YWlucyhjdXJzb3JJZGVudGlmaWVyKSk7CiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVmZXRjaEN1cnNv
ciIpOwogCi0gICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUgfHwgIW1fYmFja2luZ1N0
b3JlLT5wcmVmZXRjaEN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZp
ZXIpKQorICAgIGlmIChtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKSB7CiAgICAgICAgIG1fY3Vy
c29yUHJlZmV0Y2hlcy5yZW1vdmUoY3Vyc29ySWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUHJlZmV0Y2hDdXJzb3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y3Vyc29ySWRlbnRpZmllcikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHsK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZS0+cHJlZmV0Y2hDdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjdXJzb3JJZGVudGlmaWVyKSkgeworICAgICAgICAgICAgbV9jdXJzb3JQcmVmZXRjaGVzLnJl
bW92ZShjdXJzb3JJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVmZXRjaEN1cnNvciwgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyKSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OmRpZFBlcmZvcm1JdGVyYXRlQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkKQEAgLTE3
MTgsNyArMTgwMSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJh
bnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5s
b2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOwor
ICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9i
YWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0
VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB9CiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwogfQogCkBAIC0xODA4LDcgKzE4OTUsMTEgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyLCBjb24KICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJh
bnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5hYm9y
dFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOwor
ICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0
aW9uSWRlbnRpZmllcik7CisgICAgfQogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUFib3J0
VHJhbnNhY3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikpOwogfQogCkBAIC0yMDE4LDcgKzIxMDksMTIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUFjdGl2YXRlVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSh1aW50NjRfdCBjYWxs
YmEKIHsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUFjdGl2YXRlVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSIpOwogCi0gICAgSURCRXJyb3IgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFuc2FjdGlvbihpbmZvKTsKKyAgICBJREJFcnJv
ciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3Jl
TG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmJlZ2luVHJhbnNhY3Rpb24o
aW5mbyk7CisgICAgfQorCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQWN0aXZhdGVUcmFu
c2FjdGlvbkluQmFja2luZ1N0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yKSk7CiB9CiAK
QEAgLTIzNTMsMjAgKzI0NDksMjggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJy
b3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiAKIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlTG9j
ay5pc0hlbGQoKSk7CiAgICAgdHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0b3JlLT5h
Ym9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKICAgICB0
cmFuc2FjdGlvbi5zZXRTdGF0ZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpTdGF0ZTo6
QWJvcnRlZCk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9u
T25NYWluVGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQog
eworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZUxvY2suaXNIZWxkKCkpOwogICAgIHRyYW5zYWN0
aW9uLnNldFJlc3VsdChtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSkpOwogICAgIHRyYW5zYWN0aW9uLnNldFN0YXRlKFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpDb21taXR0ZWQpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKQordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6c3VzcGVuZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAor
ICAgIGlmIChtX2lzU3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc1N1c3BlbmRl
ZCA9IHRydWU7CisKKyAgICBtX2JhY2tpbmdTdG9yZUxvY2subG9jaygpOworCiAgICAgZm9yIChh
dXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5r
ZXlzKCkpKSB7CiAgICAgICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX2luUHJvZ3Jlc3NUcmFuc2Fj
dGlvbnMuZ2V0KGlkZW50aWZpZXIpOwogICAgICAgICBhYm9ydFRyYW5zYWN0aW9uT25NYWluVGhy
ZWFkKCp0cmFuc2FjdGlvbik7CkBAIC0yMzkyLDYgKzI0OTYsMTggQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6ZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCkKICAgICB9CiB9CiAKK3ZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KworICAgIGlmICghbV9pc1N1c3BlbmRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1N1
c3BlbmRlZCA9IGZhbHNlOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZUxvY2suaXNIZWxkKCkp
OworICAgIG1fYmFja2luZ1N0b3JlTG9jay51bmxvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SURCU2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgK
aW5kZXggZWMzZmMwYzczZWEzMGUyNGU3YTBjZWU1ODg5ZjM5NjFmMGNjNGMyNy4uZWFkYmZmZDIx
ZjI5N2JkYjdmOGM0Mzg1NDUyY2IzMzNiMjE2OGUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgK
QEAgLTExNiw3ICsxMTYsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZTsgfQogCi0g
ICAgdm9pZCBmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKTsKKyAgICB2b2lkIHN1c3BlbmQoKTsK
KyAgICB2b2lkIHJlc3VtZSgpOwogCiBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlRGF0YWJhc2VP
cGVyYXRpb25zKCk7CkBAIC0yNjksNiArMjcwLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9p
c09wZW5pbmdCYWNraW5nU3RvcmUgeyBmYWxzZSB9OwogICAgIElEQkVycm9yIG1fYmFja2luZ1N0
b3JlT3BlbkVycm9yOworICAgIExvY2sgbV9iYWNraW5nU3RvcmVMb2NrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IG1fZGF0YWJhc2VJbmZvOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJREJEYXRhYmFzZUluZm8+IG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm87CkBAIC0z
MDYsNiArMzA4LDggQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PElEQlJlc291cmNlSWRlbnRpZmll
cj4gbV9jdXJzb3JQcmVmZXRjaGVzOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+
IG1fcGVuZGluZ1NwYWNlSW5jcmVhc2VUYXNrczsKKworICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7
IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384007</attachid>
            <date>2019-11-20 17:23:54 -0800</date>
            <delta_ts>2019-11-21 09:15:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204379-20191120172353.patch</filename>
            <type>text/plain</type>
            <size>45935</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRmN2QyMzE1ZWY3NTZl
NTQxMzdiY2JkYTlmMDQyNDFkYTg4NjU4YS4uYmU3MjcxNjBhNTExN2RkZmVlYjBlNTVjYjBkNjVm
MTc1NjI3YTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE5LTExLTIwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogbG9jay1i
YXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzdXNwZW5zaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQzNzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0OiBJ
bmRleGVkREIuSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6dHJ5U3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6cmVzdW1lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
cmVnaXN0ZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6dW5yZWdpc3RlckRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJldmVy
dEdlbmVyYXRlZEtleU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cHJlZmV0Y2hDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y2xvc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6flVuaXF1ZUlEQkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1TdGFydFZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVs
ZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVh
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3Bl
bkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHJlZmV0Y2hDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1BYm9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1BY3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFu
c2FjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hBY3RpdmVUcmFu
c2FjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oOgorCiAyMDE5LTExLTIwICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nl
b2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBbR1RLXSBBZGQgQU5HTEUgYmFja2VuZCB0byBHVEsg
cG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcAppbmRleCBlNjFkYjhjOTQyOGQ5ODRkYTY0Njk2ZTdjODQyNzg3NDI2OWMy
N2U2Li44OTJlOGZiZmI4ZDNkYzg1MWI3ZTAzODQ5ZTgxZWZlYzAyMTUzYWUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cApAQCAtMTI2LDcgKzEyNiw3IEBAIFVuaXF1ZUlEQkRhdGFiYXNlJiBJREJTZXJ2ZXI6OmdldE9y
Q3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVuCiAgICAgcmV0dXJu
ICp1bmlxdWVJREJEYXRhYmFzZS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3N0ZDo6dW5pcXVlX3B0cjxJREJCYWNr
aW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYgaWRlbnRpZmllciwgTG9jayYgYmFja2luZ1N0b3JlTG9jaykKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMTM0LDcgKzEzNCw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlCiAgICAgaWYgKGRhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZShtX3Nlc3Npb25JRCwg
aWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxTUUxpdGVJREJCYWNraW5nU3Rv
cmU+KG1fc2Vzc2lvbklELCBpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAg
IHJldHVybiBtYWtlVW5pcXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4obV9zZXNzaW9uSUQsIGlk
ZW50aWZpZXIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgYmFja2luZ1N0b3JlTG9jayk7CiB9CiAK
IHZvaWQgSURCU2VydmVyOjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhKQpAQCAtODUzLDE0ICs4NTMsMTEgQEAgdm9pZCBJREJTZXJ2ZXI6OnRyeVN0b3AoU2hv
dWxkRm9yY2VTdG9wIHNob3VsZEZvcmNlU3RvcCkKICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3VzcGVuZEFuZFdhaXQoKTsKLSAgICBp
ZiAoc2hvdWxkRm9yY2VTdG9wID09IFNob3VsZEZvcmNlU3RvcDo6Tm8gJiYgU1FMaXRlRGF0YWJh
c2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotICAgICAgICBDcm9zc1Ro
cmVhZFRhc2tIYW5kbGVyOjpyZXN1bWUoKTsKKyAgICBpZiAoc2hvdWxkRm9yY2VTdG9wID09IFNo
b3VsZEZvcmNlU3RvcDo6Tm8gJiYgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlv
bkluUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwLnZhbHVlcygpKQotICAgICAgICBkYXRh
YmFzZS0+ZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CisgICAgZm9yIChhdXRvJiBkYXRhYmFz
ZSA6IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFzZS0+c3VzcGVuZCgp
OwogfQogCiB2b2lkIElEQlNlcnZlcjo6cmVzdW1lKCkKQEAgLTg2OCw3ICs4NjUsOCBAQCB2b2lk
IElEQlNlcnZlcjo6cmVzdW1lKCkKICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcjo6cmVzdW1lKCk7
CisgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzKQorICAg
ICAgICBkYXRhYmFzZS0+cmVzdW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCmluZGV4IGQzYTIyM2Q5MzJkOTE1OWQ1NDY2NjI5ZjcxN2VmZmI1Nzc0MTNjYWYuLjA0YTli
ODBmYTcxZjZkZDQ1MGMwZGVhNmZiM2YxMmE1ZDkyNDFiZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTEwNiw3ICsx
MDYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+
IGNsb3NlQW5kVGFrZVVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlJik7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGVCYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tp
bmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYs
IExvY2smKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFz
ZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
Rm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMTIzLDYgKzEyMyw5IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9wKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZSgpOwogCisgICAgdm9pZCByZWdpc3RlckRhdGFiYXNl
KFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5h
ZGQoJmRhdGFiYXNlKTsgfQorICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlKFVuaXF1ZUlEQkRh
dGFiYXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5yZW1vdmUoJmRhdGFi
YXNlKTsgfQorCiBwcml2YXRlOgogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYpOwogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKQEAgLTE5
MCw2ICsxOTMsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwog
ICAgIEhhc2hNYXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJlZlB0cjxJREJDb25uZWN0aW9u
VG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50
aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0
YWJhc2VNYXA7CisgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG1fYWxsVW5pcXVlSURC
RGF0YWJhc2VzOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uKj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25zOwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJ
ZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4gbV90cmFuc2FjdGlvbnM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDJhYzBjZTVlYmYzZWI1NWZi
ZjQ3ZjllOWZiMGRkYzNhNTA1MTlhMDkuLjIwNDFkMzE5N2I2OGJkMjgwMjNjZDJjOGZjNGQ5Y2Zi
ZjFmODljNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yMjksMTIg
KzIyOSwxNCBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVy
bmF0ZSgpCiAgICAgcmV0dXJuIGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nOwogfQogCi1TUUxp
dGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnkpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3RE
aXJlY3RvcnksIExvY2smIGxvY2spCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGF0YWJhc2VSb290RGlyZWN0b3J5
KGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKICAgICAsIG1fc2VyaWFsaXphdGlvbkNvbnRleHQoSURC
U2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQo
c2Vzc2lvbklEKSkKKyAgICAsIG1fbG9jayhsb2NrKQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1f
bG9jay5pc0hlbGQoKSk7CiAgICAgbV9kYXRhYmFzZURpcmVjdG9yeSA9IGZ1bGxEYXRhYmFzZURp
cmVjdG9yeVdpdGhVcGdyYWRlKCk7CiB9CiAKQEAgLTg2Nyw2ICs4NjksNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rp
b25JbmZvJiBpbmZvKQogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxp
dGVEQi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CisgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHJhbnNhY3Rpb25z
LmFkZChpbmZvLmlkZW50aWZpZXIoKSwgbnVsbHB0cik7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgewpAQCAtODk3LDYgKzkwMCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6YWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGlkCiAK
ICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3Blbigp
KTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8gdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy50YWtlKGlkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24p
IHsKQEAgLTkxNiw2ICs5MjAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNv
bW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgaQogCiAgICAgQVNT
RVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAg
QVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMudGFrZShpZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7CkBAIC05
NDEsNiArOTQ2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKIAogICAgIEFTU0VSVChtX3Nx
bGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworICAgIEFTU0VSVCht
X2xvY2suaXNIZWxkKCkpOwogCiAgICAgYXV0byogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0
cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQpAQCAtOTkyLDYgKzk5OCw3IEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0CiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1
dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkK
QEAgLTEwODMsNiArMTA5MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVu
YW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAKICAgICBBU1NF
UlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBB
U1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlv
biB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTExMTUsNiArMTEyMyw3IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyCiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNT
RVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsK
IAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
SWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkKQEAgLTExNTUsNiArMTE2NCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAg
ICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXggLSBP
YmplY3RTdG9yZSAlIiBQUkl1NjQgIiwgSW5kZXggJSIgUFJJdTY0LCBpbmZvLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpLCBpbmZvLmlkZW50aWZpZXIoKSk7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIp
OwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5p
c0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0
aW9uLT5pblByb2dyZXNzKCkpCkBAIC0xMzQzLDYgKzEzNTMsNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhYwogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURC
LT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwog
ICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0x
Mzg4LDYgKzEzOTksNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUlu
ZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAgICAgQVNTRVJUKG1f
c3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFi
YXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykKQEAgLTE0MjksNiArMTQ0MSw3IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpCiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJU
KG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAog
ICAgIGtleUV4aXN0cyA9IGZhbHNlOwogCkBAIC0xNjA0LDYgKzE2MTcsNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJhbmdlKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhYwogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3Nx
bGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBh
dXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZp
ZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkp
CkBAIC0xNzI2LDYgKzE3NDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFk
ZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIEFTU0VS
VChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAgICAgQVNTRVJUKHZhbHVlLmRhdGEoKS5kYXRhKCkp
OwogICAgIEFTU0VSVCh2YWx1ZS5ibG9iVVJMcygpLnNpemUoKSA9PSB2YWx1ZS5ibG9iRmlsZVBh
dGhzKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8q
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7
CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAg
LTE4ODYsNiArMTkwMSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICBBU1NFUlQo
bV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NF
UlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8
fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTIwMTcsNiArMjAzMyw4IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3RpCiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0
QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBJREJH
ZXRBbGxSZXN1bHQmIHJlc3VsdCkKIHsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKwog
ICAgIHJldHVybiBnZXRBbGxSZWNvcmRzRGF0YS5pbmRleElkZW50aWZpZXIgPyBnZXRBbGxJbmRl
eFJlY29yZHModHJhbnNhY3Rpb25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0
KSA6IGdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdldEFs
bFJlY29yZHNEYXRhLCByZXN1bHQpOwogfQogCkBAIC0yMjAxLDYgKzIyMTksNyBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbgogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVCht
X3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAg
ICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50
aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNz
KCkpCkBAIC0yMzAyLDYgKzIzMjEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgIExP
RyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50IC0gb2JqZWN0IHN0
b3JlICUiIFBSSXU2NCwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBBU1NFUlQobV9zcWxp
dGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9s
b2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJh
bnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTI0MjAsNiArMjQ0MCw3IEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0CiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1
dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkK
QEAgLTI0NDgsNiArMjQ2OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmV2
ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpCiAKICAgICBBU1NF
UlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBB
U1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlv
biB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTI0OTMsNiArMjUxNSw3IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0CiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFT
U0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7
CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlv
bklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblBy
b2dyZXNzKCkpCkBAIC0yNTE4LDYgKzI1NDEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFucwog
CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4o
KSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiBjdXJzb3IgPSBt
X2N1cnNvcnMuZ2V0KGN1cnNvcklkZW50aWZpZXIpOwogICAgIGlmICghY3Vyc29yKSB7CkBAIC0y
NTYxLDYgKzI1ODUsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cHJlZmV0Y2hDdXJz
b3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdAogCiAgICAgQVNTRVJUKG1f
c3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiBjdXJzb3IgPSBtX2N1cnNvcnMuZ2V0KGN1
cnNvcklkZW50aWZpZXIpOwogICAgIGlmICghY3Vyc29yIHx8ICFjdXJzb3ItPnRyYW5zYWN0aW9u
KCkgfHwgIWN1cnNvci0+dHJhbnNhY3Rpb24oKS0+aW5Qcm9ncmVzcygpKQpAQCAtMjU3OSw2ICsy
NjA0LDcgQEAgSURCT2JqZWN0U3RvcmVJbmZvKiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmluZm9G
b3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG8KIAogdm9pZCBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiB7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQo
KSk7CiAgICAgU3RyaW5nIGRiRmlsZW5hbWUgPSBmdWxsRGF0YWJhc2VQYXRoKCk7CiAKICAgICBM
T0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUg
ZGVsZXRpbmcgZmlsZSAnJXMnIG9uIGRpc2siLCBkYkZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwpA
QCAtMjY0OSw2ICsyNjc1LDcgQEAgU1FMaXRlU3RhdGVtZW50KiBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmNhY2hlZFN0YXRlbWVudChTUUxpdGVJREJCYWNraW5nU3RvcmU6OlMKIAogdm9pZCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNsb3NlKCkKIHsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgp
KTsKICAgICBjbG9zZVNRTGl0ZURCKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aAppbmRleCBkYzFmOWMxZTkwODkyMTgxNWIwNzk4OTIxYTRlYjQzZTRlZjE5ZmM3Li4yNDJmYzNi
YWY1Njg1ZGRlNWY1MmI3MGIwNTk1MmZjYjMyMjRlMGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5oCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNz
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnkpOworICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQ
QUw6OlNlc3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIExvY2smKTsKICAgICAKICAgICB+U1FMaXRlSURCQmFj
a2luZ1N0b3JlKCkgZmluYWw7CiAKQEAgLTIxMSw2ICsyMTEsOCBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5OwogCiAgICAgUmVmPElEQlNlcmlhbGl6YXRpb25Db250
ZXh0PiBtX3NlcmlhbGl6YXRpb25Db250ZXh0OworCisgICAgTG9jayYgbV9sb2NrOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBm
ZjA5MGY3NmJiNWQ0MjgzOTI2NTYxODhlZmE3ZmYxYzk0NWIxYzljLi5hZjcyNjdhMzQwZTg1ZGIx
ZTNlZjVkNjY4ZDFiMDAyOWYxMDY0M2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAg
LTEyMiw2ICsxMjIsNyBAQCBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UoSURC
U2VydmVyJiBzZXJ2ZXIsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZgogICAgICwgbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX29wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVk
KQogeworICAgIG1fc2VydmVyLT5yZWdpc3RlckRhdGFiYXNlKCp0aGlzKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKCkgKCVwKSAlcyIs
IHRoaXMsIG1faWRlbnRpZmllci5kZWJ1Z1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQogCkBA
IC0xMzksNiArMTQwLDggQEAgVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSgp
CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kYXRhYmFzZVF1ZXVlLmlzS2lsbGVkKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzS2lsbGVkKCkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisKKyAgICBtX3NlcnZlci0+dW5yZWdpc3RlckRh
dGFiYXNlKCp0aGlzKTsKIH0KIAogY29uc3QgSURCRGF0YWJhc2VJbmZvJiBVbmlxdWVJREJEYXRh
YmFzZTo6aW5mbygpIGNvbnN0CkBAIC0zNzgsMTMgKzM4MSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaQogICAgIHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uID0gMDsKIAogICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZSkgewotICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3Jl
KCk7Ci0KLSAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgICAgICB7CisgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICAg
ICAgbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICAgICAgbV9i
YWNraW5nU3RvcmUgPSBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIG1fYmFja2luZ1N0b3Jl
U3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKICAgICAgICAgbV9iYWNr
aW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8g
YmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsK
KyAgICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3Jl
KGlkZW50aWZpZXIsIG1fYmFja2luZ1N0b3JlTG9jayk7CiAKICAgICAgICAgSURCRGF0YWJhc2VJ
bmZvIGRhdGFiYXNlSW5mbzsKICAgICAgICAgYXV0byBlcnJvciA9IGJhY2tpbmdTdG9yZS0+Z2V0
T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKQEAgLTQwMyw4ICs0MDgsMTEg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNr
aW5nU3RvcmUoKQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJh
Y2tpbmdTdG9yZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tp
bmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBpZiAobV9iYWNraW5nU3RvcmUp
CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CisgICAg
fQogCiAgICAgc2h1dGRvd25Gb3JDbG9zZSgpOwogfQpAQCAtNDI4LDEwICs0MzYsMTEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSgpCiAKICAgICBMT0coSW5kZXhl
ZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSIpOwogCi0gICAg
aWYgKG1fYmFja2luZ1N0b3JlKQorICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOwogICAgICAgICBtX2JhY2tpbmdT
dG9yZS0+Y2xvc2UoKTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAg
bV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIH0KICAgICBtX2JhY2tpbmdTdG9yZVN1cHBv
cnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CiAgICAgbV9iYWNraW5nU3RvcmVJ
c0VwaGVtZXJhbCA9IGZhbHNlOwogCkBAIC02NzAsNyArNjc5LDEyIEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJU
cmFuc2FjdGlvCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiIpOwogCi0gICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFuc2FjdGlvbihpbmZvKTsKKyAgICBJREJF
cnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0
b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmJlZ2luVHJhbnNhY3Rp
b24oaW5mbyk7CisgICAgfQorCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtU3RhcnRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24sIGVycm9yKSk7CiB9CiAKQEAgLTgyNywxMiArODQxLDE2IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCiAgICAgQVNTRVJU
KCFtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRl
QmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwotICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11
bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVv
dXNUcmFuc2FjdGlvbnMoKTsKLSAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNr
aW5nU3RvcmUtPmlzRXBoZW1lcmFsKCk7CiAKICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJ
bmZvOwotICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIG1fYmFj
a2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyLCBtX2Jh
Y2tpbmdTdG9yZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5l
b3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5lb3VzVHJh
bnNhY3Rpb25zKCk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tp
bmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+
Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKKyAgICB9CiAKICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsICB0
YXNrSWRlbnRpZmllcikpOwogfQpAQCAtODkyLDcgKzkxMCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjbwogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgSURCRXJy
b3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5m
byk7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKIH0KQEAgLTk0NCw3ICs5NjYs
MTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlIik7CiAKICAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUt
PmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVP
YmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKSk7CiB9CkBAIC0xMDAxLDcgKzEwMjcsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28K
ICAgICB9CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3Jl
LT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSk7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2Jh
Y2tpbmdTdG9yZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lT2JqZWN0U3Rv
cmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUp
OworICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3Jl
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05h
bWUpKTsKIH0KQEAgLTEwNDYsNyArMTA3NSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSIpOwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBJREJFcnJv
ciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAg
ICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAg
ICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIH0KIAogICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IpKTsKIH0KQEAgLTEwOTYsMTQgKzExMjksMTcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQK
IAogICAgIElEQkVycm9yIGVycm9yOwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVk
REIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXg6IG1fYmFja2lu
Z1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKLSAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlk
U3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgaXMgaW52YWxpZCBmb3IgY2FsbCB0byBjcmVhdGUg
aW5kZXgiX3MpOwotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgaW5mbykpOwotICAgICAgICByZXR1cm47CisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAg
ICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJ
bmRleGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXg6IG1f
YmFja2luZ1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJy
b3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwg
dG8gY3JlYXRlIGluZGV4Il9zKTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBpbmZvKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+
Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvKTsKICAgICB9CiAKLSAgICBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGluZm8pOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCBpbmZvKSk7CiB9CiAKQEAgLTExNjUsNyArMTIwMSwxMSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdT
dG9yZSk7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
Zmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1EZWxldGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBpbmRleElkZW50aWZpZXIpKTsKIH0KQEAgLTEyMjksNyArMTI2OSwxMCBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJRAogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7
Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAgIHsK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAg
bV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAgIH0KIAogICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkp
OwogfQpAQCAtMTI5OSw3MSArMTM0Miw3NCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUHV0T3JBZGQ6IG1fYmFja2luZ1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKLSAgICAgICAg
ZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgaXMgaW52
YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRkIl9zKTsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEluZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1QdXRPckFkZDogbV9iYWNraW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMpOwor
ICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcg
c3RvcmUgaXMgaW52YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRkIl9zKTsKKyAgICAgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCB1c2VkS2V5KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGF1
dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUo
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgewotICAg
ICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiT2JqZWN0IHN0b3JlIGNh
bm5vdCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBzdG9yZSJfcyk7Ci0gICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2Vk
S2V5KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGF1dG8qIG9iamVjdFN0b3Jl
SW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pIHsKKyAgICAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJPYmplY3Qgc3RvcmUgY2Fubm90IGJl
IGZvdW5kIGluIHRoZSBiYWNraW5nIHN0b3JlIl9zKTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGJvb2wgdXNlZEtleUlz
R2VuZXJhdGVkID0gZmFsc2U7Ci0gICAgdWludDY0X3Qga2V5TnVtYmVyOwotICAgIGF1dG8gZ2Vu
ZXJhdGVkS2V5UmVzZXR0ZXIgPSBXVEY6Om1ha2VTY29wZUV4aXQoW3RoaXMsIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCAma2V5TnVtYmVyLCAmdXNlZEtleUlz
R2VuZXJhdGVkXSgpIHsKLSAgICAgICAgaWYgKHVzZWRLZXlJc0dlbmVyYXRlZCkKLSAgICAgICAg
ICAgIG1fYmFja2luZ1N0b3JlLT5yZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7Ci0gICAgfSk7Ci0g
ICAgaWYgKG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmICFrZXlEYXRhLmlzVmFs
aWQoKSkgewotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJl
cih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVtYmVy
KTsKKyAgICAgICAgYm9vbCB1c2VkS2V5SXNHZW5lcmF0ZWQgPSBmYWxzZTsKKyAgICAgICAgdWlu
dDY0X3Qga2V5TnVtYmVyOworICAgICAgICBhdXRvIGdlbmVyYXRlZEtleVJlc2V0dGVyID0gV1RG
OjptYWtlU2NvcGVFeGl0KFt0aGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgJmtleU51bWJlciwgJnVzZWRLZXlJc0dlbmVyYXRlZF0oKSB7CisgICAgICAg
ICAgICBpZiAodXNlZEtleUlzR2VuZXJhdGVkKQorICAgICAgICAgICAgICAgIG1fYmFja2luZ1N0
b3JlLT5yZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
b2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYgIWtleURhdGEuaXNWYWxpZCgpKSB7
CisgICAgICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJlcih0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVtYmVyKTsK
KyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
dXNlZEtleSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgdXNlZEtleS5zZXROdW1iZXJWYWx1ZShrZXlOdW1iZXIpOwor
ICAgICAgICAgICAgdXNlZEtleUlzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB1c2VkS2V5ID0ga2V5RGF0YTsKKworICAgICAgICBpZiAob3ZlcndyaXRlTW9k
ZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUpIHsK
KyAgICAgICAgICAgIGJvb2wga2V5RXhpc3RzOworICAgICAgICAgICAgZXJyb3IgPSBtX2JhY2tp
bmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgdXNlZEtleSwga2V5RXhpc3RzKTsKKyAgICAgICAgICAgIGlm
IChlcnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCisgICAgICAgICAgICAgICAgZXJyb3IgPSBJ
REJFcnJvcihDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVj
dCBzdG9yZSJfcyk7CisKKyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBTdG9y
YWdlIE9wZXJhdGlvbgorICAgICAgICAvLyAuLi5JZiBhIHJlY29yZCBhbHJlYWR5IGV4aXN0cyBp
biBzdG9yZSAuLi4KKyAgICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3Jl
IHVzaW5nIHRoZSBzdGVwcyBmb3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9y
ZS4uLgorICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0
aW5nIGl0IGZyb20gZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRo
ZSBhcHByb3ByaWF0ZSBpbmRleGVzLgorICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5k
ZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dXNlZEtleSk7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCB1c2VkS2V5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHVzZWRLZXkuc2V0TnVtYmVyVmFsdWUoa2V5TnVtYmVyKTsKLSAgICAgICAgdXNlZEtl
eUlzR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgdXNlZEtleSA9IGtleURh
dGE7Ci0KLSAgICBpZiAob3ZlcndyaXRlTW9kZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUpIHsKLSAgICAgICAgYm9vbCBrZXlFeGlzdHM7Ci0gICAg
ICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXksIGtleUV4aXN0
cyk7Ci0gICAgICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCi0gICAgICAgICAg
ICBlcnJvciA9IElEQkVycm9yKENvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBp
biB0aGUgb2JqZWN0IHN0b3JlIl9zKTsKKworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5hZGRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCAqb2JqZWN0U3RvcmVJbmZvLCB1c2Vk
S2V5LCBvcmlnaW5hbFJlY29yZFZhbHVlKTsKIAogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgfQogCi0gICAgLy8gMy40LjEgT2JqZWN0IFN0b3JlIFN0b3JhZ2UgT3BlcmF0
aW9uCi0gICAgLy8gLi4uSWYgYSByZWNvcmQgYWxyZWFkeSBleGlzdHMgaW4gc3RvcmUgLi4uCi0g
ICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3JlIHVzaW5nIHRoZSBzdGVwcyBm
b3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9yZS4uLgotICAgIC8vIFRoaXMg
aXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcgaXQgZnJvbSBmcm9tIHRoZSBv
YmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFwcHJvcHJpYXRlIGluZGV4ZXMu
Ci0gICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXkpOwotICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICAgICAgaWYgKG92ZXJ3cml0ZU1vZGUgIT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNvciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9J
bmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJl
cikKKyAgICAgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPm1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBrZXlEYXRhLm51bWJlcigpKTsKIAotICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFkZFJl
Y29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsICpvYmplY3RTdG9yZUluZm8sIHVzZWRLZXksIG9y
aWdpbmFsUmVjb3JkVmFsdWUpOwotCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBl
cnJvciwgdXNlZEtleSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGdlbmVyYXRlZEtleVJl
c2V0dGVyLnJlbGVhc2UoKTsKICAgICB9Ci0KLSAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9i
amVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4
ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5t
YXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7Ci0KLSAgICBnZW5lcmF0ZWRLZXlS
ZXNldHRlci5yZWxlYXNlKCk7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKIH0KIApAQCAtMTQzMyw3ICsx
NDc5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0
b3JlKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJlc3VsdCk7CisgICAgSURCRXJyb3Ig
ZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxv
Y2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgdHlwZSwg
cmVzdWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQpAQCAtMTQ0NCw5ICsxNDk0
LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCiAgICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURCRXJy
b3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlw
ZSwgcmFuZ2UsIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRJbmRleFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCByZWNvcmRUeXBlLCByYW5nZSwgcmVz
dWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQpAQCAtMTQ2Nyw3ICsxNTIwLDEx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwog
CiAgICAgSURCR2V0QWxsUmVzdWx0IHJlc3VsdDsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxsUmVj
b3Jkc0RhdGEsIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxs
UmVjb3Jkc0RhdGEsIHJlc3VsdCk7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShyZXN1
bHQpKSk7CiB9CkBAIC0xNTExLDcgKzE1NjgsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUK
ICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIAogICAgIHVpbnQ2NF90IGNvdW50
OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIGtl
eVJhbmdlRGF0YSwgY291bnQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0Q291bnQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCBjb3VudCk7CisgICAg
fQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIGNvdW50KSk7CiB9CkBAIC0xNTUxLDcgKzE2MTIsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IEkKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCIpOwog
Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlKTsKKyAgICBJREJF
cnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0
b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7CisgICAg
fQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yKSk7CiB9CkBAIC0xNTkyLDcgKzE2NTcsMTEgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREIKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybU9wZW5DdXJzb3IiKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURC
RXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGluZm8sIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5vcGVuQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbywg
cmVzdWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29y
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKIH0KQEAgLTE2MzMsNyArMTcw
MiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yIik7CiAKICAgICBJREJHZXRS
ZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPml0ZXJh
dGVDdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBkYXRhLCBy
ZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIs
IGRhdGEsIHJlc3VsdCk7CisgICAgfQogCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jdXJzb3JQcmVmZXRjaGVzLmFkZChjdXJzb3JJZGVudGlm
aWVyKTsKQEAgLTE2NTAsMTAgKzE3MjMsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnMKICAg
ICBBU1NFUlQobV9jdXJzb3JQcmVmZXRjaGVzLmNvbnRhaW5zKGN1cnNvcklkZW50aWZpZXIpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVByZWZl
dGNoQ3Vyc29yIik7CiAKLSAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSB8fCAhbV9i
YWNraW5nU3RvcmUtPnByZWZldGNoQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vyc29y
SWRlbnRpZmllcikpCisgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKICAgICAg
ICAgbV9jdXJzb3JQcmVmZXRjaGVzLnJlbW92ZShjdXJzb3JJZGVudGlmaWVyKTsKLSAgICBlbHNl
Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVmZXRjaEN1cnNvciwgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOwor
ICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5wcmVmZXRjaEN1cnNvcih0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICBtX2N1cnNvclByZWZl
dGNoZXMucmVtb3ZlKGN1cnNvcklkZW50aWZpZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVByZWZldGNoQ3Vyc29yLCB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIpKTsKIH0KIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0
KQpAQCAtMTcxOCw3ICsxODAxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIElEQkVycm9yIGVy
cm9yID0gbV9iYWNraW5nU3RvcmUtPmNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRp
Zmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIH0KICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKQEAgLTE4MDgsNyArMTg5
NSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
QWJvcnRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBJREJFcnJv
ciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3Jl
TG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFib3J0VHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB9CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyKSk7CiB9CiAKQEAgLTIwMTgsNyArMjEwOSwxMiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKHVpbnQ2
NF90IGNhbGxiYQogewogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlIik7CiAKLSAgICBJREJF
cnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5iZWdpblRyYW5zYWN0aW9uKGluZm8pOworICAg
IElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNr
aW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFu
c2FjdGlvbihpbmZvKTsKKyAgICB9CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1BY3Rp
dmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Ip
KTsKIH0KIApAQCAtMjM1MywyMCArMjQ0OSwyOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpm
b3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIAogdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKKyAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmVMb2NrLmlzSGVsZCgpKTsKICAgICB0cmFuc2FjdGlvbi5zZXRSZXN1bHQobV9iYWNraW5n
U3RvcmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkp
OwogICAgIHRyYW5zYWN0aW9uLnNldFN0YXRlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OlN0YXRlOjpBYm9ydGVkKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJh
bnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiB7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlTG9jay5pc0hlbGQoKSk7CiAgICAg
dHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0b3JlLT5jb21taXRUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiAgICAgdHJhbnNhY3Rpb24uc2V0U3Rh
dGUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkNvbW1pdHRlZCk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdXNwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCisgICAgaWYgKG1faXNTdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lz
U3VzcGVuZGVkID0gdHJ1ZTsKKworICAgIG1fYmFja2luZ1N0b3JlTG9jay5sb2NrKCk7CisKICAg
ICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9pblByb2dyZXNzVHJhbnNh
Y3Rpb25zLmtleXMoKSkpIHsKICAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1faW5Qcm9ncmVz
c1RyYW5zYWN0aW9ucy5nZXQoaWRlbnRpZmllcik7CiAgICAgICAgIGFib3J0VHJhbnNhY3Rpb25P
bk1haW5UaHJlYWQoKnRyYW5zYWN0aW9uKTsKQEAgLTIzOTIsNiArMjQ5NiwxOCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKQogICAgIH0KIH0KIAor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVzdW1lKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKCFtX2lzU3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlTG9jay5p
c0hlbGQoKSk7CisgICAgbV9iYWNraW5nU3RvcmVMb2NrLnVubG9jaygpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaAppbmRleCBlYzNmYzBjNzNlYTMwZTI0ZTdhMGNlZTU4ODlmMzk2MWYwY2M0YzI3Li5l
YWRiZmZkMjFmMjk3YmRiN2Y4YzQzODU0NTJjYjMzM2IyMTY4ZTI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaApAQCAtMTE2LDcgKzExNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFyZENsb3Nl
ZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRl
OyB9CiAKLSAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpOworICAgIHZvaWQgc3Vz
cGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVE
YXRhYmFzZU9wZXJhdGlvbnMoKTsKQEAgLTI2OSw2ICsyNzAsNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSB7IGZhbHNlIH07CiAgICAgSURCRXJyb3IgbV9i
YWNraW5nU3RvcmVPcGVuRXJyb3I7CisgICAgTG9jayBtX2JhY2tpbmdTdG9yZUxvY2s7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9kYXRhYmFzZUluZm87CiAgICAgc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5m
bzsKQEAgLTMwNiw2ICszMDgsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJ
ZGVudGlmaWVyPiBtX2N1cnNvclByZWZldGNoZXM7CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCB1
aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzOworCisgICAgYm9vbCBtX2lzU3Vz
cGVuZGVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384059</attachid>
            <date>2019-11-21 09:15:28 -0800</date>
            <delta_ts>2019-11-21 16:51:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204379-20191121091527.patch</filename>
            <type>text/plain</type>
            <size>46904</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRmN2QyMzE1ZWY3NTZl
NTQxMzdiY2JkYTlmMDQyNDFkYTg4NjU4YS4uYmU3MjcxNjBhNTExN2RkZmVlYjBlNTVjYjBkNjVm
MTc1NjI3YTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE5LTExLTIwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogbG9jay1i
YXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzdXNwZW5zaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQzNzkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0OiBJ
bmRleGVkREIuSW5kZXhlZERCU3VzcGVuZEltbWluZW50bHkKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6dHJ5U3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6cmVzdW1lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6
cmVnaXN0ZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cjo6dW5yZWdpc3RlckRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJldmVy
dEdlbmVyYXRlZEtleU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cHJlZmV0Y2hDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y2xvc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6flVuaXF1ZUlEQkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1TdGFydFZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVs
ZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVh
dGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtRGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1H
ZXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3Bl
bkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHJlZmV0Y2hDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1BYm9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1BY3RpdmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFu
c2FjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hBY3RpdmVUcmFu
c2FjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oOgorCiAyMDE5LTExLTIwICBDaGFuZ1Nlb2sgT2ggIDxjaGFuZ3Nl
b2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBbR1RLXSBBZGQgQU5HTEUgYmFja2VuZCB0byBHVEsg
cG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcAppbmRleCBlNjFkYjhjOTQyOGQ5ODRkYTY0Njk2ZTdjODQyNzg3NDI2OWMy
N2U2Li44OTJlOGZiZmI4ZDNkYzg1MWI3ZTAzODQ5ZTgxZWZlYzAyMTUzYWUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cApAQCAtMTI2LDcgKzEyNiw3IEBAIFVuaXF1ZUlEQkRhdGFiYXNlJiBJREJTZXJ2ZXI6OmdldE9y
Q3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVuCiAgICAgcmV0dXJu
ICp1bmlxdWVJREJEYXRhYmFzZS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3N0ZDo6dW5pcXVlX3B0cjxJREJCYWNr
aW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYgaWRlbnRpZmllciwgTG9jayYgYmFja2luZ1N0b3JlTG9jaykKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMTM0LDcgKzEzNCw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlCiAgICAgaWYgKGRhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZShtX3Nlc3Npb25JRCwg
aWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxTUUxpdGVJREJCYWNraW5nU3Rv
cmU+KG1fc2Vzc2lvbklELCBpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAg
IHJldHVybiBtYWtlVW5pcXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4obV9zZXNzaW9uSUQsIGlk
ZW50aWZpZXIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgYmFja2luZ1N0b3JlTG9jayk7CiB9CiAK
IHZvaWQgSURCU2VydmVyOjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVl
c3REYXRhKQpAQCAtODUzLDE0ICs4NTMsMTEgQEAgdm9pZCBJREJTZXJ2ZXI6OnRyeVN0b3AoU2hv
dWxkRm9yY2VTdG9wIHNob3VsZEZvcmNlU3RvcCkKICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3VzcGVuZEFuZFdhaXQoKTsKLSAgICBp
ZiAoc2hvdWxkRm9yY2VTdG9wID09IFNob3VsZEZvcmNlU3RvcDo6Tm8gJiYgU1FMaXRlRGF0YWJh
c2VUcmFja2VyOjpoYXNUcmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSkgewotICAgICAgICBDcm9zc1Ro
cmVhZFRhc2tIYW5kbGVyOjpyZXN1bWUoKTsKKyAgICBpZiAoc2hvdWxkRm9yY2VTdG9wID09IFNo
b3VsZEZvcmNlU3RvcDo6Tm8gJiYgU1FMaXRlRGF0YWJhc2VUcmFja2VyOjpoYXNUcmFuc2FjdGlv
bkluUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwLnZhbHVlcygpKQotICAgICAgICBkYXRh
YmFzZS0+ZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CisgICAgZm9yIChhdXRvJiBkYXRhYmFz
ZSA6IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFzZS0+c3VzcGVuZCgp
OwogfQogCiB2b2lkIElEQlNlcnZlcjo6cmVzdW1lKCkKQEAgLTg2OCw3ICs4NjUsOCBAQCB2b2lk
IElEQlNlcnZlcjo6cmVzdW1lKCkKICAgICBpZiAobV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ3Jvc3NUaHJlYWRUYXNrSGFuZGxlcjo6cmVzdW1lKCk7
CisgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzKQorICAg
ICAgICBkYXRhYmFzZS0+cmVzdW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oCmluZGV4IGQzYTIyM2Q5MzJkOTE1OWQ1NDY2NjI5ZjcxN2VmZmI1Nzc0MTNjYWYuLjA0YTli
ODBmYTcxZjZkZDQ1MGMwZGVhNmZiM2YxMmE1ZDkyNDFiZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTEwNiw3ICsx
MDYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5pcXVlSURCRGF0YWJhc2U+
IGNsb3NlQW5kVGFrZVVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlJik7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlPiBjcmVhdGVCYWNraW5nU3RvcmUoY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tp
bmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYs
IExvY2smKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFz
ZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
Rm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZv
aWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMTIzLDYgKzEyMyw5IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9wKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZSgpOwogCisgICAgdm9pZCByZWdpc3RlckRhdGFiYXNl
KFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5h
ZGQoJmRhdGFiYXNlKTsgfQorICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlKFVuaXF1ZUlEQkRh
dGFiYXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5yZW1vdmUoJmRhdGFi
YXNlKTsgfQorCiBwcml2YXRlOgogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgUXVvdGFN
YW5hZ2VyR2V0dGVyJiYpOwogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKQEAgLTE5
MCw2ICsxOTMsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwog
ICAgIEhhc2hNYXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJlZlB0cjxJREJDb25uZWN0aW9u
VG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50
aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0
YWJhc2VNYXA7CisgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG1fYWxsVW5pcXVlSURC
RGF0YWJhc2VzOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uKj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25zOwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJ
ZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4gbV90cmFuc2FjdGlvbnM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDJhYzBjZTVlYmYzZWI1NWZi
ZjQ3ZjllOWZiMGRkYzNhNTA1MTlhMDkuLjIwNDFkMzE5N2I2OGJkMjgwMjNjZDJjOGZjNGQ5Y2Zi
ZjFmODljNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yMjksMTIg
KzIyOSwxNCBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVy
bmF0ZSgpCiAgICAgcmV0dXJuIGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nOwogfQogCi1TUUxp
dGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnkpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3RE
aXJlY3RvcnksIExvY2smIGxvY2spCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGF0YWJhc2VSb290RGlyZWN0b3J5
KGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKICAgICAsIG1fc2VyaWFsaXphdGlvbkNvbnRleHQoSURC
U2VyaWFsaXphdGlvbkNvbnRleHQ6OmdldE9yQ3JlYXRlSURCU2VyaWFsaXphdGlvbkNvbnRleHQo
c2Vzc2lvbklEKSkKKyAgICAsIG1fbG9jayhsb2NrKQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1f
bG9jay5pc0hlbGQoKSk7CiAgICAgbV9kYXRhYmFzZURpcmVjdG9yeSA9IGZ1bGxEYXRhYmFzZURp
cmVjdG9yeVdpdGhVcGdyYWRlKCk7CiB9CiAKQEAgLTg2Nyw2ICs4NjksNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rp
b25JbmZvJiBpbmZvKQogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxp
dGVEQi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CisgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHJhbnNhY3Rpb25z
LmFkZChpbmZvLmlkZW50aWZpZXIoKSwgbnVsbHB0cik7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgewpAQCAtODk3LDYgKzkwMCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6YWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGlkCiAK
ICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3Blbigp
KTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8gdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy50YWtlKGlkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24p
IHsKQEAgLTkxNiw2ICs5MjAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNv
bW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgaQogCiAgICAgQVNT
RVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAg
QVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMudGFrZShpZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7CkBAIC05
NDEsNiArOTQ2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKIAogICAgIEFTU0VSVChtX3Nx
bGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworICAgIEFTU0VSVCht
X2xvY2suaXNIZWxkKCkpOwogCiAgICAgYXV0byogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0
cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQpAQCAtOTkyLDYgKzk5OCw3IEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0CiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1
dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkK
QEAgLTEwODMsNiArMTA5MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVu
YW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAKICAgICBBU1NF
UlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBB
U1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlv
biB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTExMTUsNiArMTEyMyw3IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyCiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNT
RVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsK
IAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
SWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkKQEAgLTExNTUsNiArMTE2NCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAg
ICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXggLSBP
YmplY3RTdG9yZSAlIiBQUkl1NjQgIiwgSW5kZXggJSIgUFJJdTY0LCBpbmZvLm9iamVjdFN0b3Jl
SWRlbnRpZmllcigpLCBpbmZvLmlkZW50aWZpZXIoKSk7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIp
OwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5p
c0hlbGQoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0
aW9uLT5pblByb2dyZXNzKCkpCkBAIC0xMzQzLDYgKzEzNTMsNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhYwogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURC
LT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiB0
cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwog
ICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC0x
Mzg4LDYgKzEzOTksNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUlu
ZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogCiAgICAgQVNTRVJUKG1f
c3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFi
YXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykKQEAgLTE0MjksNiArMTQ0MSw3IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpCiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJU
KG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAog
ICAgIGtleUV4aXN0cyA9IGZhbHNlOwogCkBAIC0xNjA0LDYgKzE2MTcsNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJhbmdlKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhYwogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3Nx
bGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBh
dXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZp
ZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkp
CkBAIC0xNzI2LDYgKzE3NDAsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFk
ZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIEFTU0VS
VChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAgICAgQVNTRVJUKHZhbHVlLmRhdGEoKS5kYXRhKCkp
OwogICAgIEFTU0VSVCh2YWx1ZS5ibG9iVVJMcygpLnNpemUoKSA9PSB2YWx1ZS5ibG9iRmlsZVBh
dGhzKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8q
IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7
CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAg
LTE4ODYsNiArMTkwMSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAKICAgICBBU1NFUlQo
bV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NF
UlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8
fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTIwMTcsNiArMjAzMyw4IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3RpCiAKIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0
QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBJREJH
ZXRBbGxSZXN1bHQmIHJlc3VsdCkKIHsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKwog
ICAgIHJldHVybiBnZXRBbGxSZWNvcmRzRGF0YS5pbmRleElkZW50aWZpZXIgPyBnZXRBbGxJbmRl
eFJlY29yZHModHJhbnNhY3Rpb25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0
KSA6IGdldEFsbE9iamVjdFN0b3JlUmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdldEFs
bFJlY29yZHNEYXRhLCByZXN1bHQpOwogfQogCkBAIC0yMjAxLDYgKzIyMTksNyBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbgogCiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVCht
X3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAg
ICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50
aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNz
KCkpCkBAIC0yMzAyLDYgKzIzMjEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgIExP
RyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50IC0gb2JqZWN0IHN0
b3JlICUiIFBSSXU2NCwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKICAgICBBU1NFUlQobV9zcWxp
dGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9s
b2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMu
Z2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJh
bnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTI0MjAsNiArMjQ0MCw3IEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0CiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3Fs
aXRlREItPmlzT3BlbigpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1
dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmll
cik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkK
QEAgLTI0NDgsNiArMjQ2OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmV2
ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpCiAKICAgICBBU1NF
UlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKyAgICBB
U1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlv
biB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKQEAgLTI0OTMsNiArMjUxNSw3IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0CiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFT
U0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7
CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlv
bklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblBy
b2dyZXNzKCkpCkBAIC0yNTE4LDYgKzI1NDEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFucwog
CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4o
KSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiBjdXJzb3IgPSBt
X2N1cnNvcnMuZ2V0KGN1cnNvcklkZW50aWZpZXIpOwogICAgIGlmICghY3Vyc29yKSB7CkBAIC0y
NTYxLDYgKzI1ODUsNyBAQCBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cHJlZmV0Y2hDdXJz
b3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdAogCiAgICAgQVNTRVJUKG1f
c3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisgICAgQVNTRVJU
KG1fbG9jay5pc0hlbGQoKSk7CiAKICAgICBhdXRvKiBjdXJzb3IgPSBtX2N1cnNvcnMuZ2V0KGN1
cnNvcklkZW50aWZpZXIpOwogICAgIGlmICghY3Vyc29yIHx8ICFjdXJzb3ItPnRyYW5zYWN0aW9u
KCkgfHwgIWN1cnNvci0+dHJhbnNhY3Rpb24oKS0+aW5Qcm9ncmVzcygpKQpAQCAtMjU3OSw2ICsy
NjA0LDcgQEAgSURCT2JqZWN0U3RvcmVJbmZvKiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmluZm9G
b3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG8KIAogdm9pZCBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCiB7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQo
KSk7CiAgICAgU3RyaW5nIGRiRmlsZW5hbWUgPSBmdWxsRGF0YWJhc2VQYXRoKCk7CiAKICAgICBM
T0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUg
ZGVsZXRpbmcgZmlsZSAnJXMnIG9uIGRpc2siLCBkYkZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwpA
QCAtMjY0OSw2ICsyNjc1LDcgQEAgU1FMaXRlU3RhdGVtZW50KiBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmNhY2hlZFN0YXRlbWVudChTUUxpdGVJREJCYWNraW5nU3RvcmU6OlMKIAogdm9pZCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNsb3NlKCkKIHsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgp
KTsKICAgICBjbG9zZVNRTGl0ZURCKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aAppbmRleCBkYzFmOWMxZTkwODkyMTgxNWIwNzk4OTIxYTRlYjQzZTRlZjE5ZmM3Li4yNDJmYzNi
YWY1Njg1ZGRlNWY1MmI3MGIwNTk1MmZjYjMyMjRlMGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5oCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNz
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZShQQUw6OlNlc3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnkpOworICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQ
QUw6OlNlc3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIExvY2smKTsKICAgICAKICAgICB+U1FMaXRlSURCQmFj
a2luZ1N0b3JlKCkgZmluYWw7CiAKQEAgLTIxMSw2ICsyMTEsOCBAQCBwcml2YXRlOgogICAgIFN0
cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5OwogCiAgICAgUmVmPElEQlNlcmlhbGl6YXRpb25Db250
ZXh0PiBtX3NlcmlhbGl6YXRpb25Db250ZXh0OworCisgICAgTG9jayYgbV9sb2NrOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBm
ZjA5MGY3NmJiNWQ0MjgzOTI2NTYxODhlZmE3ZmYxYzk0NWIxYzljLi42MDQ3ZmRjNjJlNGQ1OGFi
ZmM2YmZjN2EzZGM1N2QxNWVjYWE1NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAg
LTEyMiw2ICsxMjIsNyBAQCBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UoSURC
U2VydmVyJiBzZXJ2ZXIsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZgogICAgICwgbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX29wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIoKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZpcmVk
KQogeworICAgIG1fc2VydmVyLT5yZWdpc3RlckRhdGFiYXNlKCp0aGlzKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKCkgKCVwKSAlcyIs
IHRoaXMsIG1faWRlbnRpZmllci5kZWJ1Z1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQogCkBA
IC0xMzksNiArMTQwLDggQEAgVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSgp
CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kYXRhYmFzZVF1ZXVlLmlzS2lsbGVkKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzS2lsbGVkKCkpOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisKKyAgICBtX3NlcnZlci0+dW5yZWdpc3RlckRh
dGFiYXNlKCp0aGlzKTsKIH0KIAogY29uc3QgSURCRGF0YWJhc2VJbmZvJiBVbmlxdWVJREJEYXRh
YmFzZTo6aW5mbygpIGNvbnN0CkBAIC0zNzcsMjIgKzM4MCwyNCBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBp
ZGVudGlmaQogCiAgICAgdWludDY0X3QgZGVsZXRlZFZlcnNpb24gPSAwOwogCi0gICAgaWYgKG1f
YmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3Rv
cmUoKTsKLQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fYmFj
a2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKLSAgICAg
ICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGF1dG8gYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVu
dGlmaWVyKTsKLQotICAgICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwotICAgICAg
ICBhdXRvIGVycm9yID0gYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhk
YXRhYmFzZUluZm8pOwotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQotICAgICAgICAgICAg
TE9HX0VSUk9SKCJFcnJvciBnZXR0aW5nIGRhdGFiYXNlIGluZm8gZnJvbSBkYXRhYmFzZSAlcyB0
aGF0IHdlIGFyZSB0cnlpbmcgdG8gZGVsZXRlIiwgaWRlbnRpZmllci5kZWJ1Z1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgIGRlbGV0ZWRWZXJzaW9uID0gZGF0YWJhc2VJbmZvLnZl
cnNpb24oKTsKLSAgICAgICAgYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUoKTsKKyAg
ICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAg
ICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmRl
bGV0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRy
OworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0
aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZh
bHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBt
X3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50aWZpZXIsIG1fYmFja2luZ1N0b3JlTG9j
ayk7CisKKyAgICAgICAgICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87CisgICAgICAg
ICAgICBhdXRvIGVycm9yID0gYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5m
byhkYXRhYmFzZUluZm8pOworICAgICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAg
ICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGdldHRpbmcgZGF0YWJhc2UgaW5mbyBmcm9tIGRh
dGFiYXNlICVzIHRoYXQgd2UgYXJlIHRyeWluZyB0byBkZWxldGUiLCBpZGVudGlmaWVyLmRlYnVn
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGRlbGV0ZWRWZXJzaW9uID0g
ZGF0YWJhc2VJbmZvLnZlcnNpb24oKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZS0+ZGVsZXRl
QmFja2luZ1N0b3JlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZERlbGV0ZUJhY2tpbmdTdG9yZSwgZGVsZXRlZFZlcnNpb24pKTsKQEAgLTQwMyw4ICs0MDgsMTEg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVCYWNr
aW5nU3RvcmUoKQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJh
Y2tpbmdTdG9yZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tp
bmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBpZiAobV9iYWNraW5nU3RvcmUp
CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CisgICAg
fQogCiAgICAgc2h1dGRvd25Gb3JDbG9zZSgpOwogfQpAQCAtNDI4LDEwICs0MzYsMTEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSgpCiAKICAgICBMT0coSW5kZXhl
ZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSIpOwogCi0gICAg
aWYgKG1fYmFja2luZ1N0b3JlKQorICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOwogICAgICAgICBtX2JhY2tpbmdT
dG9yZS0+Y2xvc2UoKTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAg
bV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIH0KICAgICBtX2JhY2tpbmdTdG9yZVN1cHBv
cnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CiAgICAgbV9iYWNraW5nU3RvcmVJ
c0VwaGVtZXJhbCA9IGZhbHNlOwogCkBAIC02NzAsNyArNjc5LDEyIEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJU
cmFuc2FjdGlvCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiIpOwogCi0gICAgSURCRXJyb3Ig
ZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFuc2FjdGlvbihpbmZvKTsKKyAgICBJREJF
cnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0
b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmJlZ2luVHJhbnNhY3Rp
b24oaW5mbyk7CisgICAgfQorCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtU3RhcnRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24sIGVycm9yKSk7CiB9CiAKQEAgLTgyNywxMiArODQxLDE2IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCiAgICAgQVNTRVJU
KCFtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRl
QmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwotICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11
bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVv
dXNUcmFuc2FjdGlvbnMoKTsKLSAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNr
aW5nU3RvcmUtPmlzRXBoZW1lcmFsKCk7CiAKICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJ
bmZvOwotICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIG1fYmFj
a2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyLCBtX2Jh
Y2tpbmdTdG9yZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5l
b3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5lb3VzVHJh
bnNhY3Rpb25zKCk7CisgICAgICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tp
bmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+
Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKKyAgICB9CiAKICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsICB0
YXNrSWRlbnRpZmllcikpOwogfQpAQCAtODkyLDcgKzkxMCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjbwogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgSURCRXJy
b3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5m
byk7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFk
VGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlT2JqZWN0U3Rv
cmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKIH0KQEAgLTk0NCw3ICs5NjYs
MTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlKHVp
bnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZU9iamVjdFN0b3JlIik7CiAKICAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUt
PmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmRlbGV0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVP
YmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKSk7CiB9CkBAIC0xMDAxLDcgKzEwMjcsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28K
ICAgICB9CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3Jl
LT5yZW5hbWVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSk7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2Jh
Y2tpbmdTdG9yZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lT2JqZWN0U3Rv
cmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUp
OworICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZU9iamVjdFN0b3Jl
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05h
bWUpKTsKIH0KQEAgLTEwNDYsNyArMTA3NSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgog
ICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJP
YmplY3RTdG9yZSIpOwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBJREJFcnJv
ciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAg
ICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAg
ICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIH0KIAogICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IpKTsKIH0KQEAgLTEwOTYsMTQgKzExMjksMTcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSUQK
IAogICAgIElEQkVycm9yIGVycm9yOwogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVk
REIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXg6IG1fYmFja2lu
Z1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKLSAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlk
U3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgaXMgaW52YWxpZCBmb3IgY2FsbCB0byBjcmVhdGUg
aW5kZXgiX3MpOwotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgaW5mbykpOwotICAgICAgICByZXR1cm47CisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAg
ICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJ
bmRleGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXg6IG1f
YmFja2luZ1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJy
b3IoSW52YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwg
dG8gY3JlYXRlIGluZGV4Il9zKTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBpbmZvKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+
Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvKTsKICAgICB9CiAKLSAgICBl
cnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGluZm8pOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCBpbmZvKSk7CiB9CiAKQEAgLTExNjUsNyArMTIwMSwxMSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgiKTsKIAogICAgIEFTU0VSVChtX2JhY2tpbmdT
dG9yZSk7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
Zmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1EZWxldGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBpbmRleElkZW50aWZpZXIpKTsKIH0KQEAgLTEyMjksNyArMTI2OSwxMCBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBjb25zdCBJRAogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7
Ci0gICAgbV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAgIHsK
KyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAg
bV9iYWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAgIH0KIAogICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSkp
OwogfQpAQCAtMTI5OSw3MSArMTM0Miw3NCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihJbmRleGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtUHV0T3JBZGQ6IG1fYmFja2luZ1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKLSAgICAgICAg
ZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcgc3RvcmUgaXMgaW52
YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRkIl9zKTsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEluZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1QdXRPckFkZDogbV9iYWNraW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMpOwor
ICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJhY2tpbmcg
c3RvcmUgaXMgaW52YWxpZCBmb3IgY2FsbCB0byBwdXQgb3IgYWRkIl9zKTsKKyAgICAgICAgICAg
IHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCB1c2VkS2V5KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGF1
dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUo
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykgewotICAg
ICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiT2JqZWN0IHN0b3JlIGNh
bm5vdCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBzdG9yZSJfcyk7Ci0gICAgICAgIHBvc3REYXRh
YmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2Vk
S2V5KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGF1dG8qIG9iamVjdFN0b3Jl
SW5mbyA9IG1fYmFja2luZ1N0b3JlLT5pbmZvRm9yT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVu
dGlmaWVyKTsKKyAgICAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pIHsKKyAgICAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJPYmplY3Qgc3RvcmUgY2Fubm90IGJl
IGZvdW5kIGluIHRoZSBiYWNraW5nIHN0b3JlIl9zKTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGJvb2wgdXNlZEtleUlz
R2VuZXJhdGVkID0gZmFsc2U7Ci0gICAgdWludDY0X3Qga2V5TnVtYmVyOwotICAgIGF1dG8gZ2Vu
ZXJhdGVkS2V5UmVzZXR0ZXIgPSBXVEY6Om1ha2VTY29wZUV4aXQoW3RoaXMsIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCAma2V5TnVtYmVyLCAmdXNlZEtleUlz
R2VuZXJhdGVkXSgpIHsKLSAgICAgICAgaWYgKHVzZWRLZXlJc0dlbmVyYXRlZCkKLSAgICAgICAg
ICAgIG1fYmFja2luZ1N0b3JlLT5yZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7Ci0gICAgfSk7Ci0g
ICAgaWYgKG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmICFrZXlEYXRhLmlzVmFs
aWQoKSkgewotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJl
cih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVtYmVy
KTsKKyAgICAgICAgYm9vbCB1c2VkS2V5SXNHZW5lcmF0ZWQgPSBmYWxzZTsKKyAgICAgICAgdWlu
dDY0X3Qga2V5TnVtYmVyOworICAgICAgICBhdXRvIGdlbmVyYXRlZEtleVJlc2V0dGVyID0gV1RG
OjptYWtlU2NvcGVFeGl0KFt0aGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgJmtleU51bWJlciwgJnVzZWRLZXlJc0dlbmVyYXRlZF0oKSB7CisgICAgICAg
ICAgICBpZiAodXNlZEtleUlzR2VuZXJhdGVkKQorICAgICAgICAgICAgICAgIG1fYmFja2luZ1N0
b3JlLT5yZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGtleU51bWJlcik7CisgICAgICAgIH0pOworICAgICAgICBpZiAo
b2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYgIWtleURhdGEuaXNWYWxpZCgpKSB7
CisgICAgICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJlcih0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVtYmVyKTsK
KyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
dXNlZEtleSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgdXNlZEtleS5zZXROdW1iZXJWYWx1ZShrZXlOdW1iZXIpOwor
ICAgICAgICAgICAgdXNlZEtleUlzR2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB1c2VkS2V5ID0ga2V5RGF0YTsKKworICAgICAgICBpZiAob3ZlcndyaXRlTW9k
ZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUpIHsK
KyAgICAgICAgICAgIGJvb2wga2V5RXhpc3RzOworICAgICAgICAgICAgZXJyb3IgPSBtX2JhY2tp
bmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwgdXNlZEtleSwga2V5RXhpc3RzKTsKKyAgICAgICAgICAgIGlm
IChlcnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCisgICAgICAgICAgICAgICAgZXJyb3IgPSBJ
REJFcnJvcihDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVj
dCBzdG9yZSJfcyk7CisKKyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVu
dGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBTdG9y
YWdlIE9wZXJhdGlvbgorICAgICAgICAvLyAuLi5JZiBhIHJlY29yZCBhbHJlYWR5IGV4aXN0cyBp
biBzdG9yZSAuLi4KKyAgICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3Jl
IHVzaW5nIHRoZSBzdGVwcyBmb3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9y
ZS4uLgorICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0
aW5nIGl0IGZyb20gZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRo
ZSBhcHByb3ByaWF0ZSBpbmRleGVzLgorICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5k
ZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dXNlZEtleSk7CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCB1c2VkS2V5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHVzZWRLZXkuc2V0TnVtYmVyVmFsdWUoa2V5TnVtYmVyKTsKLSAgICAgICAgdXNlZEtl
eUlzR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgdXNlZEtleSA9IGtleURh
dGE7Ci0KLSAgICBpZiAob3ZlcndyaXRlTW9kZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUpIHsKLSAgICAgICAgYm9vbCBrZXlFeGlzdHM7Ci0gICAg
ICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXksIGtleUV4aXN0
cyk7Ci0gICAgICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCi0gICAgICAgICAg
ICBlcnJvciA9IElEQkVycm9yKENvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBp
biB0aGUgb2JqZWN0IHN0b3JlIl9zKTsKKworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5hZGRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCAqb2JqZWN0U3RvcmVJbmZvLCB1c2Vk
S2V5LCBvcmlnaW5hbFJlY29yZFZhbHVlKTsKIAogICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgp
KSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gMy40LjEgT2JqZWN0IFN0b3JlIFN0b3JhZ2UgT3BlcmF0
aW9uCi0gICAgLy8gLi4uSWYgYSByZWNvcmQgYWxyZWFkeSBleGlzdHMgaW4gc3RvcmUgLi4uCi0g
ICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3JlIHVzaW5nIHRoZSBzdGVwcyBm
b3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9yZS4uLgotICAgIC8vIFRoaXMg
aXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcgaXQgZnJvbSBmcm9tIHRoZSBv
YmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFwcHJvcHJpYXRlIGluZGV4ZXMu
Ci0gICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXkpOwotICAgIGlmICghZXJyb3Iu
aXNOdWxsKCkpIHsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KIAotICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFkZFJlY29yZCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsICpvYmplY3RTdG9yZUluZm8sIHVzZWRLZXksIG9yaWdpbmFsUmVjb3JkVmFsdWUp
OworICAgICAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0b0lu
Y3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVy
KQorICAgICAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+bWF5YmVVcGRhdGVLZXlHZW5l
cmF0b3JOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGtleURhdGEubnVtYmVyKCkpOwogCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAg
ICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5p
cXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBl
cnJvciwgdXNlZEtleSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGdlbmVyYXRlZEtleVJl
c2V0dGVyLnJlbGVhc2UoKTsKICAgICB9Ci0KLSAgICBpZiAob3ZlcndyaXRlTW9kZSAhPSBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yICYmIG9i
amVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmIGtleURhdGEudHlwZSgpID09IEluZGV4
ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5t
YXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7Ci0KLSAgICBnZW5lcmF0ZWRLZXlS
ZXNldHRlci5yZWxlYXNlKCk7CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKIH0KIApAQCAtMTQzMyw3ICsx
NDc5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0
b3JlKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJlc3VsdCk7CisgICAgSURCRXJyb3Ig
ZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxv
Y2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRSZWNvcmQodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwgdHlwZSwg
cmVzdWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQpAQCAtMTQ0NCw5ICsxNDk0
LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCh1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCIpOwogCiAgICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURCRXJy
b3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQodHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmVjb3JkVHlw
ZSwgcmFuZ2UsIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRJbmRleFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCByZWNvcmRUeXBlLCByYW5nZSwgcmVz
dWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRSZWNvcmQsIGNh
bGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQpAQCAtMTQ2Nyw3ICsxNTIwLDEx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwog
CiAgICAgSURCR2V0QWxsUmVzdWx0IHJlc3VsdDsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxsUmVj
b3Jkc0RhdGEsIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRBbGxSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxs
UmVjb3Jkc0RhdGEsIHJlc3VsdCk7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtR2V0QWxsUmVjb3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShyZXN1
bHQpKSk7CiB9CkBAIC0xNTExLDcgKzE1NjgsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUK
ICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIAogICAgIHVpbnQ2NF90IGNvdW50
OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIGtl
eVJhbmdlRGF0YSwgY291bnQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+Z2V0Q291bnQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCBjb3VudCk7CisgICAg
fQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIGNvdW50KSk7CiB9CkBAIC0xNTUxLDcgKzE2MTIsMTEgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIsIGNvbnN0IEkKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCIpOwog
Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlKTsKKyAgICBJREJF
cnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0
b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSk7CisgICAg
fQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtRGVsZXRlUmVjb3JkLCBjYWxsYmFja0lk
ZW50aWZpZXIsIGVycm9yKSk7CiB9CkBAIC0xNTkyLDcgKzE2NTcsMTEgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybU9wZW5DdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJREIKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybU9wZW5DdXJzb3IiKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0gICAgSURC
RXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGluZm8sIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5vcGVuQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbywg
cmVzdWx0KTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1PcGVuQ3Vyc29y
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKIH0KQEAgLTE2MzMsNyArMTcw
MiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50
NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yIik7CiAKICAgICBJREJHZXRS
ZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPml0ZXJh
dGVDdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBkYXRhLCBy
ZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIs
IGRhdGEsIHJlc3VsdCk7CisgICAgfQogCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jdXJzb3JQcmVmZXRjaGVzLmFkZChjdXJzb3JJZGVudGlm
aWVyKTsKQEAgLTE2NTAsMTAgKzE3MjMsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnMKICAg
ICBBU1NFUlQobV9jdXJzb3JQcmVmZXRjaGVzLmNvbnRhaW5zKGN1cnNvcklkZW50aWZpZXIpKTsK
ICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVByZWZl
dGNoQ3Vyc29yIik7CiAKLSAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSB8fCAhbV9i
YWNraW5nU3RvcmUtPnByZWZldGNoQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vyc29y
SWRlbnRpZmllcikpCisgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsKICAgICAg
ICAgbV9jdXJzb3JQcmVmZXRjaGVzLnJlbW92ZShjdXJzb3JJZGVudGlmaWVyKTsKLSAgICBlbHNl
Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVmZXRjaEN1cnNvciwgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOwor
ICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5wcmVmZXRjaEN1cnNvcih0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICBtX2N1cnNvclByZWZl
dGNoZXMucmVtb3ZlKGN1cnNvcklkZW50aWZpZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVByZWZldGNoQ3Vyc29yLCB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIpKTsKIH0KIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0
KQpAQCAtMTcxOCw3ICsxODAxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
b21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIElEQkVycm9yIGVy
cm9yID0gbV9iYWNraW5nU3RvcmUtPmNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRp
Zmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIH0KICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1Db21taXRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKQEAgLTE4MDgsNyArMTg5
NSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWJvcnRUcmFuc2FjdGlvbih1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbgogICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
QWJvcnRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBJREJFcnJv
ciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3Jl
TG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmFib3J0VHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICB9CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5
KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJm
b3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyKSk7CiB9CiAKQEAgLTIwMTgsNyArMjEwOSwxMiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKHVpbnQ2
NF90IGNhbGxiYQogewogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlvbkluQmFja2luZ1N0b3JlIik7CiAKLSAgICBJREJF
cnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5iZWdpblRyYW5zYWN0aW9uKGluZm8pOworICAg
IElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNr
aW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFu
c2FjdGlvbihpbmZvKTsKKyAgICB9CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1BY3Rp
dmF0ZVRyYW5zYWN0aW9uSW5CYWNraW5nU3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Ip
KTsKIH0KIApAQCAtMjM1MywyMCArMjQ0OSwyOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpm
b3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKIAogdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKKyAgICBBU1NFUlQobV9iYWNraW5n
U3RvcmVMb2NrLmlzSGVsZCgpKTsKICAgICB0cmFuc2FjdGlvbi5zZXRSZXN1bHQobV9iYWNraW5n
U3RvcmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkp
OwogICAgIHRyYW5zYWN0aW9uLnNldFN0YXRlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OlN0YXRlOjpBYm9ydGVkKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJh
bnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiB7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlTG9jay5pc0hlbGQoKSk7CiAgICAg
dHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0b3JlLT5jb21taXRUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CiAgICAgdHJhbnNhY3Rpb24uc2V0U3Rh
dGUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkNvbW1pdHRlZCk7CiB9CiAK
LXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdXNwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCisgICAgaWYgKG1faXNTdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lz
U3VzcGVuZGVkID0gdHJ1ZTsKKworICAgIG1fYmFja2luZ1N0b3JlTG9jay5sb2NrKCk7CisKICAg
ICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9pblByb2dyZXNzVHJhbnNh
Y3Rpb25zLmtleXMoKSkpIHsKICAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1faW5Qcm9ncmVz
c1RyYW5zYWN0aW9ucy5nZXQoaWRlbnRpZmllcik7CiAgICAgICAgIGFib3J0VHJhbnNhY3Rpb25P
bk1haW5UaHJlYWQoKnRyYW5zYWN0aW9uKTsKQEAgLTIzOTIsNiArMjQ5NiwxOCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKQogICAgIH0KIH0KIAor
dm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cmVzdW1lKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKCFtX2lzU3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlTG9jay5p
c0hlbGQoKSk7CisgICAgbV9iYWNraW5nU3RvcmVMb2NrLnVubG9jaygpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaAppbmRleCBlYzNmYzBjNzNlYTMwZTI0ZTdhMGNlZTU4ODlmMzk2MWYwY2M0YzI3Li5l
YWRiZmZkMjFmMjk3YmRiN2Y4YzQzODU0NTJjYjMzM2IyMTY4ZTI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaApAQCAtMTE2LDcgKzExNiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFyZENsb3Nl
ZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVybiBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRl
OyB9CiAKLSAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpOworICAgIHZvaWQgc3Vz
cGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVE
YXRhYmFzZU9wZXJhdGlvbnMoKTsKQEAgLTI2OSw2ICsyNzAsNyBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSB7IGZhbHNlIH07CiAgICAgSURCRXJyb3IgbV9i
YWNraW5nU3RvcmVPcGVuRXJyb3I7CisgICAgTG9jayBtX2JhY2tpbmdTdG9yZUxvY2s7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9kYXRhYmFzZUluZm87CiAgICAgc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5m
bzsKQEAgLTMwNiw2ICszMDgsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJ
ZGVudGlmaWVyPiBtX2N1cnNvclByZWZldGNoZXM7CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCB1
aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJbmNyZWFzZVRhc2tzOworCisgICAgYm9vbCBtX2lzU3Vz
cGVuZGVkIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384106</attachid>
            <date>2019-11-21 16:51:54 -0800</date>
            <delta_ts>2019-11-22 10:55:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204379-20191121165153.patch</filename>
            <type>text/plain</type>
            <size>101771</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ1YjAyMDc1NDRkZmRl
ZDJjMjYyMGYyMDUyOTVhZGJhYWNhMzRlMC4uOWRlMTE4ZDc2ZmYyMTlhOTcxM2ZhZGM4NjUwNjJj
MTg0NzQ1YTQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNyBAQAorMjAxOS0xMS0yMSAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREI6IGxvY2st
YmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc3VzcGVuc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0Mzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVzdDog
SW5kZXhlZERCLkluZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5CisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6dHJ5U3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6cmVzdW1lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6cmVnaXN0
ZXJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6dW5y
ZWdpc3RlckRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246Ok1lbW9yeUJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFi
YXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6YmVnaW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0
b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJC
YWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZW5l
cmF0ZUtleU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRv
ck51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlE
QkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6aW5mb0Zvck9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpkYXRhYmFzZVNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlz
aERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNsZWFyT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpnZW5lcmF0ZUtleU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdl
bmVyYXRvck51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cHJlZmV0Y2hDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmluZm9Gb3JPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aGFzVHJhbnNhY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duRm9yQ2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVN0YXJ0VmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxl
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0
ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1EZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVu
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1JdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVmZXRjaEN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cGVyZm9ybUFjdGl2YXRlVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5z
YWN0aW9uT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnN1c3BlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cmVzdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaEFjdGl2ZVRyYW5z
YWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmg6CisKIDIwMTktMTEtMjEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFRpZ2h0ZW4gU2Nyb2xsaW5nVHJlZU5vZGUgdHJlZSBtdXRh
dGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCAxMzMyZmZkZDc1Y2NkNmIxNmU0ODMwYTc1ZGY4
NDY0YWRjNjE4NTc2Li5lNDliMzZmMjFjZGY5ZWI3NjQ4NzYwNWRmNGE0ZWVjYjRiMmI1ZTM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFj
a2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQkJhY2tpbmdTdG9yZS5oCkBAIC02MCw0MyArNjAsNDQgQEAgY2xhc3MgSURCQmFja2luZ1N0
b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7IFJFTEVBU0Vf
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7IH0KIAotICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0T3JF
c3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJikgPSAwOwotCi0gICAgdmlydHVh
bCBJREJFcnJvciBiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpID0g
MDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpID0gMDsKLSAgICB2aXJ0dWFsIElE
QkVycm9yIGNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIElEQkVycm9yIGNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCBJREJFcnJv
ciBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSA9IDA7Ci0gICAg
dmlydHVhbCBJREJFcnJvciByZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGNs
ZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgPSAwOwotICAgIHZpcnR1
YWwgSURCRXJyb3IgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYpID0gMDsKLSAgICB2aXJ0dWFs
IElEQkVycm9yIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90
IGluZGV4SWRlbnRpZmllcikgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgcmVuYW1lSW5kZXgo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG5ld05hbWUpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0c0lu
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYs
IGJvb2wmIGtleUV4aXN0cykgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmFuZ2Uo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJikgPSAwOwot
ICAgIHZpcnR1YWwgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBjb25z
dCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmKSA9IDA7Ci0gICAgdmlydHVhbCBJREJFcnJv
ciBnZXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiwgSURCR2V0UmVjb3JkRGF0YVR5cGUsIElEQkdldFJlc3VsdCYgb3V0VmFsdWUpID0gMDsK
LSAgICB2aXJ0dWFsIElEQkVycm9yIGdldEFsbFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRh
JiwgSURCR2V0QWxsUmVzdWx0JiBvdXRWYWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3Ig
Z2V0SW5kZXhSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJ
ZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiwgSURCR2V0UmVzdWx0JiBvdXRWYWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3Ig
Z2V0Q291bnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCB1aW50NjRfdCYgb3V0Q291bnQpID0gMDsKLSAg
ICB2aXJ0dWFsIElEQkVycm9yIGdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90JiBrZXlOdW1iZXIpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIHJl
dmVydEdlbmVyYXRlZEtleU51bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBrZXlOdW1iZXIpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIG1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yTnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGRvdWJsZSBuZXdLZXlOdW1i
ZXIpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIG9wZW5DdXJzb3IoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8m
LCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCkgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgaXRl
cmF0ZUN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25z
dCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIElEQkdldFJlc3VsdCYgb3V0UmVzdWx0KSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1
cnNvcklkZW50aWZpZXIpID0gMDsKLQotICAgIHZpcnR1YWwgSURCT2JqZWN0U3RvcmVJbmZvKiBp
bmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpID0gMDsKLQotICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNFcGhlbWVyYWwoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7
Ci0gICAgdmlydHVhbCB1aW50NjRfdCBkYXRhYmFzZVNpemUoKSBjb25zdCA9IDA7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJikg
Y29uc3QgPSAwOworICAgIC8vIEFsbCBmdW5jdGlvbnMgc2hvdWxkIHRha2UgYSBMb2NrSG9sZGVy
IHRvIG1ha2Ugc3VyZSB0aGV5IGhhdmUgYWNxdWlyZWQgbG9jayB3aGVuIGJlaW5nIGNhbGxlZC4K
KyAgICAvLyBUaGlzIGlzIHVzZWQgdG8gbWFrZSBzdXJlIGRhdGFiYXNlIG9wZXJhdGlvbnMgd291
bGQgbm90IGJlIHBlcmZvcm1lZCB3aGVuIHByb2Nlc3MgaXMgc3VzcGVuZGVkLgorICAgIHZpcnR1
YWwgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiwg
Y29uc3QgTG9ja0hvbGRlciYpID0gMDsKKworICAgIHZpcnR1YWwgSURCRXJyb3IgYmVnaW5UcmFu
c2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBjb25zdCBMb2NrSG9sZGVyJikgPSAw
OworICAgIHZpcnR1YWwgSURCRXJyb3IgYWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpID0g
MDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikg
PSAwOworCisgICAgdmlydHVhbCBJREJFcnJvciBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0
U3RvcmVJbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9y
IGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExvY2tI
b2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciByZW5hbWVPYmplY3RTdG9yZShjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IExvY2tI
b2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBjbGVhck9iamVjdFN0b3JlKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CisgICAgdmlydHVh
bCBJREJFcnJvciBjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiwgY29uc3QgTG9ja0hvbGRlciYp
ID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpID0g
MDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIHJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBj
b25zdCBMb2NrSG9sZGVyJikgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3Iga2V5RXhpc3RzSW5P
YmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwg
Ym9vbCYga2V5RXhpc3RzLCBjb25zdCBMb2NrSG9sZGVyJikgPSAwOworICAgIHZpcnR1YWwgSURC
RXJyb3IgZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9y
IGFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0
IElEQlZhbHVlJiwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9y
IGdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURh
dGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSwgSURCR2V0UmVzdWx0JiBvdXRWYWx1ZSwgY29uc3Qg
TG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdldEFsbFJlY29yZHMoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJiwgSURCR2V0QWxsUmVzdWx0JiBvdXRWYWx1ZSwgY29uc3QgTG9j
a0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdldEluZGV4UmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERC
OjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlc3VsdCYg
b3V0VmFsdWUsIGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBn
ZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIHVpbnQ2NF90JiBvdXRDb3VudCwgY29uc3QgTG9j
a0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdlbmVyYXRlS2V5TnVtYmVyKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90JiBrZXlOdW1iZXIsIGNvbnN0IExvY2tI
b2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciByZXZlcnRHZW5lcmF0ZWRLZXlOdW1i
ZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qga2V5TnVtYmVyLCBjb25zdCBM
b2NrSG9sZGVyJikgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3IgbWF5YmVVcGRhdGVLZXlHZW5l
cmF0b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgZG91YmxlIG5ld0tleU51bWJl
ciwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIG9wZW5DdXJz
b3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQkN1cnNvckluZm8mLCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCwgY29uc3QgTG9ja0hv
bGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRh
dGEmLCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vy
c29ySWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKworICAgIHZpcnR1YWwgSURC
T2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVCYWNraW5nU3RvcmUoY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKworICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyhjb25zdCBMb2NrSG9sZGVyJikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBpc0VwaGVtZXJhbChjb25zdCBMb2NrSG9sZGVyJikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwg
Y29uc3QgTG9ja0hvbGRlciYpIGNvbnN0ID0gMDsKIHByb3RlY3RlZDoKICAgICBJREJCYWNraW5n
U3RvcmUoKSB7IFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7IH0KIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
CmluZGV4IGU2MWRiOGM5NDI4ZDk4NGRhNjQ2OTZlN2M4NDI3ODc0MjY5YzI3ZTYuLjNlZmE5Nzg3
YWJkNGFlNThmYjdmM2Y3ZmVjMTQwNzYwNDZiMzQ5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC04NTMsMTQg
Kzg1MywxMSBAQCB2b2lkIElEQlNlcnZlcjo6dHJ5U3RvcChTaG91bGRGb3JjZVN0b3Agc2hvdWxk
Rm9yY2VTdG9wKQogICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBzdXNwZW5kQW5kV2FpdCgpOwotICAgIGlmIChzaG91bGRGb3JjZVN0b3Ag
PT0gU2hvdWxkRm9yY2VTdG9wOjpObyAmJiBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5z
YWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIENyb3NzVGhyZWFkVGFza0hhbmRsZXI6OnJl
c3VtZSgpOworICAgIGlmIChzaG91bGRGb3JjZVN0b3AgPT0gU2hvdWxkRm9yY2VTdG9wOjpObyAm
JiBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fdW5pcXVl
SURCRGF0YWJhc2VNYXAudmFsdWVzKCkpCi0gICAgICAgIGRhdGFiYXNlLT5maW5pc2hBY3RpdmVU
cmFuc2FjdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlIDogbV9hbGxVbmlxdWVJREJE
YXRhYmFzZXMpCisgICAgICAgIGRhdGFiYXNlLT5zdXNwZW5kKCk7CiB9CiAKIHZvaWQgSURCU2Vy
dmVyOjpyZXN1bWUoKQpAQCAtODY4LDcgKzg2NSw4IEBAIHZvaWQgSURCU2VydmVyOjpyZXN1bWUo
KQogICAgIGlmIChtX3Nlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDcm9zc1RocmVhZFRhc2tIYW5kbGVyOjpyZXN1bWUoKTsKKyAgICBmb3IgKGF1dG8mIGRh
dGFiYXNlIDogbV9hbGxVbmlxdWVJREJEYXRhYmFzZXMpCisgICAgICAgIGRhdGFiYXNlLT5yZXN1
bWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggZDNhMjIzZDkz
MmQ5MTU5ZDU0NjY2MjlmNzE3ZWZmYjU3NzQxM2NhZi4uZGZiZmY2YjZiZDIwOTVhYjg0MWQ4NTA1
NzcyY2IyYjY0NzNjYzA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTIzLDYgKzEyMyw5IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyeVN0b3AoU2hvdWxkRm9yY2VTdG9wKTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlc3VtZSgpOwogCisgICAgdm9pZCByZWdpc3RlckRhdGFiYXNlKFVu
aXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5hZGQo
JmRhdGFiYXNlKTsgfQorICAgIHZvaWQgdW5yZWdpc3RlckRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFi
YXNlJiBkYXRhYmFzZSkgeyBtX2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5yZW1vdmUoJmRhdGFiYXNl
KTsgfQorCiBwcml2YXRlOgogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgUXVvdGFNYW5h
Z2VyR2V0dGVyJiYpOwogICAgIElEQlNlcnZlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdlckdldHRlciYmKTsKQEAgLTE5MCw2
ICsxOTMsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogICAg
IEhhc2hNYXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJlZlB0cjxJREJDb25uZWN0aW9uVG9D
bGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJEYXRhYmFzZUlkZW50aWZp
ZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFzZT4+IG1fdW5pcXVlSURCRGF0YWJh
c2VNYXA7CisgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG1fYWxsVW5pcXVlSURCRGF0
YWJhc2VzOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0
aW9uKj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25zOwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVu
dGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4gbV90cmFuc2FjdGlvbnM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLmNwcAppbmRleCA1ZTcx
NDQ5Nzg0YTBkYTA3Njc3ODlhOGRlZGM1MjI2ODlmNGQ4ZGNjLi5iYzk3YTg0YzIyMzM1N2U2OTI4
ZThlYTk2MGZkOWYxNDU1NjEzNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbi5jcHAKQEAgLTM5LDE4ICszOSwxOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxNZW1vcnlCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbj4gTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmNyZWF0ZShN
ZW1vcnlJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCVHJhbnNhY3Rpb25J
bmZvJiBpbmZvKQorc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
PiBNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6Y3JlYXRlKE1lbW9yeUlEQkJhY2tpbmdT
dG9yZSYgYmFja2luZ1N0b3JlLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8sIGNvbnN0
IExvY2tIb2xkZXImIGxvY2tlcikKIHsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxNZW1vcnlCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbj4oYmFja2luZ1N0b3JlLCBpbmZvKTsKKyAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbj4oYmFja2luZ1N0b3JlLCBpbmZv
LCBsb2NrZXIpOwogfQogCi1NZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6TWVtb3J5QmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oTWVtb3J5SURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKK01lbW9yeUJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uOjpNZW1vcnlCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihNZW1vcnlJREJCYWNraW5nU3Rv
cmUmIGJhY2tpbmdTdG9yZSwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvLCBjb25zdCBM
b2NrSG9sZGVyJiBsb2NrZXIpCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAg
ICAgLCBtX2luZm8oaW5mbykKIHsKICAgICBpZiAobV9pbmZvLm1vZGUoKSA9PSBJREJUcmFuc2Fj
dGlvbk1vZGU6OlZlcnNpb25jaGFuZ2UpIHsKICAgICAgICAgSURCRGF0YWJhc2VJbmZvIGluZm87
Ci0gICAgICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS5nZXRPckVzdGFibGlzaERhdGFi
YXNlSW5mbyhpbmZvKTsKKyAgICAgICAgYXV0byBlcnJvciA9IG1fYmFja2luZ1N0b3JlLmdldE9y
RXN0YWJsaXNoRGF0YWJhc2VJbmZvKGluZm8sIGxvY2tlcik7CiAgICAgICAgIGlmIChlcnJvci5p
c051bGwoKSkKICAgICAgICAgICAgIG1fb3JpZ2luYWxEYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVl
PElEQkRhdGFiYXNlSW5mbz4oaW5mbyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24uaAppbmRleCBkZjFhNGU0MjRmNWE2N2M2YmMxM2YzOTBkYTI5Y2Q1
MTE2MDIzODI2Li41MDU4M2Q1YzE1NWIzYzNhNmM1OWUzNWJkMmMxMzRiMGZhZDVhZTk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uaApAQCAtNDcsOSArNDcs
OSBAQCB0eXBlZGVmIEhhc2hNYXA8SURCS2V5RGF0YSwgVGhyZWFkU2FmZURhdGFCdWZmZXIsIElE
QktleURhdGFIYXNoLCBJREJLZXlEYXRhSGFzaAogY2xhc3MgTWVtb3J5QmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24+IGNyZWF0
ZShNZW1vcnlJREJCYWNraW5nU3RvcmUmLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE1lbW9yeUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uPiBj
cmVhdGUoTWVtb3J5SURCQmFja2luZ1N0b3JlJiwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiwg
Y29uc3QgTG9ja0hvbGRlciYpOwogCi0gICAgTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
TWVtb3J5SURCQmFja2luZ1N0b3JlJiwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7CisgICAg
TWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oTWVtb3J5SURCQmFja2luZ1N0b3JlJiwgY29u
c3QgSURCVHJhbnNhY3Rpb25JbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpOwogICAgIH5NZW1vcnlC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpOwogCiAgICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBj
b25zdCB7IHJldHVybiBtX2luZm8ubW9kZSgpID09IElEQlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lv
bmNoYW5nZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA5NTE4ZjRm
MThlZTY1NWQyN2M1OTVhY2IwOWU3MDMxMWRmYTQ0MTFmLi44NjNkYTUwZjJjNTFjMjg2N2U3ZjRi
MjdhNjVmZmI4NTg5MjMzMmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcApA
QCAtNTksNyArNTksNyBAQCBNZW1vcnlJREJCYWNraW5nU3RvcmU6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IElEQgogCiBNZW1vcnlJREJCYWNr
aW5nU3RvcmU6On5NZW1vcnlJREJCYWNraW5nU3RvcmUoKSA9IGRlZmF1bHQ7CiAKLUlEQkVycm9y
IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0
YWJhc2VJbmZvJiBpbmZvKQorSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRPckVz
dGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0IExvY2tIb2xk
ZXImKQogewogICAgIGlmICghbV9kYXRhYmFzZUluZm8pCiAgICAgICAgIG1fZGF0YWJhc2VJbmZv
ID0gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUo
KSwgMCk7CkBAIC03NiwxNCArNzYsMTQgQEAgdm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnNl
dERhdGFiYXNlSW5mbyhjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8pCiAgICAgbV9kYXRhYmFz
ZUluZm8gPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oaW5mbyk7CiB9CiAKLUlEQkVycm9y
IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2Fj
dGlvbkluZm8mIGluZm8pCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJh
bnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvLCBjb25zdCBMb2NrSG9sZGVy
JiBsb2NrZXIpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6
YmVnaW5UcmFuc2FjdGlvbiIpOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKGlu
Zm8uaWRlbnRpZmllcigpKSkKICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgSW52YWxpZFN0YXRl
RXJyb3IsICJCYWNraW5nIHN0b3JlIGFza2VkIHRvIGNyZWF0ZSB0cmFuc2FjdGlvbiBpdCBhbHJl
YWR5IGhhcyBhIHJlY29yZCBvZiIgfTsKIAotICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBNZW1vcnlC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKKyAgICBhdXRvIHRy
YW5zYWN0aW9uID0gTWVtb3J5QmFja2luZ1N0b3JlVHJhbnNhY3Rpb246OmNyZWF0ZSgqdGhpcywg
aW5mbywgbG9ja2VyKTsKIAogICAgIC8vIFZlcnNpb25DaGFuZ2UgdHJhbnNhY3Rpb25zIGFyZSBz
Y29wZWQgdG8gImV2ZXJ5IG9iamVjdCBzdG9yZSIuCiAgICAgaWYgKHRyYW5zYWN0aW9uLT5pc1Zl
cnNpb25DaGFuZ2UoKSkgewpAQCAtMTAxLDcgKzEwMSw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGlu
Zm8pCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFj
a2luZ1N0b3JlOjphYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyKQorSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjph
Ym9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVt
b3J5SURCQmFja2luZ1N0b3JlOjphYm9ydFRyYW5zYWN0aW9uIC0gJXMiLCB0cmFuc2FjdGlvbklk
ZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC0xMTQsNyArMTE0
LDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjphYm9ydFRyYW5zYWN0aW9uKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHIKICAgICByZXR1cm4gSURCRXJyb3IgeyB9Owog
fQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQorSURCRXJy
b3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJh
bnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAKQEAgLTEyNyw3ICsxMjcsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNr
aW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKK0lE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYgaW5mbywgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUgLSBhZGRpbmcgT1Mg
JXMgd2l0aCBJRCAlIiBQUkl1NjQsIGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIGluZm8uaWRl
bnRpZmllcigpKTsKIApAQCAtMTUwLDcgKzE1MCw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
CiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQorSURC
RXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSIpOwogCkBAIC0xNzMs
NyArMTczLDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKK0lE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBMb2NrSG9sZGVy
JikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVP
YmplY3RTdG9yZSIpOwogCkBAIC0yMDIsNyArMjAyLDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFj
a2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHQKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNr
aW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKK0lE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlIik7CiAgICAgQVNTRVJU
KG9iamVjdFN0b3JlSWRlbnRpZmllcik7CkBAIC0yMjMsNyArMjIzLDcgQEAgSURCRXJyb3IgTWVt
b3J5SURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHIKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1v
cnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCitJREJF
cnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8sIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJC
YWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4Iik7CiAKQEAgLTIzOCw3ICsyMzgsNyBAQCBJREJFcnJv
ciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhYwogICAgIHJldHVybiBvYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgoKnJh
d1RyYW5zYWN0aW9uLCBpbmZvKTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjpkZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3Qg
TG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXgiKTsKIApAQCAtMjUzLDcgKzI1Myw3IEBAIElEQkVycm9yIE1lbW9yeUlE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjCiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5kZWxldGVJbmRleCgqcmF3VHJhbnNhY3Rp
b24sIGluZGV4SWRlbnRpZmllcik7CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9y
ZTo6cmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJ
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpCitJREJFcnJvciBNZW1vcnlJREJCYWNr
aW5nU3RvcmU6OnJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90
IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBMb2NrSG9sZGVy
JikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVJ
bmRleCIpOwogCkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OnJlc3RvcmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChSZWY8TWVtb3J5T2IKICAg
ICByZWdpc3Rlck9iamVjdFN0b3JlKFdURk1vdmUob2JqZWN0U3RvcmUpKTsKIH0KIAotSURCRXJy
b3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgSURCS2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQorSURCRXJyb3IgTWVtb3J5
SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVj
dFN0b3JlIik7CiAKQEAgLTMxOSw3ICszMTksNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5n
U3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaQog
ICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSkKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
UmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBy
YW5nZSwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmFuZ2UiKTsKIApAQCAtMzM2LDcgKzMzNiw3IEBAIElEQkVy
cm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJy
b3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYg
b2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1
ZSYgdmFsdWUpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQktleURhdGEmIGtleURh
dGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkIik7CiAKQEAgLTM1
Myw3ICszNTMsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIHJldHVybiBvYmplY3RT
dG9yZS0+YWRkUmVjb3JkKCp0cmFuc2FjdGlvbiwga2V5RGF0YSwgdmFsdWUpOwogfQogCi1JREJF
cnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJREJHZXRSZWNvcmREYXRhVHlw
ZSB0eXBlLCBJREJHZXRSZXN1bHQmIG91dFZhbHVlKQorSURCRXJyb3IgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpnZXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSwgSURCR2V0UmVjb3JkRGF0YVR5cGUgdHlwZSwgSURCR2V0UmVzdWx0
JiBvdXRWYWx1ZSwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkIik7CiAKQEAgLTM4MCw3ICszODAsNyBAQCBJ
REJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVj
b3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkKK0lE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVj
b3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCwgY29u
c3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6Z2V0QWxsUmVjb3JkcyIpOwogCkBAIC00MDUsNyArNDA1LDcgQEAgSURCRXJyb3IgTWVt
b3J5SURCQmFja2luZ1N0b3JlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnMKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1v
cnlJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUg
cmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgSURCR2V0UmVzdWx0JiBv
dXRWYWx1ZSkKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRl
eGVkREI6OkluZGV4UmVjb3JkVHlwZSByZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlLCBJREJHZXRSZXN1bHQmIG91dFZhbHVlLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRJbmRleFJlY29yZCIp
OwogCkBAIC00MjIsNyArNDIyLDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpn
ZXRJbmRleFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW4KICAgICByZXR1
cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6Omdl
dENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgdWludDY0X3QmIG91dENvdW50KQorSURC
RXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYg
cmFuZ2UsIHVpbnQ2NF90JiBvdXRDb3VudCwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0Q291bnQiKTsKIApAQCAtNDQw
LDcgKzQ0MCw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0Q291bnQoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvCiAgICAgcmV0dXJuIElEQkVycm9y
IHsgfTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtleU51
bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCYga2V5TnVtYmVyKQorSURC
RXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtleU51bWJlcihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCYga2V5TnVtYmVyLCBjb25zdCBMb2NrSG9sZGVyJikK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtl
eU51bWJlciIpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwpAQCAtNDU5LDcg
KzQ1OSw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1i
ZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgcmV0dXJuIElEQkVycm9yIHsg
fTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZXZlcnRHZW5lcmF0ZWRL
ZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qga2V5TnVtYmVyKQor
SURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qga2V5TnVtYmVyLCBjb25zdCBMb2Nr
SG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpy
ZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIiKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKQEAgLTQ3NCw3ICs0NzQsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OnJldmVydEdlbmVyYXRlZEtleU51bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aQogICAgIHJl
dHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6
bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
ZG91YmxlIG5ld0tleU51bWJlcikKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgZG91
YmxlIG5ld0tleU51bWJlciwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIi
KTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKQEAgLTUwMyw3ICs1MDMsNyBA
QCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9y
TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSQogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAK
LUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5m
byYgaW5mbywgSURCR2V0UmVzdWx0JiBvdXREYXRhKQorSURCRXJyb3IgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBJREJHZXRSZXN1bHQmIG91
dERhdGEsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJ
REJCYWNraW5nU3RvcmU6Om9wZW5DdXJzb3IiKTsKIApAQCAtNTQ1LDcgKzU0NSw3IEBAIElEQkVy
cm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0CiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJy
b3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRh
LCBJREJHZXRSZXN1bHQmIG91dERhdGEpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwg
Y29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIElEQkdldFJlc3VsdCYgb3V0RGF0YSwg
Y29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6aXRlcmF0ZUN1cnNvciIpOwogCkBAIC01OTIsMjQgKzU5MiwxOCBAQCBSZWZQdHI8
TWVtb3J5T2JqZWN0U3RvcmU+IE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6dGFrZU9iamVjdFN0b3Jl
QnlJZGVudGlmaWVyKHVpbgogICAgIHJldHVybiBvYmplY3RTdG9yZUJ5SWRlbnRpZmllcjsKIH0K
IAotSURCT2JqZWN0U3RvcmVJbmZvKiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmluZm9Gb3JPYmpl
Y3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCitJREJPYmplY3RTdG9yZUlu
Zm8qIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6aW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgQVNTRVJUKG1f
ZGF0YWJhc2VJbmZvKTsKICAgICByZXR1cm4gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGlu
Z09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgTWVtb3J5SURC
QmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUoKQordm9pZCBNZW1vcnlJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICAvLyBU
aGUgaW4tbWVtb3J5IElEQiBiYWNraW5nIHN0b3JlIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnkgY2xl
YW51cCB3aGVuIGl0IGlzIGRlbGV0ZWQuCiB9CiAKLXVpbnQ2NF90IE1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6ZGF0YWJhc2VTaXplKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjbG9z
ZSgpCit2b2lkIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y2xvc2UoY29uc3QgTG9ja0hvbGRlciYp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRleCBiMmI3MzU3ZWUzYzBm
OWQ0NGUwYTZiOWE1ZjlkZGZjNDJiMzEyZWE4Li5hNWY2ZmY3ZDYyMjBiMzk2MjFiNzE3ZmQyNjBl
MjRjYTE0NjlhYTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBAIC00Nyw0OSAr
NDcsNDggQEAgcHVibGljOgogICAgIE1lbW9yeUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25J
RCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgfk1lbW9yeUlEQkJhY2tpbmdT
dG9yZSgpIGZpbmFsOwogCi0gICAgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8o
SURCRGF0YWJhc2VJbmZvJikgZmluYWw7CisgICAgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOwogICAg
IHZvaWQgc2V0RGF0YWJhc2VJbmZvKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYpOwogCi0gICAgSURC
RXJyb3IgYmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKSBmaW5hbDsK
LSAgICBJREJFcnJvciBhYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJFcnJvciBjb21taXRUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
cikgZmluYWw7Ci0gICAgSURCRXJyb3IgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3Jl
SW5mbyYpIGZpbmFsOwotICAgIElEQkVycm9yIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIpIGZpbmFsOwotICAgIElEQkVycm9yIHJlbmFtZU9iamVjdFN0b3JlKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkgZmluYWw7Ci0g
ICAgSURCRXJyb3IgY2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBm
aW5hbDsKLSAgICBJREJFcnJvciBjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJikgZmluYWw7Ci0g
ICAgSURCRXJyb3IgZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0
X3QgaW5kZXhJZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJFcnJvciByZW5hbWVJbmRleChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgbmV3TmFtZSkgZmluYWw7Ci0gICAgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmplY3RTdG9y
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYga2V5
RXhpc3RzKSBmaW5hbDsKLSAgICBJREJFcnJvciBkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKSBmaW5hbDsKLSAgICBJREJFcnJvciBh
ZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJ
REJWYWx1ZSYpIGZpbmFsOwotICAgIElEQkVycm9yIGdldFJlY29yZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSwg
SURCR2V0UmVzdWx0JiBvdXRWYWx1ZSkgZmluYWw7Ci0gICAgSURCRXJyb3IgZ2V0QWxsUmVjb3Jk
cyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBJREJHZXRBbGxSZXN1bHQmIG91dFZhbHVlKSBmaW5h
bDsKLSAgICBJREJFcnJvciBnZXRJbmRleFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRSZXN1bHQmIG91dFZhbHVlKSBmaW5hbDsKLSAg
ICBJREJFcnJvciBnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBp
bmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIHVpbnQ2NF90JiBvdXRDb3Vu
dCkgZmluYWw7Ci0gICAgSURCRXJyb3IgZ2VuZXJhdGVLZXlOdW1iZXIoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgdWludDY0X3QmIGtleU51bWJlcikgZmluYWw7Ci0gICAgSURCRXJyb3IgcmV2
ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90
IGtleU51bWJlcikgZmluYWw7Ci0gICAgSURCRXJyb3IgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JO
dW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgZG91YmxlIG5ld0tleU51bWJlcikgZmlu
YWw7Ci0gICAgSURCRXJyb3Igb3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYsIElEQkdldFJlc3Vs
dCYgb3V0UmVzdWx0KSBmaW5hbDsKLSAgICBJREJFcnJvciBpdGVyYXRlQ3Vyc29yKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JE
YXRhJiwgSURCR2V0UmVzdWx0JiBvdXRSZXN1bHQpIGZpbmFsOwotICAgIGJvb2wgcHJlZmV0Y2hD
dXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIElEQk9iamVjdFN0b3JlSW5m
byogaW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgZmlu
YWw7Ci0gICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoKSBmaW5hbDsKLQotICAgIGJvb2wgc3Vw
cG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgYm9vbCBpc0VwaGVtZXJhbCgpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBJREJFcnJv
ciBiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYsIGNvbnN0IExvY2tI
b2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBhYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVy
JikgZmluYWw7CisgICAgSURCRXJyb3IgY29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSBm
aW5hbDsKKyAgICBJREJFcnJvciBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZv
JiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGRlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsK
KyAgICBJREJFcnJvciByZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJ
REJFcnJvciBjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBjcmVhdGVJbmRleChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJ
bmZvJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGRlbGV0ZUluZGV4
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIHJlbmFtZUluZGV4KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBuZXdOYW1lLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3Iga2V5RXhp
c3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlE
YXRhJiwgYm9vbCYga2V5RXhpc3RzLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURC
RXJyb3IgZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGFkZFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZh
bHVlJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGdldFJlY29yZChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRS
ZWNvcmREYXRhVHlwZSwgSURCR2V0UmVzdWx0JiBvdXRWYWx1ZSwgY29uc3QgTG9ja0hvbGRlciYp
IGZpbmFsOworICAgIElEQkVycm9yIGdldEFsbFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRh
JiwgSURCR2V0QWxsUmVzdWx0JiBvdXRWYWx1ZSwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOwor
ICAgIElEQkVycm9yIGdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVp
bnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlc3VsdCYgb3V0VmFsdWUsIGNvbnN0IExvY2tIb2xk
ZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIHVp
bnQ2NF90JiBvdXRDb3VudCwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9y
IGdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90JiBr
ZXlOdW1iZXIsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciByZXZlcnRH
ZW5lcmF0ZWRLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qga2V5
TnVtYmVyLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgbWF5YmVVcGRh
dGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgZG91YmxlIG5l
d0tleU51bWJlciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIG9wZW5D
dXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkN1cnNvckluZm8mLCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCwgY29uc3QgTG9j
a0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEm
LCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAg
IGJvb2wgcHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBJREJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JPYmplY3RTdG9yZSh1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsK
KyAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisK
KyAgICBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKGNvbnN0IExvY2tIb2xk
ZXImKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc0VwaGVtZXJhbChjb25zdCBM
b2NrSG9sZGVyJikgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCByZW1vdmVPYmpl
Y3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYpOwogICAgIHZv
aWQgcmVzdG9yZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNoYW5nZUFib3J0KFJlZjxNZW1vcnlPYmpl
Y3RTdG9yZT4mJik7CiAKLSAgICBib29sIGhhc1RyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgaWRlbnRpZmllcikgY29uc3QgZmluYWwgeyByZXR1cm4gbV90cmFuc2FjdGlv
bnMuY29udGFpbnMoaWRlbnRpZmllcik7IH0KKyAgICBib29sIGhhc1RyYW5zYWN0aW9uKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpOyB9
CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPE1lbW9yeU9iamVjdFN0b3JlPiB0YWtlT2JqZWN0U3Rv
cmVCeUlkZW50aWZpZXIodWludDY0X3QgaWRlbnRpZmllcik7Ci0gICAgCi0gICAgdWludDY0X3Qg
ZGF0YWJhc2VTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbG9zZSgpIGZpbmFsOworCisg
ICAgdm9pZCBjbG9zZShjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CiAKICAgICBJREJEYXRhYmFz
ZUlkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vzc2lvbklE
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAyYWMwY2U1ZWJmM2ViNTVm
YmY0N2Y5ZTlmYjBkZGMzYTUwNTE5YTA5Li4zMmRmNTg3MTE0ZGFlYzBhMGRhZWViMzFhNGI5YTVh
MGE3MDFkYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNzgxLDcg
Kzc4MSw3IEBAIFN0cmluZyBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmZ1bGxEYXRhYmFzZURpcmVj
dG9yeVdpdGhVcGdyYWRlKCkKICAgICByZXR1cm4gbmV3RGF0YWJhc2VEaXJlY3Rvcnk7CiB9CiAK
LUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUlu
Zm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mIGluZm8sIGNvbnN0
IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvIC0gZGF0YWJhc2UgJXMiLCBtX2lkZW50aWZp
ZXIuZGF0YWJhc2VOYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTg1NCwxMyArODU0LDcgQEAg
dWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgZGlyZWN0b3IKICAgICByZXR1cm4gZGlza1VzYWdlOwogfQogCi11aW50
NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dERhdGFiYXNlRmlsZVNpemUoZnVsbERhdGFiYXNlUGF0aCgpKTsKLX0KLQotSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9u
SW5mbyYgaW5mbykKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2Fj
dGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8sIGNvbnN0IExvY2tIb2xkZXImKQog
ewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNh
Y3Rpb24gLSAlcyIsIGluZm8uaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKIApAQCAtODkxLDcgKzg4NSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8pCiAgICAg
cmV0dXJuIGVycm9yOwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFib3J0
VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRUcmFuc2FjdGlvbiAt
ICVzIiwgaWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTkx
MCw3ICs5MDQsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFib3J0VHJhbnNh
Y3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZAogICAgIHJldHVybiB0cmFuc2Fj
dGlvbi0+YWJvcnQoKTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjb21t
aXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCitJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rp
b24gLSAlcyIsIGlkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCkBA
IC05MzUsNyArOTI5LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjb21taXRU
cmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGkKICAgICByZXR1cm4gZXJy
b3I7CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgY29uc3Qg
TG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUgLSBhZGRpbmcgT1MgJXMgd2l0aCBJRCAlIiBQUkl1NjQsIGlu
Zm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIGluZm8uaWRlbnRpZmllcigpKTsKIApAQCAtOTg2LDcg
Kzk4MCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgcmV0dXJuIElEQkVycm9yIHsg
fTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBM
b2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVPYmplY3RTdG9yZSAtIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIG9iamVjdFN0b3Jl
SWRlbnRpZmllcik7CiAKQEAgLTEwNzcsNyArMTA3MSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0CiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIG5ld05hbWUpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJl
bmFtZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUgLSBvYmplY3Qgc3RvcmUgJSIgUFJJ
dTY0LCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwogCkBAIC0xMTA5LDcgKzExMDMsNyBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJRCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSAtIG9iamVjdCBzdG9y
ZSAlIiBQUkl1NjQsIG9iamVjdFN0b3JlSUQpOwogCkBAIC0xMTUwLDcgKzExNDQsNyBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cgogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bykKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4
SW5mbyYgaW5mbywgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXggLSBPYmplY3RTdG9yZSAlIiBQUkl1NjQg
IiwgSW5kZXggJSIgUFJJdTY0LCBpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpLCBpbmZvLmlk
ZW50aWZpZXIoKSk7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwpAQCAtMTMzNyw3ICsxMzMxLDcg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29y
ZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGkKIH0KIAogCi1JREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90
IGluZGV4SWRlbnRpZmllcikKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
LCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleCAtIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIG9iamVjdFN0
b3JlSWRlbnRpZmllcik7CiAKQEAgLTEzODIsNyArMTM3Niw3IEBAIElEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50
NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkKK0lEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0
IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OnJlbmFtZUluZGV4IC0gb2JqZWN0IHN0b3JlICUiIFBSSXU2NCAiLCBpbmRleCAlIiBQUkl1
NjQsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyKTsKIApAQCAtMTQyMyw3
ICsxNDE3LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGJv
b2wmIGtleUV4aXN0cykKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0
YSwgYm9vbCYga2V5RXhpc3RzLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIC0ga2V5
ICVzLCBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0LCBrZXlEYXRhLmxvZ2dpbmdTdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBvYmplY3RTdG9yZUlEKTsKIApAQCAtMTU5OCw3ICsxNTkyLDcgQEAgSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQoU1FMaXRlSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZVJhbmdlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlSYW5nZURh
dGEmIGtleVJhbmdlLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZSAtIHJhbmdlICVzLCBvYmplY3Qgc3Rv
cmUgJSIgUFJJdTY0LCBrZXlSYW5nZS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2Jq
ZWN0U3RvcmVJRCk7CiAKQEAgLTE3MTgsNyArMTcxMiw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RT
dG9yCiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKK0lEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVj
dFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZh
bHVlLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURC
QmFja2luZ1N0b3JlOjphZGRSZWNvcmQgLSBrZXkgJXMsIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQs
IGtleURhdGEubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9iamVjdFN0b3JlSW5mby5p
ZGVudGlmaWVyKCkpOwogCkBAIC0xODgwLDcgKzE4NzQsNyBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmdldEJsb2JSZWNvcmRzRm9yT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBv
YmplYwogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlLCBJREJHZXRSZWNvcmREYXRhVHlwZSB0eXBlLCBJREJHZXRSZXN1bHQm
IHJlc3VsdFZhbHVlKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UsIElEQkdl
dFJlY29yZERhdGFUeXBlIHR5cGUsIElEQkdldFJlc3VsdCYgcmVzdWx0VmFsdWUsIGNvbnN0IExv
Y2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmdldFJlY29yZCAtIGtleSByYW5nZSAlcywgb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwga2V5UmFu
Z2UubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9iamVjdFN0b3JlSUQpOwogCkBAIC0y
MDE1LDcgKzIwMDksNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29y
ZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgIHJldHVybiBJREJF
cnJvciB7IH07CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVj
b3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBJREJHZXRBbGxS
ZXN1bHQmIHJlc3VsdCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsUmVj
b3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBJREJHZXRBbGxS
ZXN1bHQmIHJlc3VsdCwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgcmV0dXJuIGdldEFsbFJl
Y29yZHNEYXRhLmluZGV4SWRlbnRpZmllciA/IGdldEFsbEluZGV4UmVjb3Jkcyh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGdldEFsbFJlY29yZHNEYXRhLCByZXN1bHQpIDogZ2V0QWxsT2JqZWN0U3Rv
cmVSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxsUmVjb3Jkc0RhdGEsIHJlc3Vs
dCk7CiB9CkBAIC0yMTk1LDcgKzIxODksNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldEFsbEluZGV4UmVjb3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImCiAgICAg
cmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpnZXRJbmRleFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgaW5kZXhJRCwgSW5k
ZXhlZERCOjpJbmRleFJlY29yZFR5cGUgdHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5n
ZSwgSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCB1aW50NjRfdCBpbmRleElELCBJ
bmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSB0eXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJh
bmdlLCBJREJHZXRSZXN1bHQmIGdldFJlc3VsdCwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQgLSAl
cyIsIHJhbmdlLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtMjI5Nyw3ICsy
MjkxLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRHZXRJbmRl
eFJlY29yZEZvck9uZUtleShpbnQ2NF90IGluZGV4SUQKICAgICByZXR1cm4gSURCRXJyb3IgeyB9
OwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSwgdWludDY0X3QmIG91dENvdW50KQorSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIHVpbnQ2NF90
JiBvdXRDb3VudCwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0Q291bnQgLSBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0LCBv
YmplY3RTdG9yZUlkZW50aWZpZXIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKQEAgLTI0MTQs
NyArMjQwOCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkU2V0
S2V5R2VuZXJhdG9yVmFsdWUoaW50NjRfdCBvYmplY3RTdG9yCiAgICAgcmV0dXJuIElEQkVycm9y
IHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtleU51
bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QmIGdlbmVyYXRlZEtleSkKK0lEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1iZXIoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIHVpbnQ2NF90JiBnZW5lcmF0ZWRLZXksIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExP
RyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdlbmVyYXRlS2V5TnVtYmVyIik7
CiAKQEAgLTI0NDIsNyArMjQzNiw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Z2VuZXJhdGVLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgcmV0
dXJuIHVuY2hlY2tlZFNldEtleUdlbmVyYXRvclZhbHVlKG9iamVjdFN0b3JlSUQsIGdlbmVyYXRl
ZEtleSk7CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmV2ZXJ0R2VuZXJh
dGVkS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCB1aW50NjRfdCBuZXdLZXlOdW1iZXIpCitJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJldmVydEdlbmVyYXRlZEtleU51bWJlcihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgbmV3S2V5TnVtYmVyLCBjb25zdCBMb2NrSG9sZGVy
JikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZXZlcnRH
ZW5lcmF0ZWRLZXlOdW1iZXIgLSBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0ICIsIHJldmVydGVkIG51
bWJlciAlIiBQUkl1NjQsIG9iamVjdFN0b3JlSUQsIG5ld0tleU51bWJlcik7CiAKQEAgLTI0NjIs
NyArMjQ1Niw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmV2ZXJ0R2VuZXJh
dGVkS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpCiAgICAgcmV0dXJuIHVuY2hlY2tl
ZFNldEtleUdlbmVyYXRvclZhbHVlKG9iamVjdFN0b3JlSUQsIG5ld0tleU51bWJlciAtIDEpOwog
fQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yTnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBkb3VibGUgbmV3S2V5TnVtYmVyKQorSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJRCwgZG91YmxlIG5ld0tleU51bWJlciwgY29uc3QgTG9ja0hvbGRlciYp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRh
dGVLZXlHZW5lcmF0b3JOdW1iZXIiKTsKIApAQCAtMjQ4OSw3ICsyNDgzLDcgQEAgSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcihjb25z
dCBJREJSZXNvdXJjZUkKICAgICByZXR1cm4gdW5jaGVja2VkU2V0S2V5R2VuZXJhdG9yVmFsdWUo
b2JqZWN0U3RvcmVJRCwgc3RkOjptaW4obmV3S2V5TnVtYmVyLCAoZG91YmxlKW1heEdlbmVyYXRv
clZhbHVlKSk7CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNv
cihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgSURCR2V0UmVzdWx0JiByZXN1bHQpCitJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6Om9wZW5DdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8sIElE
QkdldFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBBU1NFUlQobV9z
cWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKQEAgLTI1MTIsNyAr
MjUwNiw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcihjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0CiAgICAgcmV0dXJuIElEQkVycm9yIHsg
fTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjppdGVyYXRlQ3Vyc29yKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVD
dXJzb3JEYXRhJiBkYXRhLCBJREJHZXRSZXN1bHQmIHJlc3VsdCkKK0lEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJz
b3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgSURCR2V0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJT
UUxpdGVJREJCYWNraW5nU3RvcmU6Oml0ZXJhdGVDdXJzb3IiKTsKIApAQCAtMjU1NSw3ICsyNTQ5
LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjppdGVyYXRlQ3Vyc29yKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnMKICAgICByZXR1cm4gSURCRXJyb3IgeyB9Owog
fQogCi1ib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cHJlZmV0Y2hDdXJzb3IoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllcikKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpwcmVmZXRjaEN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlm
aWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpwcmVmZXRjaEN1cnNvciIpOwogCkBAIC0yNTcxLDEzICsyNTY1LDE4IEBA
IGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpwcmVmZXRjaEN1cnNvcihjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0CiAgICAgcmV0dXJuIGN1cnNvci0+cHJlZmV0Y2goKTsK
IH0KIAorSURCT2JqZWN0U3RvcmVJbmZvKiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmluZm9Gb3JP
YmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xk
ZXImKQoreworICAgIHJldHVybiBpbmZvRm9yT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZGVudGlm
aWVyKTsKK30KKwogSURCT2JqZWN0U3RvcmVJbmZvKiBTUUxpdGVJREJCYWNraW5nU3RvcmU6Omlu
Zm9Gb3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCiB7CiAgICAg
QVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKICAgICByZXR1cm4gbV9kYXRhYmFzZUluZm8tPmluZm9G
b3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiB9CiAKLXZvaWQg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUoKQordm9pZCBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBMb2NrSG9sZGVyJikKIHsK
ICAgICBTdHJpbmcgZGJGaWxlbmFtZSA9IGZ1bGxEYXRhYmFzZVBhdGgoKTsKIApAQCAtMjY0Nyw3
ICsyNjQ2LDcgQEAgU1FMaXRlU3RhdGVtZW50KiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNhY2hl
ZFN0YXRlbWVudChTUUxpdGVJREJCYWNraW5nU3RvcmU6OlMKICAgICByZXR1cm4gbV9jYWNoZWRT
dGF0ZW1lbnRzW3N0YXRpY19jYXN0PHNpemVfdD4oc3FsKV0uZ2V0KCk7CiB9CiAKLXZvaWQgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjbG9zZSgpCit2b2lkIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Y2xvc2UoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgY2xvc2VTUUxpdGVEQigpOwogfQpAQCAt
MjY2Myw3ICsyNjYyLDcgQEAgdm9pZCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNsb3NlU1FMaXRl
REIoKQogICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwogfQogCi1ib29sIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6aGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIpIGNvbnN0Citib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aGFz
VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSBjb25zdAogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWRl
bnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZGMxZjljMWU5MDg5
MjE4MTViMDc5ODkyMWE0ZWI0M2U0ZWYxOWZjNy4uMmE0YTEyMjI4NTE0MjVhZWMyZDc3MWMxZmEx
Njk1NjEzNjQ0MzE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApAQCAtNTQsNDEg
KzU0LDQ0IEBAIHB1YmxpYzoKICAgICAKICAgICB+U1FMaXRlSURCQmFja2luZ1N0b3JlKCkgZmlu
YWw7CiAKLSAgICBJREJFcnJvciBnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFz
ZUluZm8mKSBmaW5hbDsKLQotICAgIElEQkVycm9yIGJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURC
VHJhbnNhY3Rpb25JbmZvJikgZmluYWw7Ci0gICAgSURCRXJyb3IgYWJvcnRUcmFuc2FjdGlvbihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgZmluYWw7
Ci0gICAgSURCRXJyb3IgY29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpIGZpbmFsOwotICAgIElEQkVycm9yIGNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mKSBmaW5hbDsKLSAgICBJREJFcnJvciBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJF
cnJvciByZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUpIGZpbmFsOwotICAgIElEQkVycm9yIGNsZWFyT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllcikgZmluYWw7Ci0gICAgSURCRXJyb3IgY3JlYXRlSW5kZXgo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQkluZGV4SW5mbyYpIGZpbmFsOwotICAgIElEQkVycm9yIGRlbGV0ZUluZGV4KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcikgZmluYWw7Ci0gICAg
SURCRXJyb3IgcmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qg
aW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpIGZpbmFsOwotICAgIElEQkVy
cm9yIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgSURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0cykgZmluYWw7Ci0gICAgSURCRXJyb3IgZGVs
ZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JikgZmluYWw7Ci0gICAgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBj
b25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmKSBmaW5hbDsKLSAgICBJREJFcnJvciBn
ZXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JiwgSURCR2V0UmVjb3JkRGF0YVR5cGUsIElEQkdldFJlc3VsdCYgb3V0VmFsdWUpIGZpbmFsOwot
ICAgIElEQkVycm9yIGdldEFsbFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgSURCR2V0
QWxsUmVzdWx0JiBvdXRWYWx1ZSkgZmluYWw7Ci0gICAgSURCRXJyb3IgZ2V0SW5kZXhSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRl
eGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVz
dWx0JiBvdXRWYWx1ZSkgZmluYWw7Ci0gICAgSURCRXJyb3IgZ2V0Q291bnQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmLCB1aW50NjRfdCYgb3V0Q291bnQpIGZpbmFsOwotICAgIElEQkVycm9yIGdlbmVyYXRl
S2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90JiBrZXlOdW1iZXIp
IGZpbmFsOwotICAgIElEQkVycm9yIHJldmVydEdlbmVyYXRlZEtleU51bWJlcihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBrZXlOdW1iZXIpIGZpbmFsOwotICAgIElEQkVycm9y
IG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGRvdWJsZSBuZXdLZXlOdW1iZXIpIGZpbmFsOwotICAgIElEQkVycm9yIG9wZW5DdXJzb3IoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElE
QkN1cnNvckluZm8mLCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCkgZmluYWw7Ci0gICAgSURCRXJy
b3IgaXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVy
LCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIElEQkdldFJlc3VsdCYgb3V0UmVzdWx0KSBm
aW5hbDsKLSAgICBib29sIHByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYpIGZpbmFsOwotCi0gICAgSURCT2JqZWN0
U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKSBmaW5hbDsKLSAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIGZpbmFsOwotCi0gICAg
Ym9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpIGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgYm9vbCBpc0VwaGVtZXJhbCgpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiwg
Y29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworCisgICAgSURCRXJyb3IgYmVnaW5UcmFuc2FjdGlv
bihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7Cisg
ICAgSURCRXJyb3IgYWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElE
QkVycm9yIGNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJy
b3IgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IExvY2tIb2xk
ZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgcmVu
YW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBu
ZXdOYW1lLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgY2xlYXJPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgZmlu
YWw7CisgICAgSURCRXJyb3IgY3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYsIGNvbnN0IExvY2tI
b2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBkZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSBm
aW5hbDsKKyAgICBJREJFcnJvciByZW5hbWVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3Qg
TG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGtleUV4aXN0c0luT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGJvb2wmIGtleUV4
aXN0cywgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGRlbGV0ZVJhbmdl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIGNvbnN0
IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBhZGRSZWNvcmQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIGNvbnN0IExvY2tI
b2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBnZXRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVjb3JkRGF0YVR5cGUsIElE
QkdldFJlc3VsdCYgb3V0VmFsdWUsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJF
cnJvciBnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIElEQkdldEFsbFJlc3Vs
dCYgb3V0VmFsdWUsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBnZXRJ
bmRleFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCBJREJHZXRSZXN1bHQmIG91dFZhbHVlLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAg
SURCRXJyb3IgZ2V0Q291bnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCB1aW50NjRfdCYgb3V0Q291bnQs
IGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBnZW5lcmF0ZUtleU51bWJl
cihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCYga2V5TnVtYmVyLCBjb25zdCBM
b2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgcmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVy
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGtleU51bWJlciwgY29uc3QgTG9j
a0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVt
YmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGRvdWJsZSBuZXdLZXlOdW1iZXIsIGNvbnN0
IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBvcGVuQ3Vyc29yKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJ
bmZvJiwgSURCR2V0UmVzdWx0JiBvdXRSZXN1bHQsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsK
KyAgICBJREJFcnJvciBpdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNv
cklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JEYXRhJiwgSURCR2V0UmVzdWx0JiBv
dXRSZXN1bHQsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBib29sIHByZWZldGNoQ3Vy
c29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKworICAgIElEQk9iamVjdFN0b3JlSW5m
byogaW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKGNvbnN0
IExvY2tIb2xkZXImKSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNTaW11bHRhbmVvdXNUcmFu
c2FjdGlvbnMoY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc0VwaGVtZXJhbChjb25zdCBMb2NrSG9sZGVyJikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiwgY29uc3QgTG9ja0hvbGRlciYpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCB1bnJlZ2lzdGVy
Q3Vyc29yKFNRTGl0ZUlEQkN1cnNvciYpOwogCiAgICAgSURCRXJyb3IgZ2V0QmxvYlJlY29yZHNG
b3JPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlUmVjb3JkLCBWZWN0b3I8U3Ry
aW5nPiYgYmxvYlVSTHMsIFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzKTsKKyAgICBJREJP
YmplY3RTdG9yZUluZm8qIGluZm9Gb3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIpOwogCiAgICAgc3RhdGljIFN0cmluZyBkYXRhYmFzZU5hbWVGcm9tRW5jb2RlZEZp
bGVuYW1lKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB1aW50NjRfdCBkYXRhYmFzZXNTaXpl
Rm9yRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KTsKQEAgLTk3LDggKzEwMCw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIGZ1bGxEYXRhYmFzZVBhdGhGb3JEaXJlY3Rvcnko
Y29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBkYXRhYmFzZU5hbWVGcm9tRmlsZShj
b25zdCBTdHJpbmcmKTsKIAotICAgIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJikgY29uc3QgZmluYWw7Ci0KICAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQogCiBwcml2YXRlOgpAQCAtMTMyLDkg
KzEzMyw3IEBAIHByaXZhdGU6CiAgICAgSURCRXJyb3IgZ2V0QWxsSW5kZXhSZWNvcmRzKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJH
ZXRBbGxSZWNvcmRzRGF0YSYsIElEQkdldEFsbFJlc3VsdCYgb3V0VmFsdWUpOwogCiAgICAgdm9p
ZCBjbG9zZVNRTGl0ZURCKCk7Ci0gICAgdm9pZCBjbG9zZSgpIGZpbmFsOwotICAgIAotICAgIHVp
bnQ2NF90IGRhdGFiYXNlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY2xvc2UoY29uc3Qg
TG9ja0hvbGRlciYpIGZpbmFsOwogCiAgICAgZW51bSBjbGFzcyBTUUwgOiBzaXplX3QgewogICAg
ICAgICBDcmVhdGVPYmplY3RTdG9yZUluZm8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRl
eCBmZjA5MGY3NmJiNWQ0MjgzOTI2NTYxODhlZmE3ZmYxYzk0NWIxYzljLi4yMmE1NjllNGY2NzE1
NzRjZDU1NmZlOTAyMzcwNTg1M2M4YTVkNjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
QEAgLTEyMiw2ICsxMjIsNyBAQCBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2Uo
SURCU2VydmVyJiBzZXJ2ZXIsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZgogICAgICwgbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX29wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIo
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lckZp
cmVkKQogeworICAgIG1fc2VydmVyLT5yZWdpc3RlckRhdGFiYXNlKCp0aGlzKTsKICAgICBMT0co
SW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKCkgKCVwKSAl
cyIsIHRoaXMsIG1faWRlbnRpZmllci5kZWJ1Z1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQog
CkBAIC0xMzksNiArMTQwLDggQEAgVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFz
ZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9kYXRhYmFzZVF1ZXVlLmlzS2lsbGVkKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKG1fZGF0YWJhc2VSZXBseVF1ZXVlLmlzS2lsbGVkKCkpOwogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisKKyAgICBtX3NlcnZlci0+dW5yZWdpc3Rl
ckRhdGFiYXNlKCp0aGlzKTsKIH0KIAogY29uc3QgSURCRGF0YWJhc2VJbmZvJiBVbmlxdWVJREJE
YXRhYmFzZTo6aW5mbygpIGNvbnN0CkBAIC0zNzcsMjIgKzM4MCwyNCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVy
JiBpZGVudGlmaQogCiAgICAgdWludDY0X3QgZGVsZXRlZFZlcnNpb24gPSAwOwogCi0gICAgaWYg
KG1fYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5n
U3RvcmUoKTsKLQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7Ci0gICAgICAgIG1f
YmFja2luZ1N0b3JlU3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBmYWxzZTsKLSAg
ICAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGF1dG8gYmFja2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShp
ZGVudGlmaWVyKTsKLQotICAgICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOwotICAg
ICAgICBhdXRvIGVycm9yID0gYmFja2luZ1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5m
byhkYXRhYmFzZUluZm8pOwotICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJFcnJvciBnZXR0aW5nIGRhdGFiYXNlIGluZm8gZnJvbSBkYXRhYmFzZSAl
cyB0aGF0IHdlIGFyZSB0cnlpbmcgdG8gZGVsZXRlIiwgaWRlbnRpZmllci5kZWJ1Z1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgICAgIGRlbGV0ZWRWZXJzaW9uID0gZGF0YWJhc2VJbmZv
LnZlcnNpb24oKTsKLSAgICAgICAgYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUoKTsK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7Cisg
ICAgICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUt
PmRlbGV0ZUJhY2tpbmdTdG9yZShsb2NrZXIpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUg
PSBudWxscHRyOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91
c1RyYW5zYWN0aW9ucyA9IGZhbHNlOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmVJc0VwaGVt
ZXJhbCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBiYWNraW5n
U3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOworCisgICAg
ICAgICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJbmZvOworICAgICAgICAgICAgYXV0byBl
cnJvciA9IGJhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJ
bmZvLCBsb2NrZXIpOworICAgICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGdldHRpbmcgZGF0YWJhc2UgaW5mbyBmcm9tIGRhdGFi
YXNlICVzIHRoYXQgd2UgYXJlIHRyeWluZyB0byBkZWxldGUiLCBpZGVudGlmaWVyLmRlYnVnU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGRlbGV0ZWRWZXJzaW9uID0gZGF0
YWJhc2VJbmZvLnZlcnNpb24oKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZS0+ZGVsZXRlQmFj
a2luZ1N0b3JlKGxvY2tlcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VU
YXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZERlbGV0ZUJhY2tpbmdTdG9yZSwgZGVsZXRlZFZlcnNpb24pKTsKQEAgLTQwMyw4ICs0MDgs
MTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9uYWxEZWxldGVC
YWNraW5nU3RvcmUoKQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25kaXRpb25hbERlbGV0
ZUJhY2tpbmdTdG9yZSIpOwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKCk7CisgICAgeworICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBpZiAobV9iYWNraW5nU3Rv
cmUpCisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKGxvY2tl
cik7CisgICAgfQogCiAgICAgc2h1dGRvd25Gb3JDbG9zZSgpOwogfQpAQCAtNDI4LDEwICs0MzYs
MTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSgpCiAKICAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6c2h1dGRvd25Gb3JDbG9zZSIp
OwogCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xv
c2UoKTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICBpZiAobV9iYWNraW5n
U3RvcmUpIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUtPmNsb3NlKGxvY2tlcik7CisgICAgICAgIG1fYmFja2lu
Z1N0b3JlID0gbnVsbHB0cjsKKyAgICB9CiAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVs
dGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwogICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVy
YWwgPSBmYWxzZTsKIApAQCAtNjcwLDcgKzY3OSwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtU3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rp
bwogewogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3Jt
U3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24iKTsKIAotICAgIElEQkVycm9yIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPmJlZ2luVHJhbnNhY3Rpb24oaW5mbyk7CisgICAgSURCRXJyb3IgZXJy
b3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2sp
OworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5iZWdpblRyYW5zYWN0aW9uKGluZm8s
IGxvY2tlcik7CisgICAgfQorCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtU3RhcnRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24sIGVycm9yKSk7CiB9CiAKQEAgLTgyNywxMiArODQxLDE2IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJiBpZGVudGlmaWVyCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVl
SURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmUgKCVwKSIsIHRoaXMpOwogCiAgICAgQVNTRVJU
KCFtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRl
QmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwotICAgIG1fYmFja2luZ1N0b3JlU3VwcG9ydHNTaW11
bHRhbmVvdXNUcmFuc2FjdGlvbnMgPSBtX2JhY2tpbmdTdG9yZS0+c3VwcG9ydHNTaW11bHRhbmVv
dXNUcmFuc2FjdGlvbnMoKTsKLSAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNr
aW5nU3RvcmUtPmlzRXBoZW1lcmFsKCk7CiAKICAgICBJREJEYXRhYmFzZUluZm8gZGF0YWJhc2VJ
bmZvOwotICAgIGF1dG8gZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8oZGF0YWJhc2VJbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIG1fYmFj
a2luZ1N0b3JlID0gbV9zZXJ2ZXItPmNyZWF0ZUJhY2tpbmdTdG9yZShpZGVudGlmaWVyKTsKKyAg
ICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1f
YmFja2luZ1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyhsb2NrZXIpOwor
ICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gbV9iYWNraW5nU3RvcmUtPmlzRXBo
ZW1lcmFsKGxvY2tlcik7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldE9yRXN0
YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbywgbG9ja2VyKTsKKyAgICB9CiAKICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZE9wZW5CYWNraW5nU3RvcmUsIGRhdGFiYXNlSW5mbywgZXJyb3IsICB0
YXNrSWRlbnRpZmllcikpOwogfQpAQCAtODkyLDcgKzkxMCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjbwogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgSURCRXJy
b3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9i
YWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5m
bywgbG9ja2VyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVP
YmplY3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgaW5mbykpOwogfQpAQCAtOTQ0
LDcgKzk2NiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0
U3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjbwogICAgIExPRyhJbmRleGVkREIs
ICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUiKTsKIAog
ICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tp
bmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGxvY2tlcik7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFz
a1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWRQZXJmb3JtRGVsZXRlT2JqZWN0U3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIG9i
amVjdFN0b3JlSWRlbnRpZmllcikpOwogfQpAQCAtMTAwMSw3ICsxMDI3LDEwIEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvCiAgICAgfQogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAg
ICBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpOworICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUt
PnJlbmFtZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBuZXdOYW1lLCBsb2NrZXIpOworICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tS
ZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
UGVyZm9ybVJlbmFtZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KQEAgLTEwNDYsNyArMTA3NSwxMSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbgogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtQ2xlYXJPYmplY3RTdG9yZSIpOwogCiAgICAgQVNTRVJUKG1fYmFj
a2luZ1N0b3JlKTsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jbGVhck9i
amVjdFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsK
KyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
YmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNsZWFy
T2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGxvY2tlcik7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ2xlYXJPYmpl
Y3RTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcikpOwogfQpAQCAtMTA5NiwxNCArMTEy
OSwxNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQ3JlYXRlSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogCiAgICAgSURCRXJyb3IgZXJyb3I7CiAg
ICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEluZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1DcmVhdGVJbmRleDogbV9iYWNraW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMpOwot
ICAgICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9y
ZSBpcyBpbnZhbGlkIGZvciBjYWxsIHRvIGNyZWF0ZSBpbmRleCJfcyk7Ci0gICAgICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCBpbmZvKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEluZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVJbmRleDogbV9iYWNraW5nU3RvcmUgaXMgbnVsbCIsIHRo
aXMpOworICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3RhdGVFcnJvciwgIkJh
Y2tpbmcgc3RvcmUgaXMgaW52YWxpZCBmb3IgY2FsbCB0byBjcmVhdGUgaW5kZXgiX3MpOworICAg
ICAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgsIGNhbGxiYWNrSWRl
bnRpZmllciwgZXJyb3IsIGluZm8pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGluZm8sIGxvY2tlcik7CiAgICAgfQogCi0gICAgZXJyb3IgPSBtX2JhY2tpbmdT
dG9yZS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvKTsKICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJv
ciwgaW5mbykpOwogfQogCkBAIC0xMTY1LDcgKzEyMDEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybURlbGV0ZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QgSUQKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bURlbGV0ZUluZGV4Iik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIElEQkVy
cm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRp
Zmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIpOworICAgIElEQkVy
cm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3Rv
cmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXgodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmll
ciwgbG9ja2VyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVJ
bmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBp
bmRleElkZW50aWZpZXIpKTsKIH0KQEAgLTEyMjksNyArMTI2OSwxMCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lSW5kZXgodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVy
LCBjb25zdCBJRAogICAgIH0KIAogICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0gICAgbV9i
YWNraW5nU3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUpOworICAgIHsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgbV9iYWNraW5n
U3RvcmUtPnJlbmFtZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGxvY2tlcik7CisgICAgfQogCiAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lSW5kZXgsIGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lKSk7
CiB9CkBAIC0xMjk5LDcxICsxMzQyLDc0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1QdXRPckFkZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7Ci0gICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKEluZGV4ZWREQiwgIiVwIC0gVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1QdXRPckFkZDogbV9iYWNraW5nU3RvcmUgaXMgbnVsbCIsIHRoaXMpOwotICAgICAgICBl
cnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBpcyBpbnZh
bGlkIGZvciBjYWxsIHRvIHB1dCBvciBhZGQiX3MpOwotICAgICAgICBwb3N0RGF0YWJhc2VUYXNr
UmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRp
ZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgeworICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7Cisg
ICAgICAgICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiQmFja2luZyBz
dG9yZSBpcyBpbnZhbGlkIGZvciBjYWxsIHRvIHB1dCBvciBhZGQiX3MpOworICAgICAgICAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJy
b3IsIHVzZWRLZXkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgYXV0
byogb2JqZWN0U3RvcmVJbmZvID0gbV9iYWNraW5nU3RvcmUtPmluZm9Gb3JPYmplY3RTdG9yZShv
YmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKSB7Ci0gICAg
ICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJyb3IsICJPYmplY3Qgc3RvcmUgY2Fu
bm90IGJlIGZvdW5kIGluIHRoZSBiYWNraW5nIHN0b3JlIl9zKTsKLSAgICAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRL
ZXkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJ
bmZvID0gbV9iYWNraW5nU3RvcmUtPmluZm9Gb3JPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGxvY2tlcik7CisgICAgICAgIGlmICghb2JqZWN0U3RvcmVJbmZvKSB7CisgICAgICAg
ICAgICBlcnJvciA9IElEQkVycm9yKEludmFsaWRTdGF0ZUVycm9yLCAiT2JqZWN0IHN0b3JlIGNh
bm5vdCBiZSBmb3VuZCBpbiB0aGUgYmFja2luZyBzdG9yZSJfcyk7CisgICAgICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
dXNlZEtleSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBib29sIHVz
ZWRLZXlJc0dlbmVyYXRlZCA9IGZhbHNlOwotICAgIHVpbnQ2NF90IGtleU51bWJlcjsKLSAgICBh
dXRvIGdlbmVyYXRlZEtleVJlc2V0dGVyID0gV1RGOjptYWtlU2NvcGVFeGl0KFt0aGlzLCB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgJmtleU51bWJlciwgJnVz
ZWRLZXlJc0dlbmVyYXRlZF0oKSB7Ci0gICAgICAgIGlmICh1c2VkS2V5SXNHZW5lcmF0ZWQpCi0g
ICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlOdW1iZXIpOwotICAg
IH0pOwotICAgIGlmIChvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiAha2V5RGF0
YS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2VuZXJhdGVL
ZXlOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtl
eU51bWJlcik7CisgICAgICAgIGJvb2wgdXNlZEtleUlzR2VuZXJhdGVkID0gZmFsc2U7CisgICAg
ICAgIHVpbnQ2NF90IGtleU51bWJlcjsKKyAgICAgICAgYXV0byBnZW5lcmF0ZWRLZXlSZXNldHRl
ciA9IFdURjo6bWFrZVNjb3BlRXhpdChbdGhpcywgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsICZrZXlOdW1iZXIsICZ1c2VkS2V5SXNHZW5lcmF0ZWQsICZsb2Nr
ZXJdKCkgeworICAgICAgICAgICAgaWYgKHVzZWRLZXlJc0dlbmVyYXRlZCkKKyAgICAgICAgICAg
ICAgICBtX2JhY2tpbmdTdG9yZS0+cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlOdW1iZXIsIGxvY2tlcik7Cisg
ICAgICAgIH0pOworICAgICAgICBpZiAob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkg
JiYgIWtleURhdGEuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5nZW5lcmF0ZUtleU51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwga2V5TnVtYmVyLCBsb2NrZXIpOworICAgICAgICAgICAgaWYgKCFlcnJvci5p
c051bGwoKSkgeworICAgICAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9y
QWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB1c2Vk
S2V5LnNldE51bWJlclZhbHVlKGtleU51bWJlcik7CisgICAgICAgICAgICB1c2VkS2V5SXNHZW5l
cmF0ZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHVzZWRLZXkgPSBrZXlE
YXRhOworCisgICAgICAgIGlmIChvdmVyd3JpdGVNb2RlID09IEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlOjpOb092ZXJ3cml0ZSkgeworICAgICAgICAgICAgYm9vbCBrZXlFeGlz
dHM7CisgICAgICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVj
dFN0b3JlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2Vk
S2V5LCBrZXlFeGlzdHMsIGxvY2tlcik7CisgICAgICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkg
JiYga2V5RXhpc3RzKQorICAgICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IoQ29uc3RyYWlu
dEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUiX3MpOworCisg
ICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgcG9zdERh
dGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVz
ZWRLZXkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyAzLjQuMSBPYmplY3QgU3RvcmUgU3RvcmFnZSBPcGVyYXRpb24KKyAg
ICAgICAgLy8gLi4uSWYgYSByZWNvcmQgYWxyZWFkeSBleGlzdHMgaW4gc3RvcmUgLi4uCisgICAg
ICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBzdG9yZSB1c2luZyB0aGUgc3RlcHMg
Zm9yIGRlbGV0aW5nIHJlY29yZHMgZnJvbSBhbiBvYmplY3Qgc3RvcmUuLi4KKyAgICAgICAgLy8g
VGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBmb3JtYWxseSBkZWxldGluZyBpdCBmcm9tIGZyb20g
dGhlIG9iamVjdCBzdG9yZSBhbHNvIHJlbW92ZXMgaXQgZnJvbSB0aGUgYXBwcm9wcmlhdGUgaW5k
ZXhlcy4KKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXksIGxvY2tlcik7
CiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIHBvc3REYXRhYmFz
ZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFz
ZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVz
ZWRLZXkuc2V0TnVtYmVyVmFsdWUoa2V5TnVtYmVyKTsKLSAgICAgICAgdXNlZEtleUlzR2VuZXJh
dGVkID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAgdXNlZEtleSA9IGtleURhdGE7Ci0KLSAg
ICBpZiAob3ZlcndyaXRlTW9kZSA9PSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZTo6Tm9PdmVyd3JpdGUpIHsKLSAgICAgICAgYm9vbCBrZXlFeGlzdHM7Ci0gICAgICAgIGVycm9y
ID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVzZWRLZXksIGtleUV4aXN0cyk7Ci0gICAg
ICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCi0gICAgICAgICAgICBlcnJvciA9
IElEQkVycm9yKENvbnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2Jq
ZWN0IHN0b3JlIl9zKTsKKworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5hZGRSZWNv
cmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCAqb2JqZWN0U3RvcmVJbmZvLCB1c2VkS2V5LCBvcmln
aW5hbFJlY29yZFZhbHVlLCBsb2NrZXIpOwogCiAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFj
a0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICAvLyAzLjQuMSBPYmplY3QgU3RvcmUgU3RvcmFnZSBPcGVyYXRp
b24KLSAgICAvLyAuLi5JZiBhIHJlY29yZCBhbHJlYWR5IGV4aXN0cyBpbiBzdG9yZSAuLi4KLSAg
ICAvLyB0aGVuIHJlbW92ZSB0aGUgcmVjb3JkIGZyb20gc3RvcmUgdXNpbmcgdGhlIHN0ZXBzIGZv
ciBkZWxldGluZyByZWNvcmRzIGZyb20gYW4gb2JqZWN0IHN0b3JlLi4uCi0gICAgLy8gVGhpcyBp
cyBpbXBvcnRhbnQgYmVjYXVzZSBmb3JtYWxseSBkZWxldGluZyBpdCBmcm9tIGZyb20gdGhlIG9i
amVjdCBzdG9yZSBhbHNvIHJlbW92ZXMgaXQgZnJvbSB0aGUgYXBwcm9wcmlhdGUgaW5kZXhlcy4K
LSAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlvbklkZW50
aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgdXNlZEtleSk7Ci0gICAgaWYgKCFlcnJvci5p
c051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YWRkUmVjb3JkKHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgKm9iamVjdFN0b3JlSW5mbywgdXNlZEtleSwgb3JpZ2luYWxSZWNvcmRWYWx1ZSk7
CisgICAgICAgIGlmIChvdmVyd3JpdGVNb2RlICE9IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVy
d3JpdGVNb2RlOjpPdmVyd3JpdGVGb3JDdXJzb3IgJiYgb2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5j
cmVtZW50KCkgJiYga2V5RGF0YS50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXIp
CisgICAgICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVy
YXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
a2V5RGF0YS5udW1iZXIoKSwgbG9ja2VyKTsKIAotICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsK
LSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBnZW5lcmF0
ZWRLZXlSZXNldHRlci5yZWxlYXNlKCk7CiAgICAgfQotCi0gICAgaWYgKG92ZXJ3cml0ZU1vZGUg
IT0gSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZUZvckN1cnNv
ciAmJiBvYmplY3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXlEYXRhLnR5cGUoKSA9
PSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcikKLSAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdT
dG9yZS0+bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGtleURhdGEubnVtYmVyKCkpOwotCi0gICAgZ2VuZXJh
dGVkS2V5UmVzZXR0ZXIucmVsZWFzZSgpOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1
dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CiB9CiAKQEAgLTE0
MzMsNyArMTQ3OSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVjb3Jk
KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUgogICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZSk7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVy
cm9yID0gbV9iYWNraW5nU3RvcmUtPmdldFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCB0eXBlLCByZXN1bHQpOworICAgIElE
QkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5n
U3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEs
IHR5cGUsIHJlc3VsdCwgbG9ja2VyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3VsdCkpOwogfQpA
QCAtMTQ0NCw5ICsxNDk0LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJ
bmRleFJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRJbmRleFJlY29yZCIp
OwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQogICAgIElEQkdldFJlc3VsdCByZXN1
bHQ7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhSZWNvcmQo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRp
ZmllciwgcmVjb3JkVHlwZSwgcmFuZ2UsIHJlc3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7Cisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAg
ICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5nZXRJbmRleFJlY29yZCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCByZWNvcmRU
eXBlLCByYW5nZSwgcmVzdWx0LCBsb2NrZXIpOworICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KSk7
CiB9CkBAIC0xNDY3LDcgKzE1MjAsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUdldEFsbFJlY29yZHModWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7CiAKICAgICBJREJHZXRBbGxSZXN1bHQgcmVzdWx0OwotICAg
IElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEFsbFJlY29yZHModHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0KTsKKyAgICBJREJFcnJvciBl
cnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9j
ayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEFsbFJlY29yZHModHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0LCBsb2NrZXIpOworICAg
IH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldEFsbFJlY29yZHMsIGNhbGxiYWNr
SWRlbnRpZmllciwgZXJyb3IsIFdURk1vdmUocmVzdWx0KSkpOwogfQpAQCAtMTUxMSw3ICsxNTY4
LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRDb3VudCh1aW50NjRfdCBj
YWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlCiAgICAgQVNTRVJUKG9iamVjdFN0b3JlSWRl
bnRpZmllcik7CiAKICAgICB1aW50NjRfdCBjb3VudDsKLSAgICBJREJFcnJvciBlcnJvciA9IG1f
YmFja2luZ1N0b3JlLT5nZXRDb3VudCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIGNvdW50KTsKKyAgICBJ
REJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2lu
Z1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZp
ZXIsIGtleVJhbmdlRGF0YSwgY291bnQsIGxvY2tlcik7CisgICAgfQogCiAgICAgcG9zdERhdGFi
YXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQZXJmb3JtR2V0Q291bnQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGNvdW50
KSk7CiB9CkBAIC0xNTUxLDcgKzE2MTIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybURlbGV0ZVJlY29yZCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IEkKICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybURlbGV0ZVJlY29yZCIpOwogCi0gICAgSURCRXJyb3IgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAg
IGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSwgbG9ja2VyKTsKKyAgICB9CiAKICAgICBw
b3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVl
SURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVSZWNvcmQsIGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IpKTsKIH0KQEAgLTE1OTIsNyArMTY1NywxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpwZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
QgogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtT3Bl
bkN1cnNvciIpOwogCiAgICAgSURCR2V0UmVzdWx0IHJlc3VsdDsKLSAgICBJREJFcnJvciBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5m
bywgcmVzdWx0KTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPm9wZW5DdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvLCByZXN1bHQsIGxv
Y2tlcik7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtT3BlbkN1cnNvciwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0KSk7CiB9CkBAIC0xNjMzLDcgKzE3MDIs
MTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUl0ZXJhdGVDdXJzb3IodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0ZUN1cnNvciIpOwogCiAgICAgSURCR2V0UmVz
dWx0IHJlc3VsdDsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRl
Q3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vyc29ySWRlbnRpZmllciwgZGF0YSwgcmVz
dWx0KTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUt
Pml0ZXJhdGVDdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBk
YXRhLCByZXN1bHQsIGxvY2tlcik7CisgICAgfQogCiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7
CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jdXJzb3JQcmVmZXRjaGVzLmFkZChjdXJzb3JJ
ZGVudGlmaWVyKTsKQEAgLTE2NTAsMTAgKzE3MjMsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnMKICAgICBBU1NFUlQobV9jdXJzb3JQcmVmZXRjaGVzLmNvbnRhaW5zKGN1cnNvcklkZW50aWZp
ZXIpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bVByZWZldGNoQ3Vyc29yIik7CiAKLSAgICBpZiAobV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSB8
fCAhbV9iYWNraW5nU3RvcmUtPnByZWZldGNoQ3Vyc29yKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y3Vyc29ySWRlbnRpZmllcikpCisgICAgaWYgKG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpIHsK
ICAgICAgICAgbV9jdXJzb3JQcmVmZXRjaGVzLnJlbW92ZShjdXJzb3JJZGVudGlmaWVyKTsKLSAg
ICBlbHNlCi0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVmZXRjaEN1cnNvciwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxv
Y2spOworICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5wcmVmZXRjaEN1cnNvcih0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIsIGxvY2tlcikpIHsKKyAgICAgICAgICAg
IG1fY3Vyc29yUHJlZmV0Y2hlcy5yZW1vdmUoY3Vyc29ySWRlbnRpZmllcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHJlZmV0
Y2hDdXJzb3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3Vyc29ySWRlbnRpZmllcikpOwogfQog
CiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCR2V0
UmVzdWx0JiByZXN1bHQpCkBAIC0xNzE4LDcgKzE4MDEsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY28KICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAi
KGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvbW1pdFRyYW5zYWN0aW9uIC0gJXMiLCB0
cmFuc2FjdGlvbklkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VHJhbnNhY3Rpb24odHJh
bnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPmNvbW1pdFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
bG9ja2VyKTsKKyAgICB9CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ29tbWl0VHJhbnNh
Y3Rpb24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikp
OwogfQogCkBAIC0xODA4LDcgKzE4OTUsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybUFib3J0VHJhbnNhY3Rpb24odWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb24KICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9u
SWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBJREJFcnJv
ciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRl
bnRpZmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0
b3JlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgbG9ja2VyKTsKKyAg
ICB9CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQWJvcnRUcmFuc2FjdGlvbiwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSk7CiB9CiAKQEAgLTIw
MTgsNyArMjEwOSwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWN0aXZhdGVU
cmFuc2FjdGlvbkluQmFja2luZ1N0b3JlKHVpbnQ2NF90IGNhbGxiYQogewogICAgIExPRyhJbmRl
eGVkREIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtQWN0aXZhdGVUcmFuc2FjdGlv
bkluQmFja2luZ1N0b3JlIik7CiAKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5iZWdpblRyYW5zYWN0aW9uKGluZm8pOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFuc2FjdGlvbihpbmZvLCBsb2NrZXIpOworICAg
IH0KKwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUFjdGl2YXRlVHJhbnNhY3Rpb25JbkJh
Y2tpbmdTdG9yZSwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcikpOwogfQogCkBAIC0yMzUxLDQ1
ICsyNDQ3LDY4IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2so
dWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogICAgIG1fZXJyb3JDYWxsYmFja3MucmVtb3Zl
KGNhbGxiYWNrSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0
VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uT25NYWlu
VGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBM
b2NrSG9sZGVyJiBsb2NrZXIpCiB7Ci0gICAgdHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2lu
Z1N0b3JlLT5hYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkp
KTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmVMb2NrLmlzSGVsZCgpKTsKKyAgICB0cmFuc2Fj
dGlvbi5zZXRSZXN1bHQobV9iYWNraW5nU3RvcmUtPmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKSwgbG9ja2VyKSk7CiAgICAgdHJhbnNhY3Rpb24uc2V0U3Rh
dGUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkFib3J0ZWQpOwogfQogCi12
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3ZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OmNvbW1pdFRyYW5zYWN0aW9uT25NYWluVGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCiB7Ci0gICAg
dHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0b3JlLT5jb21taXRUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0
b3JlTG9jay5pc0hlbGQoKSk7CisgICAgdHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0
b3JlLT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBs
b2NrZXIpKTsKICAgICB0cmFuc2FjdGlvbi5zZXRTdGF0ZShVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpTdGF0ZTo6Q29tbWl0dGVkKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
ZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCkKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnN1c3Bl
bmQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBmb3IgKGF1dG8mIGlk
ZW50aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9pblByb2dyZXNzVHJhbnNhY3Rpb25zLmtleXMoKSkp
IHsKLSAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5n
ZXQoaWRlbnRpZmllcik7Ci0gICAgICAgIGFib3J0VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoKnRy
YW5zYWN0aW9uKTsKLSAgICB9CisgICAgaWYgKG1faXNTdXNwZW5kZWQpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsKIAotICAgIGZvciAoYXV0byYgaWRlbnRpZmll
ciA6IGNvcHlUb1ZlY3RvcihtX2ZpbmlzaGluZ1RyYW5zYWN0aW9ucy5rZXlzKCkpKSB7Ci0gICAg
ICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmhhc1RyYW5zYWN0aW9uKGlkZW50aWZpZXIpKQotICAg
ICAgICAgICAgY29udGludWU7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2Jh
Y2tpbmdTdG9yZUxvY2spOworICAgICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9W
ZWN0b3IobV9pblByb2dyZXNzVHJhbnNhY3Rpb25zLmtleXMoKSkpIHsKKyAgICAgICAgICAgIGF1
dG8gdHJhbnNhY3Rpb24gPSBtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuZ2V0KGlkZW50aWZpZXIp
OworICAgICAgICAgICAgYWJvcnRUcmFuc2FjdGlvbk9uTWFpblRocmVhZCgqdHJhbnNhY3Rpb24s
IGxvY2tlcik7CisgICAgICAgIH0KIAotICAgICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV9maW5p
c2hpbmdUcmFuc2FjdGlvbnMuZ2V0KGlkZW50aWZpZXIpOwotICAgICAgICBzd2l0Y2ggKHRyYW5z
YWN0aW9uLT5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6U3RhdGU6OkFib3J0aW5nOgotICAgICAgICAgICAgYWJvcnRUcmFuc2FjdGlvbk9uTWFp
blRocmVhZCgqdHJhbnNhY3Rpb24pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkNvbW1pdHRpbmc6Ci0gICAgICAg
ICAgICBjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVhZCgqdHJhbnNhY3Rpb24pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
U3RhdGU6OlJ1bm5pbmc6Ci0gICAgICAgIGNhc2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6U3RhdGU6OkFib3J0ZWQ6Ci0gICAgICAgIGNhc2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6U3RhdGU6OkNvbW1pdHRlZDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9WZWN0b3IobV9maW5pc2hp
bmdUcmFuc2FjdGlvbnMua2V5cygpKSkgeworICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9y
ZS0+aGFzVHJhbnNhY3Rpb24oaWRlbnRpZmllciwgbG9ja2VyKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fZmluaXNoaW5nVHJh
bnNhY3Rpb25zLmdldChpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHN3aXRjaCAodHJhbnNhY3Rp
b24tPnN0YXRlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6U3RhdGU6OkFib3J0aW5nOgorICAgICAgICAgICAgICAgIGFib3J0VHJhbnNhY3Rpb25P
bk1haW5UaHJlYWQoKnRyYW5zYWN0aW9uLCBsb2NrZXIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpTdGF0ZTo6
Q29tbWl0dGluZzoKKyAgICAgICAgICAgICAgICBjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVh
ZCgqdHJhbnNhY3Rpb24sIGxvY2tlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpSdW5uaW5nOgor
ICAgICAgICAgICAgY2FzZSBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpTdGF0ZTo6QWJv
cnRlZDoKKyAgICAgICAgICAgIGNhc2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3Rh
dGU6OkNvbW1pdHRlZDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKworICAgIG1fYmFja2luZ1N0b3JlTG9jay5s
b2NrKCk7Cit9CisKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlc3VtZSgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9pc1N1c3BlbmRlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKKworICAgIEFTU0VSVChtX2JhY2tp
bmdTdG9yZUxvY2suaXNIZWxkKCkpOworICAgIG1fYmFja2luZ1N0b3JlTG9jay51bmxvY2soKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4
IGVjM2ZjMGM3M2VhMzBlMjRlN2EwY2VlNTg4OWYzOTYxZjBjYzRjMjcuLmNlYWE1YzFjYTZmMjU1
NmQ3YzkxNTVkN2Y0YWQ1YWI3YTljOGJjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0x
MTYsNyArMTE2LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXJkQ2xvc2VkRm9yVXNlckRlbGV0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFyZENsb3NlZEZvclVzZXJEZWxldGU7IH0KIAotICAgIHZv
aWQgZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAg
dm9pZCByZXN1bWUoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZURhdGFiYXNlT3BlcmF0
aW9ucygpOwpAQCAtMjMyLDggKzIzMyw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRha2VOZXh0UnVubmFibGVUcmFuc2FjdGlvbihib29sJiBo
YWREZWZlcnJlZFRyYW5zYWN0aW9ucyk7CiAKICAgICBib29sIHByZXBhcmVUb0ZpbmlzaFRyYW5z
YWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpTdGF0ZSk7Ci0gICAgdm9pZCBhYm9ydFRyYW5zYWN0aW9uT25NYWluVGhyZWFk
KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mKTsKLSAgICB2b2lkIGNvbW1pdFRyYW5zYWN0
aW9uT25NYWluVGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lk
IGFib3J0VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uT25NYWlu
VGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBMb2NrSG9sZGVyJik7
CiAgICAgCiAgICAgdm9pZCBjbGVhclN0YWxlUGVuZGluZ09wZW5EQlJlcXVlc3RzKCk7CiAKQEAg
LTI2OSw2ICsyNzAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lzT3BlbmluZ0JhY2tpbmdT
dG9yZSB7IGZhbHNlIH07CiAgICAgSURCRXJyb3IgbV9iYWNraW5nU3RvcmVPcGVuRXJyb3I7Cisg
ICAgTG9jayBtX2JhY2tpbmdTdG9yZUxvY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tp
bmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNl
SW5mbz4gbV9kYXRhYmFzZUluZm87CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5m
bz4gbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mbzsKQEAgLTMwNiw2ICszMDgsOCBAQCBw
cml2YXRlOgogICAgIEhhc2hTZXQ8SURCUmVzb3VyY2VJZGVudGlmaWVyPiBtX2N1cnNvclByZWZl
dGNoZXM7CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCB1aW50NjRfdD4gbV9wZW5kaW5nU3BhY2VJ
bmNyZWFzZVRhc2tzOworCisgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384172</attachid>
            <date>2019-11-22 10:55:28 -0800</date>
            <delta_ts>2019-11-22 11:14:29 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204379-20191122105527.patch</filename>
            <type>text/plain</type>
            <size>98577</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ1YjAyMDc1NDRkZmRl
ZDJjMjYyMGYyMDUyOTVhZGJhYWNhMzRlMC4uNTM3NDZkYWY5ZDYxMmI2MGM0YjlmYTFmNzEyNTAz
NjA3ODNiY2ZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAxOS0xMS0yMiAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREI6IGxvY2st
YmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc3VzcGVuc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0Mzc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
R2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBBUEkgdGVzdDog
SW5kZXhlZERCLkluZGV4ZWREQlN1c3BlbmRJbW1pbmVudGx5CisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcjo6dHJ5U3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6cmVzdW1lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6YWRkRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnJlbW92ZURh
dGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFj
a2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6
cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1l
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxs
UmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1v
cnlJREJCYWNraW5nU3RvcmU6OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtleU51bWJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmV2ZXJ0R2VuZXJhdGVk
S2V5TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2lu
Z1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6
aW5mb0Zvck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5
SURCQmFja2luZ1N0b3JlOjpkZWxldGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZVNpemUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJC
YWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRl
SURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtleU51bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmV2ZXJ0R2Vu
ZXJhdGVkS2V5TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aXRlcmF0
ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6cHJlZmV0Y2hDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmluZm9Gb3JPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
aGFzVHJhbnNhY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJE
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
Ojp+VW5pcXVlSURCRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2U6OnNodXRkb3duRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1lT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybUNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1EZWxldGVJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUmVuYW1l
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
cGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnBlcmZvcm1HZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1HZXRBbGxSZWNvcmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1HZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QcmVm
ZXRjaEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtQ29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFib3J0VHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFjdGl2YXRl
VHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdFRyYW5zYWN0
aW9uT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2U6OmZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKIDIwMTkt
MTEtMjEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFRpZ2h0
ZW4gU2Nyb2xsaW5nVHJlZU5vZGUgdHJlZSBtdXRhdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRl
eCAxMzMyZmZkZDc1Y2NkNmIxNmU0ODMwYTc1ZGY4NDY0YWRjNjE4NTc2Li5lNDliMzZmMjFjZGY5
ZWI3NjQ4NzYwNWRmNGE0ZWVjYjRiMmI1ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC02MCw0
MyArNjAsNDQgQEAgY2xhc3MgSURCQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JREJCYWNraW5nU3RvcmUoKSB7IFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7IH0K
IAotICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0
YWJhc2VJbmZvJikgPSAwOwotCi0gICAgdmlydHVhbCBJREJFcnJvciBiZWdpblRyYW5zYWN0aW9u
KGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGFi
b3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGNvbW1pdFRyYW5zYWN0aW9uKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIElEQkVycm9yIGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mKSA9IDA7Ci0gICAgdmlydHVhbCBJREJFcnJvciBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKSA9IDA7Ci0gICAgdmlydHVhbCBJREJFcnJvciByZW5hbWVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUp
ID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllcikgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgY3JlYXRlSW5kZXgoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElE
QkluZGV4SW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZUluZGV4KGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcikgPSAwOwotICAg
IHZpcnR1YWwgSURCRXJyb3IgcmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUpID0gMDsKLSAg
ICB2aXJ0dWFsIElEQkVycm9yIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0cykgPSAwOwotICAg
IHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJikgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgYWRkUmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFs
dWUmKSA9IDA7Ci0gICAgdmlydHVhbCBJREJFcnJvciBnZXRSZWNvcmQoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVjb3JkRGF0YVR5cGUs
IElEQkdldFJlc3VsdCYgb3V0VmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGdldEFs
bFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgSURCR2V0QWxsUmVzdWx0JiBvdXRWYWx1
ZSkgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0SW5kZXhSZWNvcmQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBJbmRleGVkREI6OkluZGV4
UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURCR2V0UmVzdWx0JiBvdXRWYWx1
ZSkgPSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0Q291bnQoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
LCB1aW50NjRfdCYgb3V0Q291bnQpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIGdlbmVyYXRl
S2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90JiBrZXlOdW1iZXIp
ID0gMDsKLSAgICB2aXJ0dWFsIElEQkVycm9yIHJldmVydEdlbmVyYXRlZEtleU51bWJlcihjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBrZXlOdW1iZXIpID0gMDsKLSAgICB2aXJ0
dWFsIElEQkVycm9yIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGRvdWJsZSBuZXdLZXlOdW1iZXIpID0gMDsKLSAgICB2aXJ0dWFsIElEQkVy
cm9yIG9wZW5DdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mLCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCkg
PSAwOwotICAgIHZpcnR1YWwgSURCRXJyb3IgaXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIElE
QkdldFJlc3VsdCYgb3V0UmVzdWx0KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHByZWZldGNoQ3Vy
c29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIpID0gMDsKLQotICAg
IHZpcnR1YWwgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJhY2tp
bmdTdG9yZSgpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1Ry
YW5zYWN0aW9ucygpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFcGhlbWVyYWwoKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBkYXRh
YmFzZVNpemUoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzVHJhbnNhY3Rpb24o
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJikgY29uc3QgPSAwOworICAgIC8vIEFsbCBmdW5j
dGlvbnMgc2hvdWxkIHRha2UgYSBMb2NrSG9sZGVyIHRvIG1ha2Ugc3VyZSB0aGV5IGhhdmUgYWNx
dWlyZWQgbG9jayB3aGVuIGJlaW5nIGNhbGxlZC4KKyAgICAvLyBUaGlzIGlzIHVzZWQgdG8gbWFr
ZSBzdXJlIGRhdGFiYXNlIG9wZXJhdGlvbnMgd291bGQgbm90IGJlIHBlcmZvcm1lZCB3aGVuIHBy
b2Nlc3MgaXMgc3VzcGVuZGVkLgorICAgIHZpcnR1YWwgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hE
YXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKwor
ICAgIHZpcnR1YWwgSURCRXJyb3IgYmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlv
bkluZm8mLCBjb25zdCBMb2NrSG9sZGVyJikgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3IgYWJv
cnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGNv
bW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgPSAwOworCisgICAgdmlydHVhbCBJREJFcnJv
ciBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgTG9ja0hvbGRl
ciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJ
REJFcnJvciByZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJ
REJFcnJvciBjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0
IExvY2tIb2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBjcmVhdGVJbmRleChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURC
SW5kZXhJbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9y
IGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIHJl
bmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBMb2NrSG9sZGVyJikgPSAwOworICAg
IHZpcnR1YWwgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYga2V5RXhpc3RzLCBjb25zdCBMb2Nr
SG9sZGVyJikgPSAwOworICAgIHZpcnR1YWwgSURCRXJyb3IgZGVsZXRlUmFuZ2UoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgY29uc3QgTG9ja0hvbGRl
ciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGFkZFJlY29yZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJ
bmZvJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgY29uc3QgTG9ja0hvbGRl
ciYpID0gMDsKKyAgICB2aXJ0dWFsIElEQkVycm9yIGdldFJlY29yZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSwg
SURCR2V0UmVzdWx0JiBvdXRWYWx1ZSwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0
dWFsIElEQkVycm9yIGdldEFsbFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgSURCR2V0
QWxsUmVzdWx0JiBvdXRWYWx1ZSwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFs
IElEQkVycm9yIGdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2
NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYsIElEQkdldFJlc3VsdCYgb3V0VmFsdWUsIGNvbnN0IExvY2tIb2xkZXIm
KSA9IDA7CisgICAgdmlydHVhbCBJREJFcnJvciBnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYs
IHVpbnQ2NF90JiBvdXRDb3VudCwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFs
IElEQkVycm9yIGdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVp
bnQ2NF90JiBrZXlOdW1iZXIsIGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CisgICAgdmlydHVhbCBJ
REJFcnJvciByZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgdWludDY0X3Qga2V5TnVtYmVyLCBjb25zdCBMb2NrSG9sZGVyJikgPSAwOworICAgIHZpcnR1
YWwgSURCRXJyb3IgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgZG91YmxlIG5ld0tleU51bWJlciwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsK
KyAgICB2aXJ0dWFsIElEQkVycm9yIG9wZW5DdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mLCBJREJHZXRS
ZXN1bHQmIG91dFJlc3VsdCwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIElE
QkVycm9yIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRp
ZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBJREJHZXRSZXN1bHQmIG91dFJlc3Vs
dCwgY29uc3QgTG9ja0hvbGRlciYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHJlZmV0Y2hDdXJz
b3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgTG9ja0hv
bGRlciYpID0gMDsKKworICAgIHZpcnR1YWwgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2Jq
ZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVy
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgTG9ja0hv
bGRlciYpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5z
YWN0aW9ucyhjb25zdCBMb2NrSG9sZGVyJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VwaGVt
ZXJhbChjb25zdCBMb2NrSG9sZGVyJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsb3NlKGNv
bnN0IExvY2tIb2xkZXImKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVHJhbnNhY3Rpb24o
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgY29uc3QgTG9ja0hvbGRlciYpIGNvbnN0ID0g
MDsKIHByb3RlY3RlZDoKICAgICBJREJCYWNraW5nU3RvcmUoKSB7IFJFTEVBU0VfQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IGU2MWRiOGM5NDI4ZDk4NGRhNjQ2
OTZlN2M4NDI3ODc0MjY5YzI3ZTYuLjYzMWM0Y2U0NWQ3NWY3YTc5MjNhMzE5ZDlmMjdmMzQ4MTI1
NTZlOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuY3BwCkBAIC04NTMsMTQgKzg1MywxMSBAQCB2b2lkIElEQlNlcnZlcjo6
dHJ5U3RvcChTaG91bGRGb3JjZVN0b3Agc2hvdWxkRm9yY2VTdG9wKQogICAgIGlmIChtX3Nlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdXNwZW5kQW5kV2Fp
dCgpOwotICAgIGlmIChzaG91bGRGb3JjZVN0b3AgPT0gU2hvdWxkRm9yY2VTdG9wOjpObyAmJiBT
UUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhhc1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKSB7Ci0gICAg
ICAgIENyb3NzVGhyZWFkVGFza0hhbmRsZXI6OnJlc3VtZSgpOworICAgIGlmIChzaG91bGRGb3Jj
ZVN0b3AgPT0gU2hvdWxkRm9yY2VTdG9wOjpObyAmJiBTUUxpdGVEYXRhYmFzZVRyYWNrZXI6Omhh
c1RyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAg
Zm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fdW5pcXVlSURCRGF0YWJhc2VNYXAudmFsdWVzKCkpCi0g
ICAgICAgIGRhdGFiYXNlLT5maW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKTsKKyAgICBmb3IgKGF1
dG8mIGRhdGFiYXNlIDogbV9hbGxVbmlxdWVJREJEYXRhYmFzZXMpCisgICAgICAgIGRhdGFiYXNl
LnN1c3BlbmQoKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6OnJlc3VtZSgpCkBAIC04NjgsNyArODY1
LDggQEAgdm9pZCBJREJTZXJ2ZXI6OnJlc3VtZSgpCiAgICAgaWYgKG1fc2Vzc2lvbklELmlzRXBo
ZW1lcmFsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENyb3NzVGhyZWFkVGFza0hhbmRsZXI6
OnJlc3VtZSgpOworICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBtX2FsbFVuaXF1ZUlEQkRhdGFi
YXNlcykKKyAgICAgICAgZGF0YWJhc2UucmVzdW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElE
QlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5oCmluZGV4IGQzYTIyM2Q5MzJkOTE1OWQ1NDY2NjI5ZjcxN2VmZmI1Nzc0MTNj
YWYuLjM4NzdhMDUzMmE0ZGRiZmU4ODAxNTcyYTZjYmQxZDQ0NjRkZmVkYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAg
LTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xMjMsNiArMTIzLDkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJ5
U3RvcChTaG91bGRGb3JjZVN0b3ApOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lKCk7
CiAKKyAgICB2b2lkIGFkZERhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSkgeyBt
X2FsbFVuaXF1ZUlEQkRhdGFiYXNlcy5hZGQoZGF0YWJhc2UpOyB9CisgICAgdm9pZCByZW1vdmVE
YXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpIHsgbV9hbGxVbmlxdWVJREJEYXRh
YmFzZXMucmVtb3ZlKGRhdGFiYXNlKTsgfQorCiBwcml2YXRlOgogICAgIElEQlNlcnZlcihQQUw6
OlNlc3Npb25JRCwgUXVvdGFNYW5hZ2VyR2V0dGVyJiYpOwogICAgIElEQlNlcnZlcihQQUw6OlNl
c3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIFF1b3RhTWFuYWdl
ckdldHRlciYmKTsKQEAgLTE5MCw2ICsxOTMsNyBAQCBwcml2YXRlOgogICAgIFBBTDo6U2Vzc2lv
bklEIG1fc2Vzc2lvbklEOwogICAgIEhhc2hNYXA8SURCQ29ubmVjdGlvbklkZW50aWZpZXIsIFJl
ZlB0cjxJREJDb25uZWN0aW9uVG9DbGllbnQ+PiBtX2Nvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1h
cDxJREJEYXRhYmFzZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVJREJEYXRhYmFz
ZT4+IG1fdW5pcXVlSURCRGF0YWJhc2VNYXA7CisgICAgV2Vha0hhc2hTZXQ8VW5pcXVlSURCRGF0
YWJhc2U+IG1fYWxsVW5pcXVlSURCRGF0YWJhc2VzOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25zOwogICAg
IEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uKj4gbV90cmFuc2FjdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCmlu
ZGV4IDk1MThmNGYxOGVlNjU1ZDI3YzU5NWFjYjA5ZTcwMzExZGZhNDQxMWYuLjdjYmZiNzc1NzIz
N2Q3MTJmMmZkODBkOTc1NzQ3ZTFlMjFmMmI3ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5n
U3RvcmUuY3BwCkBAIC01OSw2ICs1OSwxMSBAQCBNZW1vcnlJREJCYWNraW5nU3RvcmU6Ok1lbW9y
eUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IElEQgogCiBN
ZW1vcnlJREJCYWNraW5nU3RvcmU6On5NZW1vcnlJREJCYWNraW5nU3RvcmUoKSA9IGRlZmF1bHQ7
CiAKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFz
ZUluZm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvLCBjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBy
ZXR1cm4gZ2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oaW5mbyk7Cit9CisKIElEQkVycm9yIE1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJh
c2VJbmZvJiBpbmZvKQogewogICAgIGlmICghbV9kYXRhYmFzZUluZm8pCkBAIC03Niw3ICs4MSw3
IEBAIHZvaWQgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpzZXREYXRhYmFzZUluZm8oY29uc3QgSURC
RGF0YWJhc2VJbmZvJiBpbmZvKQogICAgIG1fZGF0YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJE
YXRhYmFzZUluZm8+KGluZm8pOwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQorSURCRXJy
b3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYgaW5mbywgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbiIpOwogCkBAIC0xMDEs
NyArMTA2LDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0
aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICByZXR1cm4gSURCRXJyb3Ig
eyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmFib3J0VHJhbnNhY3Rp
b24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCitJ
REJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xk
ZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OmFib3J0
VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uSWRlbnRpZmllci5sb2dnaW5nU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAKQEAgLTExNCw3ICsxMTksNyBAQCBJREJFcnJvciBNZW1vcnlJREJC
YWNraW5nU3RvcmU6OmFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cgogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
TWVtb3J5SURCQmFja2luZ1N0b3JlOjpjb21taXRUcmFuc2FjdGlvbiAtICVzIiwgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTI3LDcg
KzEzMiw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rp
b24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgcmV0dXJuIElEQkVycm9yIHsg
fTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9y
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQorSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBjb25zdCBM
b2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVPYmplY3RTdG9yZSAtIGFkZGluZyBPUyAlcyB3aXRoIElEICUiIFBSSXU2NCwgaW5m
by5uYW1lKCkudXRmOCgpLmRhdGEoKSwgaW5mby5pZGVudGlmaWVyKCkpOwogCkBAIC0xNTAsNyAr
MTU1LDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9y
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICByZXR1cm4gSURCRXJyb3IgeyB9
OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExv
Y2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9iamVjdFN0b3JlIik7CiAKQEAgLTE3Myw3ICsxNzgsNyBAQCBJREJFcnJvciBNZW1v
cnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9y
eUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKQorSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIs
ICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlIik7CiAKQEAgLTIwMiw3
ICsyMDcsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0
b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgIHJldHVybiBJREJFcnJvciB7
IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9y
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQorSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExv
Y2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmNsZWFyT2JqZWN0U3RvcmUiKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmVJZGVudGlmaWVyKTsK
QEAgLTIyMyw3ICsyMjgsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNsZWFy
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cgogICAgIHJldHVybiBJ
REJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
SW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgY29uc3QgTG9ja0hvbGRlciYpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgi
KTsKIApAQCAtMjM4LDcgKzI0Myw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgcmV0
dXJuIG9iamVjdFN0b3JlLT5jcmVhdGVJbmRleCgqcmF3VHJhbnNhY3Rpb24sIGluZm8pOwogfQog
Ci1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcikKK0lEQkVycm9yIE1lbW9y
eUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwg
dWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCIpOwogCkBAIC0y
NTMsNyArMjU4LDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRl
eChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICByZXR1cm4gb2JqZWN0
U3RvcmUtPmRlbGV0ZUluZGV4KCpyYXdUcmFuc2FjdGlvbiwgaW5kZXhJZGVudGlmaWVyKTsKIH0K
IAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
bmV3TmFtZSkKK0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIs
ICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4Iik7CiAKQEAgLTMwNiw3ICszMTEs
NyBAQCB2b2lkIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmVzdG9yZU9iamVjdFN0b3JlRm9yVmVy
c2lvbkNoYW5nZUFib3J0KFJlZjxNZW1vcnlPYgogICAgIHJlZ2lzdGVyT2JqZWN0U3RvcmUoV1RG
TW92ZShvYmplY3RTdG9yZSkpOwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBi
b29sJiBrZXlFeGlzdHMpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0
c0luT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBrZXlF
eGlzdHMsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKIApAQCAtMzE5LDcgKzMy
NCw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RT
dG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsK
IH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQorSURCRXJy
b3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBjb25zdCBMb2NrSG9sZGVyJikK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5n
ZSIpOwogCkBAIC0zMzYsNyArMzQxLDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjpkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICBy
ZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKK0lEQkVycm9yIE1lbW9y
eUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0
b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgSURCVmFsdWUmIHZhbHVl
LCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFj
a2luZ1N0b3JlOjphZGRSZWNvcmQiKTsKIApAQCAtMzUzLDcgKzM1OCw3IEBAIElEQkVycm9yIE1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3RpCiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5hZGRSZWNvcmQoKnRyYW5zYWN0
aW9uLCBrZXlEYXRhLCB2YWx1ZSk7CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9y
ZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYgcmFuZ2UsIElEQkdldFJlY29yZERhdGFUeXBlIHR5cGUsIElEQkdldFJlc3VsdCYgb3V0
VmFsdWUpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJREJHZXRS
ZWNvcmREYXRhVHlwZSB0eXBlLCBJREJHZXRSZXN1bHQmIG91dFZhbHVlLCBjb25zdCBMb2NrSG9s
ZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRS
ZWNvcmQiKTsKIApAQCAtMzgwLDcgKzM4NSw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAg
ICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0Rh
dGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQorSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYgZ2V0QWxsUmVjb3Jkc0Rh
dGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRBbGxSZWNvcmRzIik7CiAK
QEAgLTQwNSw3ICs0MTAsNyBAQCBJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldEFs
bFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFucwogICAgIHJldHVybiBJ
REJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5k
ZXhSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlm
aWVyLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZWNvcmRUeXBlLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmIHJhbmdlLCBJREJHZXRSZXN1bHQmIG91dFZhbHVlKQorSURCRXJyb3IgTWVtb3J5
SURCQmFja2luZ1N0b3JlOjpnZXRJbmRleFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJl
Y29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIElEQkdldFJlc3VsdCYgb3V0
VmFsdWUsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkIik7CiAKQEAgLTQyMiw3ICs0MjcsNyBAQCBJ
REJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbgogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0Q291bnQoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlLCB1aW50NjRfdCYgb3V0Q291bnQpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgdWludDY0X3QmIG91dENvdW50
LCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFj
a2luZ1N0b3JlOjpnZXRDb3VudCIpOwogCkBAIC00NDAsNyArNDQ1LDcgQEAgSURCRXJyb3IgTWVt
b3J5SURCQmFja2luZ1N0b3JlOjpnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW8KICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1v
cnlJREJCYWNraW5nU3RvcmU6OmdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90JiBrZXlOdW1iZXIpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3Rv
cmU6OmdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90
JiBrZXlOdW1iZXIsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJN
ZW1vcnlJREJCYWNraW5nU3RvcmU6OmdlbmVyYXRlS2V5TnVtYmVyIik7CiAgICAgQVNTRVJUKG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CkBAIC00NTksNyArNDY0LDcgQEAgSURCRXJyb3IgTWVtb3J5
SURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtleU51bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHQKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJ
REJCYWNraW5nU3RvcmU6OnJldmVydEdlbmVyYXRlZEtleU51bWJlcihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCB1aW50NjRfdCBrZXlOdW1iZXIpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5n
U3RvcmU6OnJldmVydEdlbmVyYXRlZEtleU51bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCB1aW50NjRfdCBrZXlOdW1iZXIsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRl
eGVkREIsICJNZW1vcnlJREJCYWNraW5nU3RvcmU6OnJldmVydEdlbmVyYXRlZEtleU51bWJlciIp
OwogICAgIEFTU0VSVChvYmplY3RTdG9yZUlkZW50aWZpZXIpOwpAQCAtNDc0LDcgKzQ3OSw3IEBA
IElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVy
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAot
SURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51
bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBkb3VibGUgbmV3S2V5TnVtYmVyKQorSURC
RXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJl
cihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBkb3VibGUgbmV3S2V5TnVtYmVyLCBjb25zdCBM
b2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlciIpOwogICAgIEFTU0VSVChvYmplY3RTdG9y
ZUlkZW50aWZpZXIpOwpAQCAtNTAzLDcgKzUwOCw3IEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJ
CiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBJREJHZXRSZXN1bHQmIG91
dERhdGEpCitJREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6Om9wZW5DdXJzb3IoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1
cnNvckluZm8mIGluZm8sIElEQkdldFJlc3VsdCYgb3V0RGF0YSwgY29uc3QgTG9ja0hvbGRlciYp
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6b3BlbkN1cnNv
ciIpOwogCkBAIC01NDUsNyArNTUwLDcgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3QKICAgICBy
ZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBNZW1vcnlJREJCYWNraW5nU3RvcmU6
Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwg
Y29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIElEQkdldFJlc3VsdCYgb3V0RGF0YSkK
K0lEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6aXRlcmF0ZUN1cnNvcihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0
YSYgZGF0YSwgSURCR2V0UmVzdWx0JiBvdXREYXRhLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiTWVtb3J5SURCQmFja2luZ1N0b3JlOjppdGVyYXRlQ3Vyc29yIik7
CiAKQEAgLTU5MiwyNCArNTk3LDE4IEBAIFJlZlB0cjxNZW1vcnlPYmplY3RTdG9yZT4gTWVtb3J5
SURCQmFja2luZ1N0b3JlOjp0YWtlT2JqZWN0U3RvcmVCeUlkZW50aWZpZXIodWluCiAgICAgcmV0
dXJuIG9iamVjdFN0b3JlQnlJZGVudGlmaWVyOwogfQogCi1JREJPYmplY3RTdG9yZUluZm8qIE1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6aW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllcikKK0lEQk9iamVjdFN0b3JlSW5mbyogTWVtb3J5SURCQmFja2luZ1N0b3Jl
OjppbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBMb2NrSG9sZGVyJikKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8pOwogICAgIHJldHVy
biBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKTsKIH0KIAotdm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUJhY2tp
bmdTdG9yZSgpCit2b2lkIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlQmFja2luZ1N0b3Jl
KGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIC8vIFRoZSBpbi1tZW1vcnkgSURCIGJhY2tpbmcg
c3RvcmUgZG9lc24ndCBuZWVkIHRvIGRvIGFueSBjbGVhbnVwIHdoZW4gaXQgaXMgZGVsZXRlZC4K
IH0KIAotdWludDY0X3QgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZVNpemUoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNsb3NlKCkKK3ZvaWQgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpjbG9zZShjb25zdCBMb2NrSG9sZGVyJikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9y
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJh
Y2tpbmdTdG9yZS5oCmluZGV4IGIyYjczNTdlZTNjMGY5ZDQ0ZTBhNmI5YTVmOWRkZmM0MmIzMTJl
YTguLjg1ZTQxOTY0NTg5ZjYxZTQwNjJlMjQwMjFjMTFjYjkxYTM1YTcwODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5n
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5SURCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDQ5ICs0Nyw0OSBAQCBwdWJsaWM6CiAgICAgTWVt
b3J5SURCQmFja2luZ1N0b3JlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBJREJEYXRhYmFzZUlkZW50
aWZpZXImKTsKICAgICB+TWVtb3J5SURCQmFja2luZ1N0b3JlKCkgZmluYWw7CiAKLSAgICBJREJF
cnJvciBnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mKSBmaW5hbDsK
KyAgICBJREJFcnJvciBnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8m
LCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgZ2V0T3JFc3RhYmxpc2hE
YXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJik7CiAgICAgdm9pZCBzZXREYXRhYmFzZUluZm8o
Y29uc3QgSURCRGF0YWJhc2VJbmZvJik7CiAKLSAgICBJREJFcnJvciBiZWdpblRyYW5zYWN0aW9u
KGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYpIGZpbmFsOwotICAgIElEQkVycm9yIGFib3J0VHJh
bnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIpIGZpbmFsOwotICAgIElEQkVycm9yIGNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJFcnJv
ciBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJikgZmluYWw7Ci0gICAgSURC
RXJyb3IgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikgZmluYWw7
Ci0gICAgSURCRXJyb3IgcmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKSBmaW5hbDsKLSAgICBJREJFcnJvciBjbGVhck9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpIGZpbmFsOwotICAgIElEQkVycm9yIGNy
ZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBjb25zdCBJREJJbmRleEluZm8mKSBmaW5hbDsKLSAgICBJREJFcnJvciBkZWxldGVJbmRl
eChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIpIGZp
bmFsOwotICAgIElEQkVycm9yIHJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lKSBmaW5hbDsK
LSAgICBJREJFcnJvciBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBib29sJiBrZXlFeGlzdHMpIGZpbmFsOwotICAgIElE
QkVycm9yIGRlbGV0ZVJhbmdlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYpIGZpbmFsOwotICAgIElEQkVycm9yIGFkZFJlY29yZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3Rv
cmVJbmZvJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IElEQlZhbHVlJikgZmluYWw7Ci0gICAg
SURCRXJyb3IgZ2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYsIElEQkdldFJlY29yZERhdGFUeXBlLCBJREJHZXRSZXN1bHQmIG91dFZhbHVl
KSBmaW5hbDsKLSAgICBJREJFcnJvciBnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0
YSYsIElEQkdldEFsbFJlc3VsdCYgb3V0VmFsdWUpIGZpbmFsOwotICAgIElEQkVycm9yIGdldElu
ZGV4UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYs
IElEQkdldFJlc3VsdCYgb3V0VmFsdWUpIGZpbmFsOwotICAgIElEQkVycm9yIGdldENvdW50KGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiwgdWludDY0X3QmIG91dENvdW50KSBmaW5hbDsKLSAgICBJREJFcnJv
ciBnZW5lcmF0ZUtleU51bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCYg
a2V5TnVtYmVyKSBmaW5hbDsKLSAgICBJREJFcnJvciByZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qga2V5TnVtYmVyKSBmaW5hbDsKLSAg
ICBJREJFcnJvciBtYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBkb3VibGUgbmV3S2V5TnVtYmVyKSBmaW5hbDsKLSAgICBJREJFcnJvciBvcGVu
Q3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJDdXJzb3JJbmZvJiwgSURCR2V0UmVzdWx0JiBvdXRSZXN1bHQpIGZpbmFsOwot
ICAgIElEQkVycm9yIGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29y
SWRlbnRpZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBJREJHZXRSZXN1bHQmIG91
dFJlc3VsdCkgZmluYWw7Ci0gICAgYm9vbCBwcmVmZXRjaEN1cnNvcihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKSBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQotCi0gICAgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUo
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBmaW5hbDsKLSAgICB2b2lkIGRlbGV0ZUJh
Y2tpbmdTdG9yZSgpIGZpbmFsOwotCi0gICAgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5z
YWN0aW9ucygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGlzRXBoZW1lcmFsKCkg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIElEQkVycm9yIGJlZ2luVHJhbnNhY3Rpb24oY29u
c3QgSURCVHJhbnNhY3Rpb25JbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElE
QkVycm9yIGFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJv
ciBjb21taXRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGNy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBjb25zdCBMb2NrSG9sZGVyJikg
ZmluYWw7CisgICAgSURCRXJyb3IgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIHJlbmFtZU9i
amVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFt
ZSwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGNsZWFyT2JqZWN0U3Rv
cmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVp
bnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOwor
ICAgIElEQkVycm9yIGNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJJbmRleEluZm8mLCBjb25zdCBMb2NrSG9sZGVy
JikgZmluYWw7CisgICAgSURCRXJyb3IgZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7
CisgICAgSURCRXJyb3IgcmVuYW1lSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IExvY2tI
b2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCBib29sJiBrZXlFeGlzdHMs
IGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBkZWxldGVSYW5nZShjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBjb25zdCBMb2Nr
SG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgYWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUlu
Zm8mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBjb25zdCBMb2NrSG9sZGVy
JikgZmluYWw7CisgICAgSURCRXJyb3IgZ2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlY29yZERhdGFUeXBlLCBJREJHZXRS
ZXN1bHQmIG91dFZhbHVlLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3Ig
Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBJREJHZXRBbGxSZXN1bHQmIG91
dFZhbHVlLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgZ2V0SW5kZXhS
ZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVy
LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSURC
R2V0UmVzdWx0JiBvdXRWYWx1ZSwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVy
cm9yIGdldENvdW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRl
bnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgdWludDY0X3QmIG91dENvdW50LCBjb25z
dCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgZ2VuZXJhdGVLZXlOdW1iZXIoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QmIGtleU51bWJlciwgY29uc3QgTG9ja0hv
bGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIHJldmVydEdlbmVyYXRlZEtleU51bWJlcihjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBrZXlOdW1iZXIsIGNvbnN0IExvY2tIb2xk
ZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBtYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBkb3VibGUgbmV3S2V5TnVtYmVyLCBjb25zdCBMb2Nr
SG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3Igb3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYs
IElEQkdldFJlc3VsdCYgb3V0UmVzdWx0LCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAg
SURCRXJyb3IgaXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJZGVu
dGlmaWVyLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIElEQkdldFJlc3VsdCYgb3V0UmVz
dWx0LCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgYm9vbCBwcmVmZXRjaEN1cnNvcihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
LCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIElEQk9i
amVjdFN0b3JlSW5mbyogaW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlQmFja2lu
Z1N0b3JlKGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNTaW11
bHRhbmVvdXNUcmFuc2FjdGlvbnMoY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICBib29sIGlzRXBoZW1lcmFsKGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9CiAKICAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlRm9yVmVyc2lvbkNoYW5n
ZUFib3J0KE1lbW9yeU9iamVjdFN0b3JlJik7CiAgICAgdm9pZCByZXN0b3JlT2JqZWN0U3RvcmVG
b3JWZXJzaW9uQ2hhbmdlQWJvcnQoUmVmPE1lbW9yeU9iamVjdFN0b3JlPiYmKTsKIAotICAgIGJv
b2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZGVudGlmaWVy
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3RyYW5zYWN0aW9ucy5jb250YWlucyhpZGVudGlmaWVy
KTsgfQorICAgIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiBpZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgY29uc3QgZmluYWwgeyByZXR1cm4gbV90
cmFuc2FjdGlvbnMuY29udGFpbnMoaWRlbnRpZmllcik7IH0KIAogcHJpdmF0ZToKICAgICBSZWZQ
dHI8TWVtb3J5T2JqZWN0U3RvcmU+IHRha2VPYmplY3RTdG9yZUJ5SWRlbnRpZmllcih1aW50NjRf
dCBpZGVudGlmaWVyKTsKLSAgICAKLSAgICB1aW50NjRfdCBkYXRhYmFzZVNpemUoKSBjb25zdCBm
aW5hbDsKLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7CisKKyAgICB2b2lkIGNsb3NlKGNvbnN0IExv
Y2tIb2xkZXImKSBmaW5hbDsKIAogICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZp
ZXI7CiAgICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IDJhYzBjZTVlYmYzZWI1NWZiZjQ3ZjllOWZiMGRkYzNhNTA1MTlh
MDkuLjMyZGY1ODcxMTRkYWVjMGEwZGFlZWIzMWE0YjlhNWEwYTcwMWRjNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC03ODEsNyArNzgxLDcgQEAgU3RyaW5nIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZnVsbERhdGFiYXNlRGlyZWN0b3J5V2l0aFVwZ3JhZGUoKQogICAg
IHJldHVybiBuZXdEYXRhYmFzZURpcmVjdG9yeTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mIGlu
Zm8pCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJh
c2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbywgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8gLSBkYXRhYmFzZSAlcyIsIG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKS51dGY4
KCkuZGF0YSgpKTsKIApAQCAtODU0LDEzICs4NTQsNyBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cgogICAgIHJldHVybiBkaXNrVXNhZ2U7CiB9CiAKLXVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZGF0YWJhc2VTaXplKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKLSAgICByZXR1cm4gU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShmdWxs
RGF0YWJhc2VQYXRoKCkpOwotfQotCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJl
Z2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQorSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0
aW9uSW5mbyYgaW5mbywgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbiAtICVzIiwgaW5mby5pZGVu
dGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC04OTEsNyArODg1
LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNv
bnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUlE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIGlkZW50aWZpZXIpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRl
SURCQmFja2luZ1N0b3JlOjphYm9ydFRyYW5zYWN0aW9uIC0gJXMiLCBpZGVudGlmaWVyLmxvZ2dp
bmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIApAQCAtOTEwLDcgKzkwNCw3IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWJvcnRUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIGlkCiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogfQogCi1J
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBp
ZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjb21taXRUcmFuc2FjdGlvbiAtICVzIiwgaWRlbnRpZmllci5s
b2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTkzNSw3ICs5MjksNyBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNvbW1pdFRyYW5zYWN0aW9uKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgaQogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZv
JiBpbmZvKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9y
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSAt
IGFkZGluZyBPUyAlcyB3aXRoIElEICUiIFBSSXU2NCwgaW5mby5uYW1lKCkudXRmOCgpLmRhdGEo
KSwgaW5mby5pZGVudGlmaWVyKCkpOwogCkBAIC05ODYsNyArOTgwLDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHQKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExP
RyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlIC0g
b2JqZWN0IHN0b3JlICUiIFBSSXU2NCwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAtMTA3
Nyw3ICsxMDcxLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICByZXR1cm4gSURCRXJy
b3IgeyB9OwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkK
K0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBMb2NrSG9s
ZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5h
bWVPYmplY3RTdG9yZSAtIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7CiAKQEAgLTExMDksNyArMTEwMyw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAg
ICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlEKQorSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25z
dCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjbGVhck9iamVjdFN0b3JlIC0gb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwgb2JqZWN0U3Rv
cmVJRCk7CiAKQEAgLTExNTAsNyArMTE0NCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyCiAg
ICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQorSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBjb25zdCBMb2Nr
SG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpj
cmVhdGVJbmRleCAtIE9iamVjdFN0b3JlICUiIFBSSXU2NCAiLCBJbmRleCAlIiBQUkl1NjQsIGlu
Zm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGluZm8uaWRlbnRpZmllcigpKTsKICAgICBBU1NF
UlQobV9zcWxpdGVEQik7CkBAIC0xMzM3LDcgKzEzMzEsNyBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaQogfQogCiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyKQorSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKQog
ewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4
IC0gb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIApAQCAt
MTM4Miw3ICsxMzc2LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVJ
bmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICByZXR1cm4gSURC
RXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUlu
ZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBuZXdOYW1lKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpy
ZW5hbWVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXggLSBvYmpl
Y3Qgc3RvcmUgJSIgUFJJdTY0ICIsIGluZGV4ICUiIFBSSXU2NCwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIpOwogCkBAIC0xNDIzLDcgKzE0MTcsNyBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhYwogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgYm9vbCYga2V5RXhpc3RzKQorSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBib29sJiBrZXlFeGlzdHMsIGNv
bnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUgLSBrZXkgJXMsIG9iamVjdCBzdG9yZSAlIiBQ
Ukl1NjQsIGtleURhdGEubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9iamVjdFN0b3Jl
SUQpOwogCkBAIC0xNTk4LDcgKzE1OTIsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZVJlY29yZChTUUxpdGVJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sCiAgICAg
cmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBr
ZXlSYW5nZSkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmFuZ2UoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UsIGNvbnN0IExv
Y2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmRlbGV0ZVJhbmdlIC0gcmFuZ2UgJXMsIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIGtleVJhbmdl
LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBvYmplY3RTdG9yZUlEKTsKIApAQCAtMTcx
OCw3ICsxNzEyLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJ
bmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICByZXR1cm4gZXJyb3I7
CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwg
Y29uc3QgSURCVmFsdWUmIHZhbHVlKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjph
ZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgb2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIGNvbnN0IExvY2tIb2xkZXIm
KQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29y
ZCAtIGtleSAlcywgb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwga2V5RGF0YS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKQEAgLTE4
ODAsNyArMTg3NCw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QmxvYlJl
Y29yZHNGb3JPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjCiAgICAgcmV0dXJuIElEQkVy
cm9yIHsgfTsKIH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UsIElEQkdl
dFJlY29yZERhdGFUeXBlIHR5cGUsIElEQkdldFJlc3VsdCYgcmVzdWx0VmFsdWUpCitJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSwgSURCR2V0UmVjb3JkRGF0YVR5cGUgdHlwZSwg
SURCR2V0UmVzdWx0JiByZXN1bHRWYWx1ZSwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkIC0ga2V5IHJhbmdl
ICVzLCBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0LCBrZXlSYW5nZS5sb2dnaW5nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJRCk7CiAKQEAgLTIwMTUsNyArMjAwOSw3IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3RpCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRz
RGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KQorSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJHZXRBbGxSZWNvcmRz
RGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIElEQkdldEFsbFJlc3VsdCYgcmVzdWx0LCBjb25zdCBM
b2NrSG9sZGVyJikKIHsKICAgICByZXR1cm4gZ2V0QWxsUmVjb3Jkc0RhdGEuaW5kZXhJZGVudGlm
aWVyID8gZ2V0QWxsSW5kZXhSZWNvcmRzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZ2V0QWxsUmVj
b3Jkc0RhdGEsIHJlc3VsdCkgOiBnZXRBbGxPYmplY3RTdG9yZVJlY29yZHModHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBnZXRBbGxSZWNvcmRzRGF0YSwgcmVzdWx0KTsKIH0KQEAgLTIxOTUsNyArMjE4
OSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0QWxsSW5kZXhSZWNvcmRz
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYKICAgICByZXR1cm4gSURCRXJyb3IgeyB9Owog
fQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldEluZGV4UmVjb3JkKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlELCB1aW50NjRfdCBpbmRleElELCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlw
ZSB0eXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJREJHZXRSZXN1bHQmIGdldFJl
c3VsdCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhSZWNvcmQoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSUQsIHVpbnQ2NF90IGluZGV4SUQsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRU
eXBlIHR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIElEQkdldFJlc3VsdCYgZ2V0
UmVzdWx0LCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpnZXRJbmRleFJlY29yZCAtICVzIiwgcmFuZ2UubG9nZ2luZ1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogCkBAIC0yMjk3LDcgKzIyOTEsNyBAQCBJREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZEdldEluZGV4UmVjb3JkRm9yT25lS2V5KGludDY0
X3QgaW5kZXhJRAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0Q291bnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCB1aW50
NjRfdCYgb3V0Q291bnQpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldENvdW50
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgdWludDY0X3QmIG91dENvdW50LCBjb25zdCBMb2Nr
SG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpn
ZXRDb3VudCAtIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7
CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwpAQCAtMjQxNCw3ICsyNDA4LDcgQEAgSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1ZShpbnQ2
NF90IG9iamVjdFN0b3IKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlE
LCB1aW50NjRfdCYgZ2VuZXJhdGVkS2V5KQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpnZW5lcmF0ZUtleU51bWJlcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QmIGdlbmVyYXRl
ZEtleSwgY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6Z2VuZXJhdGVLZXlOdW1iZXIiKTsKIApAQCAtMjQ0Miw3ICsyNDM2LDcg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZW5lcmF0ZUtleU51bWJlcihjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICByZXR1cm4gdW5jaGVja2VkU2V0S2V5R2Vu
ZXJhdG9yVmFsdWUob2JqZWN0U3RvcmVJRCwgZ2VuZXJhdGVkS2V5KTsKIH0KIAotSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIHVpbnQ2NF90IG5ld0tleU51bWJlcikKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCB1aW50
NjRfdCBuZXdLZXlOdW1iZXIsIGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIExPRyhJbmRleGVk
REIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJldmVydEdlbmVyYXRlZEtleU51bWJlciAtIG9i
amVjdCBzdG9yZSAlIiBQUkl1NjQgIiwgcmV2ZXJ0ZWQgbnVtYmVyICUiIFBSSXU2NCwgb2JqZWN0
U3RvcmVJRCwgbmV3S2V5TnVtYmVyKTsKIApAQCAtMjQ2Miw3ICsyNDU2LDcgQEAgSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIoY29uc3QgSURC
UmVzb3VyY2VJZGVudGkKICAgICByZXR1cm4gdW5jaGVja2VkU2V0S2V5R2VuZXJhdG9yVmFsdWUo
b2JqZWN0U3RvcmVJRCwgbmV3S2V5TnVtYmVyIC0gMSk7CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIGRvdWJsZSBuZXdLZXlOdW1iZXIpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlELCBkb3Vi
bGUgbmV3S2V5TnVtYmVyLCBjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlciIp
OwogCkBAIC0yNDg5LDcgKzI0ODMsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKGNvbnN0IElEQlJlc291cmNlSQogICAgIHJl
dHVybiB1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1ZShvYmplY3RTdG9yZUlELCBzdGQ6Om1p
bihuZXdLZXlOdW1iZXIsIChkb3VibGUpbWF4R2VuZXJhdG9yVmFsdWUpKTsKIH0KIAotSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZv
LCBJREJHZXRSZXN1bHQmIHJlc3VsdCkKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
b3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgSURCR2V0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IExvY2tIb2xkZXImKQogewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKICAgICBBU1NFUlQo
bV9zcWxpdGVEQi0+aXNPcGVuKCkpOwpAQCAtMjUxMiw3ICsyNTA2LDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3QKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBTUUxp
dGVJREJCYWNraW5nU3RvcmU6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
Y3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIElEQkdl
dFJlc3VsdCYgcmVzdWx0KQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjppdGVyYXRl
Q3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElE
Qkl0ZXJhdGVDdXJzb3JEYXRhJiBkYXRhLCBJREJHZXRSZXN1bHQmIHJlc3VsdCwgY29uc3QgTG9j
a0hvbGRlciYpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
aXRlcmF0ZUN1cnNvciIpOwogCkBAIC0yNTU1LDcgKzI1NDksNyBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFucwogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLWJvb2wgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpwcmVmZXRjaEN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBjdXJzb3JJ
ZGVudGlmaWVyKQorYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnByZWZldGNoQ3Vyc29yKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXIm
KQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OnByZWZldGNo
Q3Vyc29yIik7CiAKQEAgLTI1NzEsMTMgKzI1NjUsMTggQEAgYm9vbCBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnByZWZldGNoQ3Vyc29yKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3QKICAgICByZXR1cm4gY3Vyc29yLT5wcmVmZXRjaCgpOwogfQogCitJREJPYmplY3RTdG9yZUlu
Zm8qIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2NF90IG9i
amVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgcmV0dXJuIGlu
Zm9Gb3JPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkZW50aWZpZXIpOworfQorCiBJREJPYmplY3RT
dG9yZUluZm8qIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6aW5mb0Zvck9iamVjdFN0b3JlKHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQobV9kYXRhYmFzZUluZm8p
OwogICAgIHJldHVybiBtX2RhdGFiYXNlSW5mby0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUo
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmRlbGV0ZUJhY2tpbmdTdG9yZSgpCit2b2lkIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
QmFja2luZ1N0b3JlKGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIFN0cmluZyBkYkZpbGVuYW1l
ID0gZnVsbERhdGFiYXNlUGF0aCgpOwogCkBAIC0yNjQ3LDcgKzI2NDYsNyBAQCBTUUxpdGVTdGF0
ZW1lbnQqIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2FjaGVkU3RhdGVtZW50KFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6UwogICAgIHJldHVybiBtX2NhY2hlZFN0YXRlbWVudHNbc3RhdGljX2Nhc3Q8
c2l6ZV90PihzcWwpXS5nZXQoKTsKIH0KIAotdm9pZCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNs
b3NlKCkKK3ZvaWQgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjbG9zZShjb25zdCBMb2NrSG9sZGVy
JikKIHsKICAgICBjbG9zZVNRTGl0ZURCKCk7CiB9CkBAIC0yNjYzLDcgKzI2NjIsNyBAQCB2b2lk
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y2xvc2VTUUxpdGVEQigpCiAgICAgbV9zcWxpdGVEQiA9
IG51bGxwdHI7CiB9CiAKLWJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpoYXNUcmFuc2FjdGlv
bihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikgY29u
c3QKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpoYXNUcmFuc2FjdGlvbihjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRl
ciYpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICByZXR1cm4gbV90
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuaAppbmRleCBkYzFmOWMxZTkwODkyMTgxNWIwNzk4OTIxYTRlYjQzZTRl
ZjE5ZmM3Li4yYTRhMTIyMjg1MTQyNWFlYzJkNzcxYzFmYTE2OTU2MTM2NDQzMTRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC01NCw0MSArNTQsNDQgQEAgcHVibGljOgogICAg
IAogICAgIH5TUUxpdGVJREJCYWNraW5nU3RvcmUoKSBmaW5hbDsKIAotICAgIElEQkVycm9yIGdl
dE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYpIGZpbmFsOwotCi0gICAg
SURCRXJyb3IgYmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKSBmaW5h
bDsKLSAgICBJREJFcnJvciBhYm9ydFRyYW5zYWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJFcnJvciBjb21taXRU
cmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikgZmluYWw7Ci0gICAgSURCRXJyb3IgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYpIGZpbmFsOwotICAgIElEQkVycm9yIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIpIGZpbmFsOwotICAgIElEQkVycm9yIHJlbmFtZU9iamVjdFN0b3Jl
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3TmFtZSkgZmluYWw7
Ci0gICAgSURCRXJyb3IgY2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
KSBmaW5hbDsKLSAgICBJREJFcnJvciBjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCSW5kZXhJbmZvJikgZmluYWw7
Ci0gICAgSURCRXJyb3IgZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWlu
dDY0X3QgaW5kZXhJZGVudGlmaWVyKSBmaW5hbDsKLSAgICBJREJFcnJvciByZW5hbWVJbmRleChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgbmV3TmFtZSkgZmluYWw7Ci0gICAgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmplY3RT
dG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYg
a2V5RXhpc3RzKSBmaW5hbDsKLSAgICBJREJFcnJvciBkZWxldGVSYW5nZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKSBmaW5hbDsKLSAgICBJREJFcnJv
ciBhZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIGNvbnN0IElEQktleURhdGEmLCBjb25z
dCBJREJWYWx1ZSYpIGZpbmFsOwotICAgIElEQkVycm9yIGdldFJlY29yZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlw
ZSwgSURCR2V0UmVzdWx0JiBvdXRWYWx1ZSkgZmluYWw7Ci0gICAgSURCRXJyb3IgZ2V0QWxsUmVj
b3Jkcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBJREJHZXRBbGxSZXN1bHQmIG91dFZhbHVlKSBm
aW5hbDsKLSAgICBJREJFcnJvciBnZXRJbmRleFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJREJHZXRSZXN1bHQmIG91dFZhbHVlKSBmaW5hbDsK
LSAgICBJREJFcnJvciBnZXRDb3VudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRf
dCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIHVpbnQ2NF90JiBvdXRD
b3VudCkgZmluYWw7Ci0gICAgSURCRXJyb3IgZ2VuZXJhdGVLZXlOdW1iZXIoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgdWludDY0X3QmIGtleU51bWJlcikgZmluYWw7Ci0gICAgSURCRXJyb3Ig
cmV2ZXJ0R2VuZXJhdGVkS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2
NF90IGtleU51bWJlcikgZmluYWw7Ci0gICAgSURCRXJyb3IgbWF5YmVVcGRhdGVLZXlHZW5lcmF0
b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgZG91YmxlIG5ld0tleU51bWJlcikg
ZmluYWw7Ci0gICAgSURCRXJyb3Igb3BlbkN1cnNvcihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCQ3Vyc29ySW5mbyYsIElEQkdldFJl
c3VsdCYgb3V0UmVzdWx0KSBmaW5hbDsKLSAgICBJREJFcnJvciBpdGVyYXRlQ3Vyc29yKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQkl0ZXJhdGVDdXJz
b3JEYXRhJiwgSURCR2V0UmVzdWx0JiBvdXRSZXN1bHQpIGZpbmFsOwotICAgIGJvb2wgcHJlZmV0
Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJikgZmluYWw7Ci0KLSAgICBJREJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JPYmpl
Y3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpIGZpbmFsOwotICAgIHZvaWQg
ZGVsZXRlQmFja2luZ1N0b3JlKCkgZmluYWw7Ci0KLSAgICBib29sIHN1cHBvcnRzU2ltdWx0YW5l
b3VzVHJhbnNhY3Rpb25zKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGlzRXBo
ZW1lcmFsKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBJREJFcnJvciBnZXRPckVzdGFi
bGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mLCBjb25zdCBMb2NrSG9sZGVyJikgZmlu
YWw7CisKKyAgICBJREJFcnJvciBiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9u
SW5mbyYsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBhYm9ydFRyYW5z
YWN0aW9uKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAgSURCRXJyb3IgY29tbWl0VHJhbnNhY3Rp
b24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3Qg
SURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVy
cm9yIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IExv
Y2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciByZW5hbWVPYmplY3RTdG9yZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5ld05hbWUsIGNvbnN0IExvY2tIb2xk
ZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBjcmVh
dGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgY29uc3QgSURCSW5kZXhJbmZvJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElE
QkVycm9yIGRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGlu
ZGV4SWRlbnRpZmllciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIHJl
bmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBuZXdOYW1lLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7Cisg
ICAgSURCRXJyb3Iga2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBjb25zdCBJREJLZXlEYXRhJiwgYm9vbCYga2V5RXhpc3RzLCBjb25zdCBMb2NrSG9sZGVy
JikgZmluYWw7CisgICAgSURCRXJyb3IgZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOwor
ICAgIElEQkVycm9yIGFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgY29uc3QgSURCS2V5
RGF0YSYsIGNvbnN0IElEQlZhbHVlJiwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElE
QkVycm9yIGdldFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmLCBJREJHZXRSZWNvcmREYXRhVHlwZSwgSURCR2V0UmVzdWx0JiBvdXRWYWx1ZSwg
Y29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGdldEFsbFJlY29yZHMoY29u
c3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElE
QkdldEFsbFJlY29yZHNEYXRhJiwgSURCR2V0QWxsUmVzdWx0JiBvdXRWYWx1ZSwgY29uc3QgTG9j
a0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGdldEluZGV4UmVjb3JkKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgSW5kZXhlZERCOjpJbmRl
eFJlY29yZFR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElEQkdldFJlc3VsdCYgb3V0VmFs
dWUsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAgICBJREJFcnJvciBnZXRDb3VudChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYsIHVpbnQ2NF90JiBvdXRDb3VudCwgY29uc3QgTG9ja0hvbGRlciYpIGZp
bmFsOworICAgIElEQkVycm9yIGdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIHVpbnQ2NF90JiBrZXlOdW1iZXIsIGNvbnN0IExvY2tIb2xkZXImKSBmaW5hbDsKKyAg
ICBJREJFcnJvciByZXZlcnRHZW5lcmF0ZWRLZXlOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3Qga2V5TnVtYmVyLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CisgICAg
SURCRXJyb3IgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgZG91YmxlIG5ld0tleU51bWJlciwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOwor
ICAgIElEQkVycm9yIG9wZW5DdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkN1cnNvckluZm8mLCBJREJHZXRSZXN1bHQmIG91
dFJlc3VsdCwgY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOworICAgIElEQkVycm9yIGl0ZXJhdGVD
dXJzb3IoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURC
SXRlcmF0ZUN1cnNvckRhdGEmLCBJREJHZXRSZXN1bHQmIG91dFJlc3VsdCwgY29uc3QgTG9ja0hv
bGRlciYpIGZpbmFsOworICAgIGJvb2wgcHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiwgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiwgY29uc3QgTG9ja0hvbGRl
ciYpIGZpbmFsOworCisgICAgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUo
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7
CisgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoY29uc3QgTG9ja0hvbGRlciYpIGZpbmFsOwor
CisgICAgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyhjb25zdCBMb2NrSG9s
ZGVyJikgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzRXBoZW1lcmFsKGNvbnN0
IExvY2tIb2xkZXImKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgYm9vbCBoYXNUcmFu
c2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCBjb25zdCBMb2NrSG9sZGVyJikg
Y29uc3QgZmluYWw7CiAKICAgICB2b2lkIHVucmVnaXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vyc29y
Jik7CiAKICAgICBJREJFcnJvciBnZXRCbG9iUmVjb3Jkc0Zvck9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3Qgb2JqZWN0U3RvcmVSZWNvcmQsIFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgVmVjdG9y
PFN0cmluZz4mIGJsb2JGaWxlUGF0aHMpOworICAgIElEQk9iamVjdFN0b3JlSW5mbyogaW5mb0Zv
ck9iamVjdFN0b3JlKHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllcik7CiAKICAgICBzdGF0
aWMgU3RyaW5nIGRhdGFiYXNlTmFtZUZyb21FbmNvZGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7
CiAgICAgc3RhdGljIHVpbnQ2NF90IGRhdGFiYXNlc1NpemVGb3JEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnkpOwpAQCAtOTcsOCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBT
dHJpbmcgZnVsbERhdGFiYXNlUGF0aEZvckRpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKICAgICBz
dGF0aWMgU3RyaW5nIGRhdGFiYXNlTmFtZUZyb21GaWxlKGNvbnN0IFN0cmluZyYpOwogCi0gICAg
Ym9vbCBoYXNUcmFuc2FjdGlvbihjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKSBjb25zdCBm
aW5hbDsKLQogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Vzc2lvbklEOyB9CiAKIHByaXZhdGU6CkBAIC0xMzIsOSArMTMzLDcgQEAgcHJpdmF0ZToKICAg
ICBJREJFcnJvciBnZXRBbGxJbmRleFJlY29yZHMoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwgSURC
R2V0QWxsUmVzdWx0JiBvdXRWYWx1ZSk7CiAKICAgICB2b2lkIGNsb3NlU1FMaXRlREIoKTsKLSAg
ICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0gICAgCi0gICAgdWludDY0X3QgZGF0YWJhc2VTaXplKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBjbG9zZShjb25zdCBMb2NrSG9sZGVyJikgZmluYWw7CiAK
ICAgICBlbnVtIGNsYXNzIFNRTCA6IHNpemVfdCB7CiAgICAgICAgIENyZWF0ZU9iamVjdFN0b3Jl
SW5mbywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGZmMDkwZjc2YmI1ZDQyODM5MjY1
NjE4OGVmYTdmZjFjOTQ1YjFjOWMuLjgyNDM0MjI5MGVhZDhjM2UzYzU3MWY2OTVjMjgzNTc3ZDM3
YzJlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMTIyLDYgKzEyMiw3IEBAIFVu
aXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJEYXRhYmFzZShJREJTZXJ2ZXImIHNlcnZlciwgY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAg
ICAsIG1fb3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpvcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyRmlyZWQpCiB7CisgICAgbV9zZXJ2ZXIt
PmFkZERhdGFiYXNlKCp0aGlzKTsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJh
c2U6OlVuaXF1ZUlEQkRhdGFiYXNlKCkgKCVwKSAlcyIsIHRoaXMsIG1faWRlbnRpZmllci5kZWJ1
Z1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogfQogCkBAIC0xMzksNiArMTQwLDggQEAgVW5pcXVl
SURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSgpCiAgICAgUkVMRUFTRV9BU1NFUlQobV9k
YXRhYmFzZVF1ZXVlLmlzS2lsbGVkKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGF0YWJhc2VS
ZXBseVF1ZXVlLmlzS2lsbGVkKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2JhY2tpbmdTdG9y
ZSk7CisKKyAgICBtX3NlcnZlci0+cmVtb3ZlRGF0YWJhc2UoKnRoaXMpOwogfQogCiBjb25zdCBJ
REJEYXRhYmFzZUluZm8mIFVuaXF1ZUlEQkRhdGFiYXNlOjppbmZvKCkgY29uc3QKQEAgLTM3Nywy
MiArMzgwLDI0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZUJhY2tpbmdTdG9yZShj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAKICAgICB1aW50NjRfdCBkZWxl
dGVkVmVyc2lvbiA9IDA7CiAKLSAgICBpZiAobV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgbV9i
YWNraW5nU3RvcmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgICAgIG1fYmFja2luZ1N0
b3JlID0gbnVsbHB0cjsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91
c1RyYW5zYWN0aW9ucyA9IGZhbHNlOwotICAgICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFs
ID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBiYWNraW5nU3RvcmUgPSBtX3Nl
cnZlci0+Y3JlYXRlQmFja2luZ1N0b3JlKGlkZW50aWZpZXIpOwotCi0gICAgICAgIElEQkRhdGFi
YXNlSW5mbyBkYXRhYmFzZUluZm87Ci0gICAgICAgIGF1dG8gZXJyb3IgPSBiYWNraW5nU3RvcmUt
PmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKGRhdGFiYXNlSW5mbyk7Ci0gICAgICAgIGlmICgh
ZXJyb3IuaXNOdWxsKCkpCi0gICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGdldHRpbmcgZGF0
YWJhc2UgaW5mbyBmcm9tIGRhdGFiYXNlICVzIHRoYXQgd2UgYXJlIHRyeWluZyB0byBkZWxldGUi
LCBpZGVudGlmaWVyLmRlYnVnU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAgICAgZGVs
ZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOwotICAgICAgICBiYWNraW5nU3Rv
cmUtPmRlbGV0ZUJhY2tpbmdTdG9yZSgpOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgaWYgKG1fYmFja2luZ1N0b3JlKSB7Cisg
ICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlQmFja2luZ1N0b3JlKGxvY2tlcik7Cisg
ICAgICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2JhY2tp
bmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CisgICAgICAg
ICAgICBtX2JhY2tpbmdTdG9yZUlzRXBoZW1lcmFsID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBhdXRvIGJhY2tpbmdTdG9yZSA9IG1fc2VydmVyLT5jcmVhdGVCYWNraW5n
U3RvcmUoaWRlbnRpZmllcik7CisKKyAgICAgICAgICAgIElEQkRhdGFiYXNlSW5mbyBkYXRhYmFz
ZUluZm87CisgICAgICAgICAgICBhdXRvIGVycm9yID0gYmFja2luZ1N0b3JlLT5nZXRPckVzdGFi
bGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8sIGxvY2tlcik7CisgICAgICAgICAgICBpZiAo
IWVycm9yLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZ2V0dGlu
ZyBkYXRhYmFzZSBpbmZvIGZyb20gZGF0YWJhc2UgJXMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGRl
bGV0ZSIsIGlkZW50aWZpZXIuZGVidWdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAg
ICAgICAgZGVsZXRlZFZlcnNpb24gPSBkYXRhYmFzZUluZm8udmVyc2lvbigpOworICAgICAgICAg
ICAgYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUobG9ja2VyKTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlLCBkZWxldGVk
VmVyc2lvbikpOwpAQCAtNDAzLDggKzQwOCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpw
ZXJmb3JtVW5jb25kaXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSgpCiAgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlIik7CiAKLSAgICBpZiAobV9i
YWNraW5nU3RvcmUpCi0gICAgICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUo
KTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7
CisgICAgICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3Jl
LT5kZWxldGVCYWNraW5nU3RvcmUobG9ja2VyKTsKKyAgICB9CiAKICAgICBzaHV0ZG93bkZvckNs
b3NlKCk7CiB9CkBAIC00MjgsMTAgKzQzNiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpz
aHV0ZG93bkZvckNsb3NlKCkKIAogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRh
dGFiYXNlOjpzaHV0ZG93bkZvckNsb3NlIik7CiAKLSAgICBpZiAobV9iYWNraW5nU3RvcmUpCi0g
ICAgICAgIG1fYmFja2luZ1N0b3JlLT5jbG9zZSgpOwotCi0gICAgbV9iYWNraW5nU3RvcmUgPSBu
dWxscHRyOworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9yZS0+Y2xvc2Uo
bG9ja2VyKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIH0KICAgICBt
X2JhY2tpbmdTdG9yZVN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gZmFsc2U7CiAg
ICAgbV9iYWNraW5nU3RvcmVJc0VwaGVtZXJhbCA9IGZhbHNlOwogCkBAIC02NzAsNyArNjc5LDEy
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikg
VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiIp
OwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YmVnaW5UcmFuc2FjdGlv
bihpbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3Rv
cmUtPmJlZ2luVHJhbnNhY3Rpb24oaW5mbywgbG9ja2VyKTsKKyAgICB9CisKICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1TdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiwgZXJyb3IpKTsK
IH0KIApAQCAtODI3LDEyICs4NDEsMTYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIKICAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkJhY2tpbmdTdG9yZSAo
JXApIiwgdGhpcyk7CiAKICAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKLSAgICBtX2JhY2tp
bmdTdG9yZSA9IG1fc2VydmVyLT5jcmVhdGVCYWNraW5nU3RvcmUoaWRlbnRpZmllcik7Ci0gICAg
bV9iYWNraW5nU3RvcmVTdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IG1fYmFja2lu
Z1N0b3JlLT5zdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpOwotICAgIG1fYmFja2lu
Z1N0b3JlSXNFcGhlbWVyYWwgPSBtX2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVyYWwoKTsKIAogICAg
IElEQkRhdGFiYXNlSW5mbyBkYXRhYmFzZUluZm87Ci0gICAgYXV0byBlcnJvciA9IG1fYmFja2lu
Z1N0b3JlLT5nZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhkYXRhYmFzZUluZm8pOworICAgIElE
QkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5n
U3RvcmVMb2NrKTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBtX3NlcnZlci0+Y3JlYXRlQmFj
a2luZ1N0b3JlKGlkZW50aWZpZXIpOworICAgICAgICBtX2JhY2tpbmdTdG9yZVN1cHBvcnRzU2lt
dWx0YW5lb3VzVHJhbnNhY3Rpb25zID0gbV9iYWNraW5nU3RvcmUtPnN1cHBvcnRzU2ltdWx0YW5l
b3VzVHJhbnNhY3Rpb25zKGxvY2tlcik7CisgICAgICAgIG1fYmFja2luZ1N0b3JlSXNFcGhlbWVy
YWwgPSBtX2JhY2tpbmdTdG9yZS0+aXNFcGhlbWVyYWwobG9ja2VyKTsKKyAgICAgICAgZXJyb3Ig
PSBtX2JhY2tpbmdTdG9yZS0+Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oZGF0YWJhc2VJbmZv
LCBsb2NrZXIpOworICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9y
ZSwgZGF0YWJhc2VJbmZvLCBlcnJvciwgIHRhc2tJZGVudGlmaWVyKSk7CiB9CkBAIC04OTIsNyAr
OTEwLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DcmVhdGVPYmplY3RTdG9y
ZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvCiAgICAgfQogCiAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlKTsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVh
dGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGluZm8pOworICAgIElEQkVycm9y
IGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVM
b2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbmZvLCBsb2NrZXIpOworICAgIH0KIAogICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZU9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIs
IGVycm9yLCBpbmZvKSk7CiB9CkBAIC05NDQsNyArOTY2LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIsIGNvCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZv
cm1EZWxldGVPYmplY3RTdG9yZSIpOwogCiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAg
ICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFu
c2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgSURCRXJyb3Ig
ZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxv
Y2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbG9ja2VyKTsKKyAg
ICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxldGVPYmplY3RTdG9yZSwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSk7CiB9CkBAIC0x
MDAxLDcgKzEwMjcsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVJlbmFtZU9i
amVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY28KICAgICB9CiAKICAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIG1fYmFja2luZ1N0b3JlLT5yZW5hbWVPYmplY3RT
dG9yZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFt
ZSk7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2sp
OworICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIGxvY2tlcik7CisgICAg
fQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUmVuYW1lT2JqZWN0U3RvcmUsIGNhbGxi
YWNrSWRlbnRpZmllciwgZXJyb3IsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSkpOwog
fQpAQCAtMTA0Niw3ICsxMDc1LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1D
bGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAgICAgTE9H
KEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1DbGVhck9iamVjdFN0
b3JlIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAgIElEQkVycm9yIGVycm9y
ID0gbV9iYWNraW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbG9ja2VyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0
YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0
YWJhc2U6OmRpZFBlcmZvcm1DbGVhck9iamVjdFN0b3JlLCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yKSk7CiB9CkBAIC0xMDk2LDE0ICsxMTI5LDE3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DcmVhdGVJbmRleCh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElE
CiAKICAgICBJREJFcnJvciBlcnJvcjsKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotICAg
IGlmICghbV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhl
ZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4OiBtX2JhY2tp
bmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7Ci0gICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxp
ZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwgdG8gY3JlYXRl
IGluZGV4Il9zKTsKLSAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtQ3JlYXRlSW5kZXgs
IGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIGluZm8pKTsKLSAgICAgICAgcmV0dXJuOworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAg
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
SW5kZXhlZERCLCAiJXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUNyZWF0ZUluZGV4OiBt
X2JhY2tpbmdTdG9yZSBpcyBudWxsIiwgdGhpcyk7CisgICAgICAgICAgICBlcnJvciA9IElEQkVy
cm9yKEludmFsaWRTdGF0ZUVycm9yLCAiQmFja2luZyBzdG9yZSBpcyBpbnZhbGlkIGZvciBjYWxs
IHRvIGNyZWF0ZSBpbmRleCJfcyk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1DcmVhdGVJbmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgaW5mbykpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUt
PmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW5mbywgbG9ja2VyKTsKICAgICB9
CiAKLSAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGluZm8pOwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNyZWF0ZUluZGV4
LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCBpbmZvKSk7CiB9CiAKQEAgLTExNjUsNyArMTIw
MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIExPRyhJbmRleGVkREIsICIoZGIp
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlSW5kZXgiKTsKIAogICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZSk7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlSW5kZXgodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGlu
ZGV4SWRlbnRpZmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFj
a2luZ1N0b3JlLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBsb2NrZXIpOworICAgIH0KIAogICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZUluZGV4LCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllcikpOwogfQpAQCAtMTIyOSw3
ICsxMjY5LDEwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1SZW5hbWVJbmRleCh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgfQogCiAgICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lSW5kZXgodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwg
bmV3TmFtZSk7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9y
ZUxvY2spOworICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmVuYW1lSW5kZXgodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFt
ZSwgbG9ja2VyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1SZW5hbWVJ
bmRleCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBp
bmRleElkZW50aWZpZXIsIG5ld05hbWUpKTsKIH0KQEAgLTEyOTksNzEgKzEzNDIsNzQgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRl
bnRpZmllciwgY29uc3QgSURCUmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
bV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW5kZXhlZERCLCAi
JXAgLSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkOiBtX2JhY2tpbmdTdG9yZSBp
cyBudWxsIiwgdGhpcyk7Ci0gICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0YXRlRXJy
b3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwgdG8gcHV0IG9yIGFkZCJfcyk7
Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50
aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgewor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJbmRl
eGVkREIsICIlcCAtIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQ6IG1fYmFja2lu
Z1N0b3JlIGlzIG51bGwiLCB0aGlzKTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52
YWxpZFN0YXRlRXJyb3IsICJCYWNraW5nIHN0b3JlIGlzIGludmFsaWQgZm9yIGNhbGwgdG8gcHV0
IG9yIGFkZCJfcyk7CisgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jv
c3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFk
ZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAKLSAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2JhY2tpbmdT
dG9yZS0+aW5mb0Zvck9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0gICAgaWYg
KCFvYmplY3RTdG9yZUluZm8pIHsKLSAgICAgICAgZXJyb3IgPSBJREJFcnJvcihJbnZhbGlkU3Rh
dGVFcnJvciwgIk9iamVjdCBzdG9yZSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGJhY2tpbmcgc3Rv
cmUiX3MpOwotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRU
YXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2JhY2tpbmdTdG9yZS0+aW5mb0Zvck9i
amVjdFN0b3JlKG9iamVjdFN0b3JlSWRlbnRpZmllciwgbG9ja2VyKTsKKyAgICAgICAgaWYgKCFv
YmplY3RTdG9yZUluZm8pIHsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IoSW52YWxpZFN0
YXRlRXJyb3IsICJPYmplY3Qgc3RvcmUgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBiYWNraW5nIHN0
b3JlIl9zKTsKKyAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBj
YWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAotICAgIGJvb2wgdXNlZEtleUlzR2VuZXJhdGVkID0gZmFsc2U7Ci0gICAg
dWludDY0X3Qga2V5TnVtYmVyOwotICAgIGF1dG8gZ2VuZXJhdGVkS2V5UmVzZXR0ZXIgPSBXVEY6
Om1ha2VTY29wZUV4aXQoW3RoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCAma2V5TnVtYmVyLCAmdXNlZEtleUlzR2VuZXJhdGVkXSgpIHsKLSAgICAgICAg
aWYgKHVzZWRLZXlJc0dlbmVyYXRlZCkKLSAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5yZXZl
cnRHZW5lcmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGtleU51bWJlcik7Ci0gICAgfSk7Ci0gICAgaWYgKG9iamVjdFN0b3JlSW5mby0+
YXV0b0luY3JlbWVudCgpICYmICFrZXlEYXRhLmlzVmFsaWQoKSkgewotICAgICAgICBlcnJvciA9
IG1fYmFja2luZ1N0b3JlLT5nZW5lcmF0ZUtleU51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIs
IG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5TnVtYmVyKTsKKyAgICAgICAgYm9vbCB1c2VkS2V5
SXNHZW5lcmF0ZWQgPSBmYWxzZTsKKyAgICAgICAgdWludDY0X3Qga2V5TnVtYmVyOworICAgICAg
ICBhdXRvIGdlbmVyYXRlZEtleVJlc2V0dGVyID0gV1RGOjptYWtlU2NvcGVFeGl0KFt0aGlzLCB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgJmtleU51bWJlciwg
JnVzZWRLZXlJc0dlbmVyYXRlZCwgJmxvY2tlcl0oKSB7CisgICAgICAgICAgICBpZiAodXNlZEtl
eUlzR2VuZXJhdGVkKQorICAgICAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5yZXZlcnRHZW5l
cmF0ZWRLZXlOdW1iZXIodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGtleU51bWJlciwgbG9ja2VyKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChvYmplY3RT
dG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSAmJiAha2V5RGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdlbmVyYXRlS2V5TnVtYmVyKHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlOdW1iZXIsIGxvY2tlcik7
CisgICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgcG9z
dERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlE
QkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3Is
IHVzZWRLZXkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHVzZWRLZXkuc2V0TnVtYmVyVmFsdWUoa2V5TnVtYmVyKTsKKyAgICAgICAgICAg
IHVzZWRLZXlJc0dlbmVyYXRlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
dXNlZEtleSA9IGtleURhdGE7CisKKyAgICAgICAgaWYgKG92ZXJ3cml0ZU1vZGUgPT0gSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlKSB7CisgICAgICAgICAg
ICBib29sIGtleUV4aXN0czsKKyAgICAgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmtl
eUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIHVzZWRLZXksIGtleUV4aXN0cywgbG9ja2VyKTsKKyAgICAgICAgICAgIGlmIChl
cnJvci5pc051bGwoKSAmJiBrZXlFeGlzdHMpCisgICAgICAgICAgICAgICAgZXJyb3IgPSBJREJF
cnJvcihDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBz
dG9yZSJfcyk7CisKKyAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlm
aWVyLCBlcnJvciwgdXNlZEtleSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBTdG9yYWdl
IE9wZXJhdGlvbgorICAgICAgICAvLyAuLi5JZiBhIHJlY29yZCBhbHJlYWR5IGV4aXN0cyBpbiBz
dG9yZSAuLi4KKyAgICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIHJlY29yZCBmcm9tIHN0b3JlIHVz
aW5nIHRoZSBzdGVwcyBmb3IgZGVsZXRpbmcgcmVjb3JkcyBmcm9tIGFuIG9iamVjdCBzdG9yZS4u
LgorICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0aW5n
IGl0IGZyb20gZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRoZSBh
cHByb3ByaWF0ZSBpbmRleGVzLgorICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxl
dGVSYW5nZSh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgdXNl
ZEtleSwgbG9ja2VyKTsKICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkgewogICAgICAgICAg
ICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVu
aXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwg
ZXJyb3IsIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdXNlZEtleS5zZXROdW1iZXJWYWx1ZShrZXlOdW1iZXIpOwotICAgICAgICB1
c2VkS2V5SXNHZW5lcmF0ZWQgPSB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICB1c2VkS2V5ID0g
a2V5RGF0YTsKLQotICAgIGlmIChvdmVyd3JpdGVNb2RlID09IEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlOjpOb092ZXJ3cml0ZSkgewotICAgICAgICBib29sIGtleUV4aXN0czsK
LSAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0
cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgdXNlZEtleSwga2V5
RXhpc3RzKTsKLSAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpICYmIGtleUV4aXN0cykKLSAgICAg
ICAgICAgIGVycm9yID0gSURCRXJyb3IoQ29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhp
c3RzIGluIHRoZSBvYmplY3Qgc3RvcmUiX3MpOworCisgICAgICAgIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPmFkZFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsICpvYmplY3RTdG9yZUluZm8s
IHVzZWRLZXksIG9yaWdpbmFsUmVjb3JkVmFsdWUsIGxvY2tlcik7CiAKICAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkgewogICAgICAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0
T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIDMuNC4xIE9iamVjdCBTdG9yZSBT
dG9yYWdlIE9wZXJhdGlvbgotICAgIC8vIC4uLklmIGEgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGlu
IHN0b3JlIC4uLgotICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBzdG9yZSB1c2lu
ZyB0aGUgc3RlcHMgZm9yIGRlbGV0aW5nIHJlY29yZHMgZnJvbSBhbiBvYmplY3Qgc3RvcmUuLi4K
LSAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGZvcm1hbGx5IGRlbGV0aW5nIGl0IGZy
b20gZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGFsc28gcmVtb3ZlcyBpdCBmcm9tIHRoZSBhcHByb3By
aWF0ZSBpbmRleGVzLgotICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmRlbGV0ZVJhbmdlKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1c2VkS2V5KTsKLSAg
ICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9y
bVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB1c2VkS2V5KSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgICAgIGlmIChvdmVyd3JpdGVNb2RlICE9IEluZGV4ZWREQjo6
T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpPdmVyd3JpdGVGb3JDdXJzb3IgJiYgb2JqZWN0U3Rv
cmVJbmZvLT5hdXRvSW5jcmVtZW50KCkgJiYga2V5RGF0YS50eXBlKCkgPT0gSW5kZXhlZERCOjpL
ZXlUeXBlOjpOdW1iZXIpCisgICAgICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5tYXli
ZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSwgbG9ja2VyKTsKIAotICAgIGVycm9yID0g
bV9iYWNraW5nU3RvcmUtPmFkZFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsICpvYmplY3RT
dG9yZUluZm8sIHVzZWRLZXksIG9yaWdpbmFsUmVjb3JkVmFsdWUpOwotCi0gICAgaWYgKCFlcnJv
ci5pc051bGwoKSkgewotICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwg
Y2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgdXNlZEtleSkpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGdlbmVyYXRlZEtleVJlc2V0dGVyLnJlbGVhc2UoKTsKICAgICB9Ci0KLSAgICBpZiAo
b3ZlcndyaXRlTW9kZSAhPSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3Zl
cndyaXRlRm9yQ3Vyc29yICYmIG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgpICYmIGtl
eURhdGEudHlwZSgpID09IEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyKQotICAgICAgICBlcnJv
ciA9IG1fYmFja2luZ1N0b3JlLT5tYXliZVVwZGF0ZUtleUdlbmVyYXRvck51bWJlcih0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwga2V5RGF0YS5udW1iZXIoKSk7
Ci0KLSAgICBnZW5lcmF0ZWRLZXlSZXNldHRlci5yZWxlYXNlKCk7CiAgICAgcG9zdERhdGFiYXNl
VGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHVzZWRLZXkp
KTsKIH0KIApAQCAtMTQzMyw3ICsxNDc5LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBl
cmZvcm1HZXRSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJSCiAg
ICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKIAogICAgIElEQkdldFJlc3VsdCByZXN1bHQ7Ci0g
ICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBrZXlSYW5nZURhdGEsIHR5cGUsIHJl
c3VsdCk7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAgICBlcnJvciA9IG1fYmFja2luZ1N0b3Jl
LT5nZXRSZWNvcmQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGtleVJhbmdlRGF0YSwgdHlwZSwgcmVzdWx0LCBsb2NrZXIpOworICAgIH0KIAogICAgIHBvc3RE
YXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkUGVyZm9ybUdldFJlY29yZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwg
cmVzdWx0KSk7CiB9CkBAIC0xNDQ0LDkgKzE0OTQsMTIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybUdldEluZGV4UmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29u
c3QKICAgICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdl
dEluZGV4UmVjb3JkIik7CiAKICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwotCiAgICAgSURC
R2V0UmVzdWx0IHJlc3VsdDsKLSAgICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5n
ZXRJbmRleFJlY29yZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyLCByZWNvcmRUeXBlLCByYW5nZSwgcmVzdWx0KTsKKyAgICBJREJF
cnJvciBlcnJvcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0
b3JlTG9jayk7CisgICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3Jk
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50
aWZpZXIsIHJlY29yZFR5cGUsIHJhbmdlLCByZXN1bHQsIGxvY2tlcik7CisgICAgfQogCiAgICAg
cG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lkZW50aWZpZXIsIGVy
cm9yLCByZXN1bHQpKTsKIH0KQEAgLTE0NjcsNyArMTUyMCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtR2V0QWxsUmVjb3Jkcyh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIs
IGNvbnN0CiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKIAogICAgIElEQkdldEFsbFJlc3Vs
dCByZXN1bHQ7Ci0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0QWxsUmVj
b3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdldEFsbFJlY29yZHNEYXRhLCByZXN1bHQpOwor
ICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9i
YWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0QWxs
UmVjb3Jkcyh0cmFuc2FjdGlvbklkZW50aWZpZXIsIGdldEFsbFJlY29yZHNEYXRhLCByZXN1bHQs
IGxvY2tlcik7CisgICAgfQogCiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtR2V0QWxsUmVj
b3JkcywgY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgV1RGTW92ZShyZXN1bHQpKSk7CiB9CkBA
IC0xNTExLDcgKzE1NjgsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUdldENv
dW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICBBU1NFUlQo
b2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIAogICAgIHVpbnQ2NF90IGNvdW50OwotICAgIElEQkVy
cm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmdldENvdW50KHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIGtleVJhbmdlRGF0YSwg
Y291bnQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+Z2V0Q291bnQodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGluZGV4SWRlbnRpZmllciwga2V5UmFuZ2VEYXRhLCBjb3VudCwgbG9ja2VyKTsKKyAgICB9CiAK
ICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRDb3VudCwgY2FsbGJhY2tJZGVudGlmaWVy
LCBlcnJvciwgY291bnQpKTsKIH0KQEAgLTE1NTEsNyArMTYxMiwxMSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uc3QgSQogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIoZGIpIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtRGVsZXRlUmVjb3JkIik7CiAKLSAg
ICBJREJFcnJvciBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5kZWxldGVSYW5nZSh0cmFuc2FjdGlv
bklkZW50aWZpZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgcmFuZ2UpOworICAgIElEQkVycm9y
IGVycm9yOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVM
b2NrKTsKKyAgICAgICAgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmFuZ2UodHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlLCBsb2NrZXIpOwor
ICAgIH0KIAogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCwgY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvcikpOwogfQpAQCAtMTU5Miw3ICsxNjU3LDExIEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1PcGVuQ3Vyc29yKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSURCCiAgICAgTE9HKEluZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1PcGVuQ3Vyc29yIik7CiAKICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwotICAg
IElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPm9wZW5DdXJzb3IodHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbmZvLCByZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJy
b3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGlu
Zm8sIHJlc3VsdCwgbG9ja2VyKTsKKyAgICB9CiAKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1PcGVuQ3Vyc29yLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpKTsKIH0KQEAg
LTE2MzMsNyArMTcwMiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtSXRlcmF0
ZUN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAgTE9HKEluZGV4
ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1JdGVyYXRlQ3Vyc29yIik7CiAK
ICAgICBJREJHZXRSZXN1bHQgcmVzdWx0OwotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5n
U3RvcmUtPml0ZXJhdGVDdXJzb3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlm
aWVyLCBkYXRhLCByZXN1bHQpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+aXRlcmF0ZUN1cnNvcih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNv
cklkZW50aWZpZXIsIGRhdGEsIHJlc3VsdCwgbG9ja2VyKTsKKyAgICB9CiAKICAgICBpZiAoZXJy
b3IuaXNOdWxsKCkpIHsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2N1cnNvclByZWZldGNo
ZXMuYWRkKGN1cnNvcklkZW50aWZpZXIpOwpAQCAtMTY1MCwxMCArMTcyMywyMCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHJlZmV0Y2hDdXJzb3IoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFucwogICAgIEFTU0VSVChtX2N1cnNvclByZWZldGNoZXMuY29udGFpbnMo
Y3Vyc29ySWRlbnRpZmllcikpOwogICAgIExPRyhJbmRleGVkREIsICIoZGIpIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUHJlZmV0Y2hDdXJzb3IiKTsKIAotICAgIGlmIChtX2hhcmRDbG9zZWRG
b3JVc2VyRGVsZXRlIHx8ICFtX2JhY2tpbmdTdG9yZS0+cHJlZmV0Y2hDdXJzb3IodHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyKSkKKyAgICBpZiAobV9oYXJkQ2xvc2VkRm9y
VXNlckRlbGV0ZSkgewogICAgICAgICBtX2N1cnNvclByZWZldGNoZXMucmVtb3ZlKGN1cnNvcklk
ZW50aWZpZXIpOwotICAgIGVsc2UKLSAgICAgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVByZWZldGNoQ3Vy
c29yLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZpZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNr
aW5nU3RvcmVMb2NrKTsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+cHJlZmV0Y2hDdXJz
b3IodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjdXJzb3JJZGVudGlmaWVyLCBsb2NrZXIpKSB7Cisg
ICAgICAgICAgICBtX2N1cnNvclByZWZldGNoZXMucmVtb3ZlKGN1cnNvcklkZW50aWZpZXIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgcG9zdERhdGFiYXNl
VGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVByZWZldGNoQ3Vyc29yLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGN1cnNvcklkZW50aWZp
ZXIpKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUl0ZXJhdGVDdXJz
b3IodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNv
bnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KQpAQCAtMTcxOCw3ICsxODAxLDExIEBAIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlvbih1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Db21taXRUcmFuc2FjdGlv
biAtICVzIiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKIAotICAgIElEQkVycm9yIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmNvbW1pdFRyYW5z
YWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgSURCRXJyb3IgZXJyb3I7CisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2JhY2tpbmdTdG9yZUxvY2spOworICAgICAg
ICBlcnJvciA9IG1fYmFja2luZ1N0b3JlLT5jb21taXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGxvY2tlcik7CisgICAgfQogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVh
dGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUNv
bW1pdFRyYW5zYWN0aW9uLCBjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCB0cmFuc2FjdGlvbklk
ZW50aWZpZXIpKTsKIH0KIApAQCAtMTgwOCw3ICsxODk1LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmll
ciwgY29uCiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwg
IihkYikgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1BYm9ydFRyYW5zYWN0aW9uIC0gJXMiLCB0
cmFuc2FjdGlvbklkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgSURCRXJyb3IgZXJyb3IgPSBtX2JhY2tpbmdTdG9yZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFu
c2FjdGlvbklkZW50aWZpZXIpOworICAgIElEQkVycm9yIGVycm9yOworICAgIHsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsKKyAgICAgICAgZXJyb3IgPSBt
X2JhY2tpbmdTdG9yZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGxv
Y2tlcik7CisgICAgfQogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUFib3J0VHJhbnNhY3Rp
b24sIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHRyYW5zYWN0aW9uSWRlbnRpZmllcikpOwog
fQogCkBAIC0yMDE4LDcgKzIxMDksMTIgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9y
bUFjdGl2YXRlVHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSh1aW50NjRfdCBjYWxsYmEKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybUFjdGl2YXRl
VHJhbnNhY3Rpb25JbkJhY2tpbmdTdG9yZSIpOwogCi0gICAgSURCRXJyb3IgZXJyb3IgPSBtX2Jh
Y2tpbmdTdG9yZS0+YmVnaW5UcmFuc2FjdGlvbihpbmZvKTsKKyAgICBJREJFcnJvciBlcnJvcjsK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fYmFja2luZ1N0b3JlTG9jayk7Cisg
ICAgICAgIGVycm9yID0gbV9iYWNraW5nU3RvcmUtPmJlZ2luVHJhbnNhY3Rpb24oaW5mbywgbG9j
a2VyKTsKKyAgICB9CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1BY3RpdmF0ZVRyYW5z
YWN0aW9uSW5CYWNraW5nU3RvcmUsIGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IpKTsKIH0KIApA
QCAtMjM1MSw0NSArMjQ0Nyw2NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJv
ckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllcikKICAgICBtX2Vycm9yQ2FsbGJh
Y2tzLnJlbW92ZShjYWxsYmFja0lkZW50aWZpZXIpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjphYm9ydFRyYW5zYWN0aW9uT25NYWluVGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2Fj
dGlvbk9uTWFpblRocmVhZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQogewotICAgIHRyYW5zYWN0aW9uLnNldFJlc3Vs
dChtX2JhY2tpbmdTdG9yZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpKSk7CisgICAgdHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0b3JlLT5h
Ym9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIGxvY2tlcikp
OwogICAgIHRyYW5zYWN0aW9uLnNldFN0YXRlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OlN0YXRlOjpBYm9ydGVkKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJh
bnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRUcmFuc2FjdGlvbk9uTWFpblRo
cmVhZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgTG9j
a0hvbGRlciYgbG9ja2VyKQogewotICAgIHRyYW5zYWN0aW9uLnNldFJlc3VsdChtX2JhY2tpbmdT
dG9yZS0+Y29tbWl0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkp
OworICAgIHRyYW5zYWN0aW9uLnNldFJlc3VsdChtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgbG9ja2VyKSk7CiAgICAgdHJh
bnNhY3Rpb24uc2V0U3RhdGUoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkNv
bW1pdHRlZCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmlzaEFjdGl2ZVRyYW5z
YWN0aW9ucygpCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzdXNwZW5kKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRv
VmVjdG9yKG1faW5Qcm9ncmVzc1RyYW5zYWN0aW9ucy5rZXlzKCkpKSB7Ci0gICAgICAgIGF1dG8g
dHJhbnNhY3Rpb24gPSBtX2luUHJvZ3Jlc3NUcmFuc2FjdGlvbnMuZ2V0KGlkZW50aWZpZXIpOwot
ICAgICAgICBhYm9ydFRyYW5zYWN0aW9uT25NYWluVGhyZWFkKCp0cmFuc2FjdGlvbik7Ci0gICAg
fQorICAgIGlmIChtX2lzU3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc1N1c3Bl
bmRlZCA9IHRydWU7CiAKLSAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXIgOiBjb3B5VG9WZWN0b3Io
bV9maW5pc2hpbmdUcmFuc2FjdGlvbnMua2V5cygpKSkgewotICAgICAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5oYXNUcmFuc2FjdGlvbihpZGVudGlmaWVyKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9iYWNraW5nU3RvcmVMb2NrKTsK
KyAgICAgICAgZm9yIChhdXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1faW5Qcm9ncmVz
c1RyYW5zYWN0aW9ucy5rZXlzKCkpKSB7CisgICAgICAgICAgICBhdXRvIHRyYW5zYWN0aW9uID0g
bV9pblByb2dyZXNzVHJhbnNhY3Rpb25zLmdldChpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGFi
b3J0VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoKnRyYW5zYWN0aW9uLCBsb2NrZXIpOworICAgICAg
ICB9CiAKLSAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fZmluaXNoaW5nVHJhbnNhY3Rpb25z
LmdldChpZGVudGlmaWVyKTsKLSAgICAgICAgc3dpdGNoICh0cmFuc2FjdGlvbi0+c3RhdGUoKSkg
ewotICAgICAgICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpBYm9y
dGluZzoKLSAgICAgICAgICAgIGFib3J0VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoKnRyYW5zYWN0
aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OlN0YXRlOjpDb21taXR0aW5nOgotICAgICAgICAgICAgY29tbWl0VHJhbnNh
Y3Rpb25Pbk1haW5UaHJlYWQoKnRyYW5zYWN0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpSdW5uaW5nOgot
ICAgICAgICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpBYm9ydGVk
OgotICAgICAgICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpDb21t
aXR0ZWQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZm9yIChh
dXRvJiBpZGVudGlmaWVyIDogY29weVRvVmVjdG9yKG1fZmluaXNoaW5nVHJhbnNhY3Rpb25zLmtl
eXMoKSkpIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmhhc1RyYW5zYWN0aW9u
KGlkZW50aWZpZXIsIGxvY2tlcikpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX2ZpbmlzaGluZ1RyYW5zYWN0aW9ucy5nZXQoaWRl
bnRpZmllcik7CisgICAgICAgICAgICBzd2l0Y2ggKHRyYW5zYWN0aW9uLT5zdGF0ZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpBYm9y
dGluZzoKKyAgICAgICAgICAgICAgICBhYm9ydFRyYW5zYWN0aW9uT25NYWluVGhyZWFkKCp0cmFu
c2FjdGlvbiwgbG9ja2VyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkNvbW1pdHRpbmc6CisgICAg
ICAgICAgICAgICAgY29tbWl0VHJhbnNhY3Rpb25Pbk1haW5UaHJlYWQoKnRyYW5zYWN0aW9uLCBs
b2NrZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpTdGF0ZTo6UnVubmluZzoKKyAgICAgICAgICAgIGNhc2Ug
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGU6OkFib3J0ZWQ6CisgICAgICAgICAg
ICBjYXNlIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OlN0YXRlOjpDb21taXR0ZWQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CisKKyAgICBtX2JhY2tpbmdTdG9yZUxvY2subG9jaygpOworfQorCit2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisKKyAgICBpZiAoIW1faXNTdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lz
U3VzcGVuZGVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmVMb2NrLmlzSGVs
ZCgpKTsKKyAgICBtX2JhY2tpbmdTdG9yZUxvY2sudW5sb2NrKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRleCBlYzNmYzBjNzNlYTMwZTI0
ZTdhMGNlZTU4ODlmMzk2MWYwY2M0YzI3Li5jMzU4ZGU0OTM0NzZiNDQxM2RlNDJjYTY0MTE2MjM0
NTc2ZWU2YTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAtMTE2LDcgKzExNiw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaGFyZENsb3NlZEZvclVzZXJEZWxldGUoKSBjb25zdCB7IHJldHVy
biBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlOyB9CiAKLSAgICB2b2lkIGZpbmlzaEFjdGl2ZVRy
YW5zYWN0aW9ucygpOworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVEYXRhYmFzZU9wZXJhdGlvbnMoKTsKQEAgLTIzMiw5
ICsyMzMsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uPiB0YWtlTmV4dFJ1bm5hYmxlVHJhbnNhY3Rpb24oYm9vbCYgaGFkRGVmZXJyZWRUcmFuc2Fj
dGlvbnMpOwogCiAgICAgYm9vbCBwcmVwYXJlVG9GaW5pc2hUcmFuc2FjdGlvbihVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6U3RhdGUp
OwotICAgIHZvaWQgYWJvcnRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJik7Ci0gICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJik7Ci0gICAgCisgICAgdm9pZCBhYm9ydFRyYW5z
YWN0aW9uT25NYWluVGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBM
b2NrSG9sZGVyJik7CisgICAgdm9pZCBjb21taXRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgTG9ja0hvbGRlciYpOworCiAgICAgdm9p
ZCBjbGVhclN0YWxlUGVuZGluZ09wZW5EQlJlcXVlc3RzKCk7CiAKICAgICB2b2lkIHBvc3REYXRh
YmFzZVRhc2soQ3Jvc3NUaHJlYWRUYXNrJiYpOwpAQCAtMjY5LDYgKzI3MCwxMSBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX2lzT3BlbmluZ0JhY2tpbmdTdG9yZSB7IGZhbHNlIH07CiAgICAgSURC
RXJyb3IgbV9iYWNraW5nU3RvcmVPcGVuRXJyb3I7CisKKyAgICAvLyBVc3VhbGx5IElEQkJhY2tp
bmdTdG9yZSBhY3Rpdml0aWVzIGhhcHBlbnMgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkIG9ubHks
IGJ1dCBvbiBwcm9jZXNzIHN1c3BlbnNpb24sCisgICAgLy8gd2UgbmVlZCB0byBmb3JjZSB0cmFu
c2FjdGlvbnMgb2YgSURCQmFja2luZ1N0b3JlIHRvIHN0b3Agb24gdGhlIG1haW4gdGhyZWFkLCBh
bmQgd2UgbmVlZCB0byBtYWtlIHN1cmUKKyAgICAvLyBubyBJREJCYWNraW5nU3RvcmUgYWN0aXZp
dHkgY2FuIGhhcHBlbiBhZnRlciBwcm9jZXNzIGFja25vd2xlZGdlcyBzdXNwZW5zaW9uLgorICAg
IExvY2sgbV9iYWNraW5nU3RvcmVMb2NrOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5n
U3RvcmU+IG1fYmFja2luZ1N0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUlu
Zm8+IG1fZGF0YWJhc2VJbmZvOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+
IG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm87CkBAIC0zMDYsNiArMzEyLDggQEAgcHJp
dmF0ZToKICAgICBIYXNoU2V0PElEQlJlc291cmNlSWRlbnRpZmllcj4gbV9jdXJzb3JQcmVmZXRj
aGVzOwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgdWludDY0X3Q+IG1fcGVuZGluZ1NwYWNlSW5j
cmVhc2VUYXNrczsKKworICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIK
</data>

          </attachment>
      

    </bug>

</bugzilla>