<?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>188474</bug_id>
          
          <creation_ts>2018-08-10 11:01:06 -0700</creation_ts>
          <short_desc>CrashTracer: com.apple.WebKit.Storage at WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient(WebCore::IDBServer::UniqueIDBDatabaseConnection&amp;)</short_desc>
          <delta_ts>2018-08-12 23:33:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1449320</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 11:01:06 -0700</bug_when>
    <thetext>Thread 0 Crashed ↩:: Dispatch queue: com.apple.main-thread
0   com.apple.WebCore             	0x00007fff4b774a9d WTF::ListHashSet&lt;WTF::RefPtr&lt;WebCore::IDBServer::UniqueIDBDatabaseConnection, WTF::DumbPtrTraits&lt;WebCore::IDBServer::UniqueIDBDatabaseConnection&gt; &gt;, WTF::PtrHash&lt;WTF::RefPtr&lt;WebCore::IDBServer::UniqueIDBDatabaseConnection, WTF::DumbPtrTraits&lt;WebCore::IDBServer::UniqueIDBDatabaseConnection&gt; &gt; &gt; &gt;::find(WTF::RefPtr&lt;WebCore::IDBServer::UniqueIDBDatabaseConnection, WTF::DumbPtrTraits&lt;WebCore::IDBServer::UniqueIDBDatabaseConnection&gt; &gt; const&amp;) + 173
1   com.apple.WebCore             	0x00007fff4b7614a7 WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient(WebCore::IDBServer::UniqueIDBDatabaseConnection&amp;) + 55
2   com.apple.WebCore             	0x00007fff4b727a9d WebCore::IDBServer::IDBConnectionToClient::connectionToClientClosed() + 317
3   com.apple.WebCore             	0x00007fff4b7294a5 WebCore::IDBServer::IDBServer::unregisterConnection(WebCore::IDBServer::IDBConnectionToClient&amp;) + 21
4   com.apple.WebKit              	0x00007fff4c99772a WebKit::StorageToWebProcessConnection::didClose(IPC::Connection&amp;) + 226
5   com.apple.JavaScriptCore      	0x00007fff40e63e97 WTF::RunLoop::performWork() + 231
6   com.apple.JavaScriptCore      	0x00007fff40e64122 WTF::RunLoop::performWork(void*) + 34

As Chris suggested, this crash may be caused by stale reference to UniqueIDBDatabase in UniqueIDBDatabaseConnection. UniqueIDBDatabaseConnection could outlive UniqueIDBDatabase because it&apos;s refcounted by UniqueIDBDatabaseTransaction, and it holds refcount of UniqueIDBDatabaseTransaction in m_transactionMap.
To make the code more robust, and also put up a speculative fix for this crash, we should make the UniqueIDBDatabase a WeakPtr. Also, assertions are added to make it easier for debugging related storage process crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449331</commentid>
    <comment_count>1</comment_count>
      <attachid>346914</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 11:49:28 -0700</bug_when>
    <thetext>Created attachment 346914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449333</commentid>
    <comment_count>2</comment_count>
      <attachid>346914</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-08-10 11:51:49 -0700</bug_when>
    <thetext>Comment on attachment 346914
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:66
&gt; +UniqueIDBDatabase&amp; UniqueIDBDatabaseConnection::database()
&gt; +{
&gt; +    ASSERT(m_database);
&gt; +    return *m_database;
&gt; +}

What&apos;s this used for?  Doesn&apos;t this defeat the purpose of a WeakPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449334</commentid>
    <comment_count>3</comment_count>
      <attachid>346914</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-10 11:53:00 -0700</bug_when>
    <thetext>Comment on attachment 346914
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:66
&gt;&gt; +}
&gt; 
&gt; What&apos;s this used for?  Doesn&apos;t this defeat the purpose of a WeakPtr?

I agree with Alex, we probably want to return a raw pointer and have the caller null-check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449366</commentid>
    <comment_count>4</comment_count>
      <attachid>346923</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 14:14:07 -0700</bug_when>
    <thetext>Created attachment 346923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449367</commentid>
    <comment_count>5</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 14:18:07 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Comment on attachment 346914 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346914&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:66
&gt; &gt;&gt; +}
&gt; &gt; 
&gt; &gt; What&apos;s this used for?  Doesn&apos;t this defeat the purpose of a WeakPtr?
&gt; 
&gt; I agree with Alex, we probably want to return a raw pointer and have the
&gt; caller null-check.

Added assertions to callers in IDBDatabaseTransaction and made database() raw pointer. Do you think we should make early returns on null?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449368</commentid>
    <comment_count>6</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 14:18:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/42657666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449373</commentid>
    <comment_count>7</comment_count>
      <attachid>346923</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-10 14:38:56 -0700</bug_when>
    <thetext>Comment on attachment 346923
Patch

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

r=me with comments.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:75
&gt; +    if (m_database) {

This would look better as an early return.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:62
&gt; +    ASSERT(database);

We probably want to null check it since we believe the transaction / connection can outlive their database.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449389</commentid>
    <comment_count>8</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 14:59:59 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; Comment on attachment 346923 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=346923&amp;action=review
&gt; 
&gt; r=me with comments.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:75
&gt; &gt; +    if (m_database) {
&gt; 
&gt; This would look better as an early return.
&gt; 
Okay.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:62
&gt; &gt; +    ASSERT(database);
&gt; 
&gt; We probably want to null check it since we believe the transaction /
&gt; connection can outlive their database.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449390</commentid>
    <comment_count>9</comment_count>
      <attachid>346932</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 15:00:06 -0700</bug_when>
    <thetext>Created attachment 346932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449412</commentid>
    <comment_count>10</comment_count>
      <attachid>346939</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 16:46:02 -0700</bug_when>
    <thetext>Created attachment 346939
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449413</commentid>
    <comment_count>11</comment_count>
      <attachid>346939</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-10 16:47:26 -0700</bug_when>
    <thetext>Comment on attachment 346939
Patch for landing

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

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:189
&gt; +    RELEASE_ASSERT(injectedBundle.isTestRunning());

Why is this in there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449414</commentid>
    <comment_count>12</comment_count>
      <attachid>346940</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-08-10 16:50:03 -0700</bug_when>
    <thetext>Created attachment 346940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449416</commentid>
    <comment_count>13</comment_count>
      <attachid>346940</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-08-10 16:59:26 -0700</bug_when>
    <thetext>Comment on attachment 346940
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449575</commentid>
    <comment_count>14</comment_count>
      <attachid>346940</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-12 23:33:14 -0700</bug_when>
    <thetext>Comment on attachment 346940
Patch

Clearing flags on attachment: 346940

Committed r234791: &lt;https://trac.webkit.org/changeset/234791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449576</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-12 23:33:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346914</attachid>
            <date>2018-08-10 11:49:28 -0700</date>
            <delta_ts>2018-08-10 14:14:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188474-20180810114927.patch</filename>
            <type>text/plain</type>
            <size>10643</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk0YTA1NjBmYmVkODc2
ZGI5OWIzYzI0NjdjMmZlYWMyN2U4YmEyNC4uNmY0NzIyNjA2ZDFlYmEwZjEzZDdiOGVjMmUxNWUx
NmZkNzc4MjkxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE4LTA4LTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyYXNoVHJhY2VyOiBjb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2UgYXQgV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg4NDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uIGlzIHJlZmNvdW50
ZWQgYnkgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiBhbmQgaXQgcmVmY291bnRzCisgICAg
ICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uIFRoaXMgY3ljbGUgY291bGQgbWFrZSBV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24gb3V0bGl2ZXMKKyAgICAgICAgVW5pcXVlSURCRGF0
YWJhc2UsIHNvIGl0cyByZWZlcmVuY2UgdG8gVW5pcXVlSURCRGF0YWJhc2UgbWF5IGJlIHN0YWxl
LiBDYWxsaW5nIGEgZnVuY3Rpb24KKyAgICAgICAgb24gYSBzdGFsZSBvYmplY3QgaXMgcHJvYmFi
bHkgdGhlIHJlYXNvbiBvZiByZWNlbnQgdmFyaW91cyBzdG9yYWdlIHByb2Nlc3MgY3Jhc2hlcyBp
bgorICAgICAgICBpbmRleGVkREIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtX2RhdGFi
YXNlIGEgV2Vha1B0ciBhbmQgYWRkcyBhc3NlcnRpb25zIHRoYXQgY291bGQgaGVscCB1cyBkZWJ1
ZyB0aGUKKyAgICAgICAgY3Jhc2hlcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OlVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlQ29ubmVjdGlvbjo6flVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmNvbm5lY3Rpb25DbG9zZWRG
cm9tQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRGaXJlVmVyc2lv
bkNoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmNyZWF0
ZVZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZXN0YWJsaXNoVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRp
ZEFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkYXRhYmFzZSk6IERlbGV0ZWQuCisKIDIw
MTgtMDgtMDkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgbWVt
b3J5Rm9vdHByaW50IHNob3VsZCByZXR1cm4gc2l6ZV90IG5vdCBvcHRpb25hbDxzaXplX3Q+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDlhOGIxYzVkMDYyYWI0YmQxZjkzYTg4NTY5ZjI3NDg2
ZDUxOTNkYzguLmYzYjg3ODhmZTg3NzE1MWZiOGFkNWE5ZWIxYmQzMGJiNzBjMTVkMDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCkBAIC03Miw3ICs3Miw3IEBAIHR5cGVkZWYgRnVuY3Rpb248dm9p
ZChjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQkdldFJlc3VsdCYpPiBHZXRSZXN1bHRDYWxsYmFj
azsKIHR5cGVkZWYgRnVuY3Rpb248dm9pZChjb25zdCBJREJFcnJvciYsIGNvbnN0IElEQkdldEFs
bFJlc3VsdCYpPiBHZXRBbGxSZXN1bHRzQ2FsbGJhY2s7CiB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQo
Y29uc3QgSURCRXJyb3ImLCB1aW50NjRfdCk+IENvdW50Q2FsbGJhY2s7CiAKLWNsYXNzIFVuaXF1
ZUlEQkRhdGFiYXNlIHsKK2NsYXNzIFVuaXF1ZUlEQkRhdGFiYXNlIDogcHVibGljIENhbk1ha2VX
ZWFrUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiB7CiBwdWJsaWM6CiAgICAgVW5pcXVlSURCRGF0YWJh
c2UoSURCU2VydmVyJiwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CiAgICAgVW5pcXVl
SURCRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2UmKSA9IGRlbGV0ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKaW5kZXggODQwMTVkODZjNGNhNDhmMDFiZGQ5
NWFjNGM0NGY2MzQ2OGMwYWEwYS4uNzE0YmIyOTYzNTY2YWU1ZTIxZmJiZTRhYmJhNGM4YmYzYzUx
YjVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHAKQEAg
LTQ0LDIwICs0NCwyNyBAQCBSZWY8VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uPiBVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmNyZWF0ZShVbmlxdWVJREJEYQogfQogCiBVbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb246OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbihVbmlxdWVJREJE
YXRhYmFzZSYgZGF0YWJhc2UsIFNlcnZlck9wZW5EQlJlcXVlc3QmIHJlcXVlc3QpCi0gICAgOiBt
X2RhdGFiYXNlKGRhdGFiYXNlKQorICAgIDogbV9kYXRhYmFzZShtYWtlV2Vha1B0cihkYXRhYmFz
ZSkpCiAgICAgLCBtX2Nvbm5lY3Rpb25Ub0NsaWVudChyZXF1ZXN0LmNvbm5lY3Rpb24oKSkKICAg
ICAsIG1fb3BlblJlcXVlc3RJZGVudGlmaWVyKHJlcXVlc3QucmVxdWVzdERhdGEoKS5yZXF1ZXN0
SWRlbnRpZmllcigpKQogewotICAgIG1fZGF0YWJhc2Uuc2VydmVyKCkucmVnaXN0ZXJEYXRhYmFz
ZUNvbm5lY3Rpb24oKnRoaXMpOworICAgIG1fZGF0YWJhc2UtPnNlcnZlcigpLnJlZ2lzdGVyRGF0
YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudC5yZWdpc3Rl
ckRhdGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7CiB9CiAKIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbjo6flVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbigpCiB7Ci0gICAgbV9kYXRhYmFzZS5z
ZXJ2ZXIoKS51bnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKKyAgICBpZiAobV9k
YXRhYmFzZSkKKyAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyKCkudW5yZWdpc3RlckRhdGFiYXNl
Q29ubmVjdGlvbigqdGhpcyk7CiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQudW5yZWdpc3RlckRh
dGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7CiB9CiAKK1VuaXF1ZUlEQkRhdGFiYXNlJiBVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmRhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFz
ZSk7CisgICAgcmV0dXJuICptX2RhdGFiYXNlOworfQorCiBib29sIFVuaXF1ZUlEQkRhdGFiYXNl
Q29ubmVjdGlvbjo6aGFzTm9uRmluaXNoZWRUcmFuc2FjdGlvbnMoKSBjb25zdAogewogICAgIHJl
dHVybiAhbV90cmFuc2FjdGlvbk1hcC5pc0VtcHR5KCk7CkBAIC03MCwxMCArNzcsMTMgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2Fs
bGJhY2soVW5pcXVlSURCRGF0YWIKICAgICBjb25zdCBhdXRvJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIgPSB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpOwogICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7CiAKLSAgICBtX2RhdGFi
YXNlLmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0
cmFuc2FjdGlvbklkZW50aWZpZXJdKGNvbnN0IElEQkVycm9yJikgewotICAgICAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbk1hcC5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKLSAgICAg
ICAgbV90cmFuc2FjdGlvbk1hcC5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICB9
KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpIHsKKyAgICAg
ICAgbV9kYXRhYmFzZS0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAg
ICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1hcC5jb250YWlucyh0cmFuc2FjdGlvbklkZW50
aWZpZXIpKTsKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb25NYXAucmVtb3ZlKHRyYW5zYWN0aW9u
SWRlbnRpZmllcik7CisgICAgICAgIH0pOworICAgIH0KIH0KIAogdm9pZCBVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb246OmNvbm5lY3Rpb25QZW5kaW5nQ2xvc2VGcm9tQ2xpZW50KCkKQEAgLTg3
LDI4ICs5NywzNiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29ubmVjdGlv
bkNsb3NlZEZyb21DbGllbnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50IC0gJXMgLSAlIiBQUkl1
NjQsIG1fb3BlblJlcXVlc3RJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBpZGVudGlmaWVyKCkpOwogCi0gICAgbV9kYXRhYmFzZS5jb25uZWN0aW9uQ2xvc2VkRnJvbUNs
aWVudCgqdGhpcyk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmIChtX2RhdGFiYXNl
KQorICAgICAgICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhpcyk7
CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VG
cm9tU2VydmVyKCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyIC0gJXMgLSAlIiBQUkl1NjQsIG1fb3Bl
blJlcXVlc3RJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlm
aWVyKCkpOwogCi0gICAgbV9kYXRhYmFzZS5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCp0aGlz
KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAg
IG1fZGF0YWJhc2UtPmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoKnRoaXMpOwogfQogCiB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIExP
RyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpcmVWZXJzaW9u
Q2hhbmdlRXZlbnQgLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50aWZpZXIubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAKLSAgICBtX2RhdGFi
YXNlLmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsK
KyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1f
ZGF0YWJhc2UtPmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlm
aWVyKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpbmlzaEhh
bmRsaW5nVmVyc2lvbkNoYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllcikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VD
b25uZWN0aW9uOjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UgLSAlcyAtICUiIFBSSXU2
NCwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
ZGVudGlmaWVyKCkpOwogCi0gICAgbV9kYXRhYmFzZS5kaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25D
aGFuZ2UoKnRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2UpOworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5kaWRGaW5pc2hI
YW5kbGluZ1ZlcnNpb25DaGFuZ2UoKnRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiB9CiAK
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90
IHJlcXVlc3RlZFZlcnNpb24pCkBAIC0xMjIsNyArMTQwLDcgQEAgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hh
bmdlVHIKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
cmVhdGVWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVx
dWVzdElkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIo
KSk7CiAgICAgQVNTRVJUKCFtX2Nsb3NlUGVuZGluZyk7CiAKLSAgICBJREJUcmFuc2FjdGlvbklu
Zm8gaW5mbyA9IElEQlRyYW5zYWN0aW9uSW5mbzo6dmVyc2lvbkNoYW5nZShtX2Nvbm5lY3Rpb25U
b0NsaWVudCwgbV9kYXRhYmFzZS5pbmZvKCksIG5ld1ZlcnNpb24pOworICAgIElEQlRyYW5zYWN0
aW9uSW5mbyBpbmZvID0gSURCVHJhbnNhY3Rpb25JbmZvOjp2ZXJzaW9uQ2hhbmdlKG1fY29ubmVj
dGlvblRvQ2xpZW50LCBtX2RhdGFiYXNlLT5pbmZvKCksIG5ld1ZlcnNpb24pOwogCiAgICAgUmVm
PFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9u
TWFwLnNldCh0cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdl
dCgpKTsKQEAgLTE0Miw3ICsxNjAsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjo6ZXN0YWJsaXNoVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJgogCiAgICAg
UmVmPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0
aW9uTWFwLnNldCh0cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9u
LmdldCgpKTsKLSAgICBtX2RhdGFiYXNlLmVucXVldWVUcmFuc2FjdGlvbihXVEZNb3ZlKHRyYW5z
YWN0aW9uKSk7CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgbV9kYXRhYmFzZS0+ZW5x
dWV1ZVRyYW5zYWN0aW9uKFdURk1vdmUodHJhbnNhY3Rpb24pKTsKIH0KIAogdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKQEAgLTE1
Miw3ICsxNzIsOCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkQWJvcnRU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aQogICAgIGF1dG8gdHJhbnNhY3Rp
b25JZGVudGlmaWVyID0gdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKTsKICAgICBhdXRv
IHRha2VuVHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uTWFwLnRha2UodHJhbnNhY3Rpb25JZGVu
dGlmaWVyKTsKIAotICAgIEFTU0VSVCh0YWtlblRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UuaGFy
ZENsb3NlZEZvclVzZXJEZWxldGUoKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFT
U0VSVCh0YWtlblRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UtPmhhcmRDbG9zZWRGb3JVc2VyRGVs
ZXRlKCkpOwogICAgIGlmICh0YWtlblRyYW5zYWN0aW9uKQogICAgICAgICBtX2Nvbm5lY3Rpb25U
b0NsaWVudC5kaWRBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3Ip
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4IDJmMWEy
OWEyZTg4ZTUyNTg5ZTU4MWNhOTIxZjY5OTQ1YmMyMzkzOTMuLjA2YmZlMmI2NDk5NTY2OWVmNThk
Yzg4ODI1MzViZTMyMDY0NThhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTMs
NyBAQCBwdWJsaWM6CiAgICAgflVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbigpOwogCiAgICAg
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBvcGVuUmVxdWVzdElkZW50aWZpZXIoKSB7IHJl
dHVybiBtX29wZW5SZXF1ZXN0SWRlbnRpZmllcjsgfQotICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBk
YXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KKyAgICBVbmlxdWVJREJEYXRhYmFzZSYg
ZGF0YWJhc2UoKTsKICAgICBJREJDb25uZWN0aW9uVG9DbGllbnQmIGNvbm5lY3Rpb25Ub0NsaWVu
dCgpIHsgcmV0dXJuIG1fY29ubmVjdGlvblRvQ2xpZW50OyB9CiAKICAgICB2b2lkIGNvbm5lY3Rp
b25QZW5kaW5nQ2xvc2VGcm9tQ2xpZW50KCk7CkBAIC04Niw3ICs4Nyw3IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNl
JiwgU2VydmVyT3BlbkRCUmVxdWVzdCYpOwogCi0gICAgVW5pcXVlSURCRGF0YWJhc2UmIG1fZGF0
YWJhc2U7CisgICAgV2Vha1B0cjxVbmlxdWVJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBJ
REJDb25uZWN0aW9uVG9DbGllbnQmIG1fY29ubmVjdGlvblRvQ2xpZW50OwogICAgIElEQlJlc291
cmNlSWRlbnRpZmllciBtX29wZW5SZXF1ZXN0SWRlbnRpZmllcjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346923</attachid>
            <date>2018-08-10 14:14:07 -0700</date>
            <delta_ts>2018-08-10 15:00:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188474-20180810141407.patch</filename>
            <type>text/plain</type>
            <size>31141</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk0YTA1NjBmYmVkODc2
ZGI5OWIzYzI0NjdjMmZlYWMyN2U4YmEyNC4uYWU3YTZmMTdmM2I0NGIyZmVjNDdhZjhjZDI4N2Fl
YWRiNzY4NjI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE4LTA4LTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyYXNoVHJhY2VyOiBjb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2UgYXQgV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg4NDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uIGlzIHJlZmNvdW50
ZWQgYnkgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiBhbmQgaXQgcmVmY291bnRzCisgICAg
ICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uIFRoaXMgY3ljbGUgY291bGQgbWFrZSBV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24gb3V0bGl2ZXMKKyAgICAgICAgVW5pcXVlSURCRGF0
YWJhc2UsIHNvIGl0cyByZWZlcmVuY2UgdG8gVW5pcXVlSURCRGF0YWJhc2UgbWF5IGJlIHN0YWxl
LiBDYWxsaW5nIGEgZnVuY3Rpb24KKyAgICAgICAgb24gYSBzdGFsZSBvYmplY3QgaXMgcHJvYmFi
bHkgdGhlIHJlYXNvbiBvZiByZWNlbnQgdmFyaW91cyBzdG9yYWdlIHByb2Nlc3MgY3Jhc2hlcyBp
bgorICAgICAgICBpbmRleGVkREIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtX2RhdGFi
YXNlIGEgV2Vha1B0ciBhbmQgYWRkcyBhc3NlcnRpb25zIHRoYXQgY291bGQgaGVscCB1cyBkZWJ1
ZyB0aGUKKyAgICAgICAgY3Jhc2hlcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmln
aW5zKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6VW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uOjp+VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjphYm9y
dFRyYW5zYWN0aW9uV2l0aG91dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbjo6ZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmVzdGFibGlzaFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRBYm9ydFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246On5VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlSWRlbnRpZmllcnMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXN1bHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6
Om9wZW5EYXRhYmFzZVN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0RGF0YTo6
b3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZCk6CisKIDIwMTgtMDgtMDkgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgbWVtb3J5Rm9vdHByaW50IHNob3VsZCByZXR1
cm4gc2l6ZV90IG5vdCBvcHRpb25hbDxzaXplX3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IDFiOTk0NTIyMmMw
ZDgxNDdiNzgzNDVjYjUwMmI4Yzg5YmUzNzJlNjMuLjA1OWFlYjU1MWUwY2RlYmQzMjUyNmRmZmFh
ODI0MzM1YTliMjFlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBJREJT
ZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSBtb2Rp
ZmljYXRpb25UaW1lLAogCiAgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG9wZW5EYXRh
YmFzZXM7CiAgICAgZm9yIChhdXRvKiBjb25uZWN0aW9uIDogbV9kYXRhYmFzZUNvbm5lY3Rpb25z
LnZhbHVlcygpKQotICAgICAgICBvcGVuRGF0YWJhc2VzLmFkZCgmY29ubmVjdGlvbi0+ZGF0YWJh
c2UoKSk7CisgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkp
OwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG9wZW5EYXRhYmFzZXMpCiAgICAgICAgIGRh
dGFiYXNlLT5pbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKTsKQEAgLTUyNiwxMCArNTI2LDEz
IEBAIHZvaWQgSURCU2VydmVyOjpjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29u
c3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0CiAKICAgICBIYXNoU2V0PFVuaXF1ZUlEQkRhdGFi
YXNlKj4gb3BlbkRhdGFiYXNlczsKICAgICBmb3IgKGF1dG8qIGNvbm5lY3Rpb24gOiBtX2RhdGFi
YXNlQ29ubmVjdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmll
ciA9IGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaWRlbnRpZmllcigpOworICAgICAgICBhdXRvIGRh
dGFiYXNlID0gY29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICAgICAgQVNTRVJUKGRhdGFiYXNl
KTsKKworICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gZGF0YWJhc2UtPmlkZW50aWZp
ZXIoKTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKSB7CiAgICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5pc1JlbGF0ZWRUb09yaWdpbihvcmlnaW4pKSB7Ci0gICAgICAgICAg
ICAgICAgb3BlbkRhdGFiYXNlcy5hZGQoJmNvbm5lY3Rpb24tPmRhdGFiYXNlKCkpOworICAgICAg
ICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGRhdGFiYXNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
aW5kZXggMjhkYTJhNTY2MjUyYTExMThkMmY0Mjg2NGI4MjY3ZjljMjNmM2FmNS4uY2MwYzFiMDMx
YmU3YzAwZThmOTg5N2JjOGMwYzFjYzI0NGYyYTkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCkBAIC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJU
KCZ0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwor
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09
IHRoaXMpOwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpAQCAtMTM0NCw3
ICsxMzQ0LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFi
b3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJUKCZ0cmFuc2FjdGlvbi5k
YXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOworICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCiAgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRl
eCA5YThiMWM1ZDA2MmFiNGJkMWY5M2E4ODU2OWYyNzQ4NmQ1MTkzZGM4Li5mM2I4Nzg4ZmU4Nzcx
NTFmYjhhZDVhOWViMWJkMzBiYjcwYzE1ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAt
NzIsNyArNzIsNyBAQCB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQoY29uc3QgSURCRXJyb3ImLCBjb25z
dCBJREJHZXRSZXN1bHQmKT4gR2V0UmVzdWx0Q2FsbGJhY2s7CiB0eXBlZGVmIEZ1bmN0aW9uPHZv
aWQoY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmKT4gR2V0QWxsUmVzdWx0
c0NhbGxiYWNrOwogdHlwZWRlZiBGdW5jdGlvbjx2b2lkKGNvbnN0IElEQkVycm9yJiwgdWludDY0
X3QpPiBDb3VudENhbGxiYWNrOwogCi1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZSB7CitjbGFzcyBV
bmlxdWVJREJEYXRhYmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxVbmlxdWVJREJEYXRhYmFz
ZT4gewogcHVibGljOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKElEQlNlcnZlciYsIGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYpOwogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRh
dGFiYXNlJikgPSBkZWxldGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24uY3BwCmluZGV4IDg0MDE1ZDg2YzRjYTQ4ZjAxYmRkOTVhYzRjNDRmNjM0NjhjMGFhMGEuLjEz
ZjAyMGNiMTE0MDI4YjZiMmFhYTRlYzFmNWNiMTBkYzA2ZDI5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCkBAIC00NCwxNyArNDQsMTggQEAgUmVmPFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
cmVhdGUoVW5pcXVlSURCRGEKIH0KIAogVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24oVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBTZXJ2
ZXJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAg
ICA6IG1fZGF0YWJhc2UobWFrZVdlYWtQdHIoZGF0YWJhc2UpKQogICAgICwgbV9jb25uZWN0aW9u
VG9DbGllbnQocmVxdWVzdC5jb25uZWN0aW9uKCkpCiAgICAgLCBtX29wZW5SZXF1ZXN0SWRlbnRp
ZmllcihyZXF1ZXN0LnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZpZXIoKSkKIHsKLSAgICBt
X2RhdGFiYXNlLnNlcnZlcigpLnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7
CiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRo
aXMpOwogfQogCiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246On5VbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24oKQogewotICAgIG1fZGF0YWJhc2Uuc2VydmVyKCkudW5yZWdpc3RlckRhdGFi
YXNlQ29ubmVjdGlvbigqdGhpcyk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0
YWJhc2UtPnNlcnZlcigpLnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMpOwogICAg
IG1fY29ubmVjdGlvblRvQ2xpZW50LnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMp
OwogfQogCkBAIC03MCwxMCArNzEsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b246OmFib3J0VHJhbnNhY3Rpb25XaXRob3V0Q2FsbGJhY2soVW5pcXVlSURCRGF0YWIKICAgICBj
b25zdCBhdXRvJiB0cmFuc2FjdGlvbklkZW50aWZpZXIgPSB0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpOwogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24+IHByb3Rl
Y3RlZFRoaXModGhpcyk7CiAKLSAgICBtX2RhdGFiYXNlLmFib3J0VHJhbnNhY3Rpb24odHJhbnNh
Y3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZpZXJdKGNvbnN0
IElEQkVycm9yJikgewotICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1hcC5jb250YWlucyh0
cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbk1hcC5yZW1vdmUo
dHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICB9KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7
CisgICAgaWYgKG1fZGF0YWJhc2UpIHsKKyAgICAgICAgbV9kYXRhYmFzZS0+YWJvcnRUcmFuc2Fj
dGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRp
Zmllcl0oY29uc3QgSURCRXJyb3ImKSB7CisgICAgICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlv
bk1hcC5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKKyAgICAgICAgICAgIG1fdHJh
bnNhY3Rpb25NYXAucmVtb3ZlKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgICAgIH0pOwor
ICAgIH0KIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmNvbm5lY3Rpb25Q
ZW5kaW5nQ2xvc2VGcm9tQ2xpZW50KCkKQEAgLTg3LDI4ICs5MSwzNiBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoKQogewogICAg
IExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmNvbm5lY3Rpb25D
bG9zZWRGcm9tQ2xpZW50IC0gJXMgLSAlIiBQUkl1NjQsIG1fb3BlblJlcXVlc3RJZGVudGlmaWVy
LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVyKCkpOwogCi0gICAgbV9k
YXRhYmFzZS5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhpcyk7CisgICAgQVNTRVJUKG1f
ZGF0YWJhc2UpOworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5jb25u
ZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhpcyk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCkKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9t
U2VydmVyIC0gJXMgLSAlIiBQUkl1NjQsIG1fb3BlblJlcXVlc3RJZGVudGlmaWVyLmxvZ2dpbmdT
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVyKCkpOwogCi0gICAgbV9kYXRhYmFzZS5j
b25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCp0aGlzKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7
CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2UtPmNvbmZpcm1EaWRDbG9z
ZUZyb21TZXJ2ZXIoKnRoaXMpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRh
YmFzZUNvbm5lY3Rpb246OmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQgLSAlcyAtICUiIFBSSXU2
NCwgbV9vcGVuUmVxdWVzdElkZW50aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCks
IGlkZW50aWZpZXIoKSk7CiAKLSAgICBtX2RhdGFiYXNlLmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZl
bnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7Cisg
ICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2UtPmRpZEZpcmVWZXJzaW9uQ2hh
bmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBVbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5nZShjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRGaW5pc2hIYW5kbGlu
Z1ZlcnNpb25DaGFuZ2UgLSAlcyAtICUiIFBSSXU2NCwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLmxv
Z2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVyKCkpOwogCi0gICAgbV9kYXRh
YmFzZS5kaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoKnRoaXMsIHRyYW5zYWN0aW9uSWRl
bnRpZmllcik7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmIChtX2RhdGFiYXNlKQor
ICAgICAgICBtX2RhdGFiYXNlLT5kaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoKnRoaXMs
IHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VDb25u
ZWN0aW9uOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pCkBAIC0xMjIs
NyArMTM0LDcgQEAgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgVW5pcXVlSURCRGF0YWJh
c2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hhbmdlVHIKICAgICBMT0coSW5kZXhlZERCLCAi
VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24gLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50aWZpZXIubG9nZ2luZ1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAgICAgQVNTRVJUKCFtX2Nsb3NlUGVu
ZGluZyk7CiAKLSAgICBJREJUcmFuc2FjdGlvbkluZm8gaW5mbyA9IElEQlRyYW5zYWN0aW9uSW5m
bzo6dmVyc2lvbkNoYW5nZShtX2Nvbm5lY3Rpb25Ub0NsaWVudCwgbV9kYXRhYmFzZS5pbmZvKCks
IG5ld1ZlcnNpb24pOworICAgIElEQlRyYW5zYWN0aW9uSW5mbyBpbmZvID0gSURCVHJhbnNhY3Rp
b25JbmZvOjp2ZXJzaW9uQ2hhbmdlKG1fY29ubmVjdGlvblRvQ2xpZW50LCBtX2RhdGFiYXNlLT5p
bmZvKCksIG5ld1ZlcnNpb24pOwogCiAgICAgUmVmPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0
aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNldCh0cmFuc2FjdGlvbi0+aW5mbygp
LmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKQEAgLTE0Miw3ICsxNTQsOSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZXN0YWJsaXNoVHJhbnNhY3Rpb24oY29u
c3QgSURCVHJhbnNhY3Rpb25JbmZvJgogCiAgICAgUmVmPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRl
KCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNldCh0cmFuc2FjdGlvbi0+aW5m
bygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2RhdGFiYXNlLmVu
cXVldWVUcmFuc2FjdGlvbihXVEZNb3ZlKHRyYW5zYWN0aW9uKSk7CisKKyAgICBBU1NFUlQobV9k
YXRhYmFzZSk7CisgICAgbV9kYXRhYmFzZS0+ZW5xdWV1ZVRyYW5zYWN0aW9uKFdURk1vdmUodHJh
bnNhY3Rpb24pKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEFi
b3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IGNvbnN0IElEQkVycm9yJiBlcnJvcikKQEAgLTE1Miw3ICsxNjYsOCBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkQWJvcnRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aQogICAgIGF1dG8gdHJhbnNhY3Rpb25JZGVudGlmaWVyID0gdHJhbnNhY3Rpb24u
aW5mbygpLmlkZW50aWZpZXIoKTsKICAgICBhdXRvIHRha2VuVHJhbnNhY3Rpb24gPSBtX3RyYW5z
YWN0aW9uTWFwLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKIAotICAgIEFTU0VSVCh0YWtl
blRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UuaGFyZENsb3NlZEZvclVzZXJEZWxldGUoKSk7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFTU0VSVCh0YWtlblRyYW5zYWN0aW9uIHx8IG1f
ZGF0YWJhc2UtPmhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkpOwogICAgIGlmICh0YWtlblRyYW5z
YWN0aW9uKQogICAgICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudC5kaWRBYm9ydFRyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4IDJmMWEyOWEyZTg4ZTUyNTg5ZTU4MWNhOTIxZjY5OTQ1
YmMyMzkzOTMuLjNhMjU2NGExMjliYTlmNmEzMjdhZjkzMmY2YmJiZjJlODYzM2E2ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgflVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbigpOwogCiAgICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiBvcGVuUmVxdWVzdElkZW50aWZpZXIoKSB7IHJldHVybiBtX29wZW5SZXF1ZXN0SWRlbnRpZmll
cjsgfQotICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJh
c2U7IH0KKyAgICBVbmlxdWVJREJEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFi
YXNlLmdldCgpOyB9CiAgICAgSURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25uZWN0aW9uVG9DbGll
bnQoKSB7IHJldHVybiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsgfQogCiAgICAgdm9pZCBjb25uZWN0
aW9uUGVuZGluZ0Nsb3NlRnJvbUNsaWVudCgpOwpAQCAtODYsNyArODcsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZSYsIFNlcnZlck9wZW5EQlJlcXVlc3QmKTsKIAotICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBtX2Rh
dGFiYXNlOworICAgIFdlYWtQdHI8VW5pcXVlSURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAgICAg
SURCQ29ubmVjdGlvblRvQ2xpZW50JiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsKICAgICBJREJSZXNv
dXJjZUlkZW50aWZpZXIgbV9vcGVuUmVxdWVzdElkZW50aWZpZXI7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCAyMTRmOGMyMzhhMTI2MjliNzU2
YTUxZGFhMDZhYmM4MGQ3N2JhZDQ2Li43ZmZmMWVmYTRjNDQ4ZGU0ZmNlY2EzNDMyMWVjYTA5ZGJi
ZjkyZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3Bw
CkBAIC00NywxNiArNDcsMjIgQEAgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZUNvbm4KICAgICA6IG1fZGF0
YWJhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAgICAgLCBtX3RyYW5zYWN0aW9uSW5mbyhpbmZv
KQogeworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2Uo
KTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCiAgICAgaWYgKG1fdHJhbnNhY3Rpb25JbmZvLm1v
ZGUoKSA9PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFuZ2UpCi0gICAgICAgIG1fb3Jp
Z2luYWxEYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9k
YXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaW5mbygpKTsKKyAgICAgICAgbV9vcmlnaW5h
bERhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihkYXRhYmFz
ZS0+aW5mbygpKTsKIAotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
cigpLnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworICAgIGRhdGFiYXNlLT5zZXJ2ZXIoKS5y
ZWdpc3RlclRyYW5zYWN0aW9uKCp0aGlzKTsKIH0KIAogVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6flVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24oKQogewotICAgIG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpLnRyYW5zYWN0aW9uRGVzdHJveWVkKCp0aGlzKTsKLSAgICBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXIoKS51bnJlZ2lzdGVyVHJhbnNh
Y3Rpb24oKnRoaXMpOworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+
ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAgZGF0YWJhc2UtPnRyYW5z
YWN0aW9uRGVzdHJveWVkKCp0aGlzKTsKKyAgICBkYXRhYmFzZS0+c2VydmVyKCkudW5yZWdpc3Rl
clRyYW5zYWN0aW9uKCp0aGlzKTsKIH0KIAogSURCRGF0YWJhc2VJbmZvKiBVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpvcmlnaW5hbERhdGFiYXNlSW5mbygpIGNvbnN0CkBAIC03MCw3ICs3
NiwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0KCkKICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQiKTsKIAog
ICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmFib3J0VHJhbnNhY3Rp
b24oKnRoaXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsK
KyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0
aW9uKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpc10oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7
CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjph
Ym9ydCAoY2FsbGJhY2spIik7CiAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kaWRBYm9y
dFRyYW5zYWN0aW9uKCp0aGlzLCBlcnJvcik7CiAgICAgfSk7CkBAIC05OCw3ICsxMDgsMTEgQEAg
dm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQoKQogICAgIExPRyhJbmRl
eGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQiKTsKIAogICAgIFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmNvbW1pdFRyYW5zYWN0aW9uKCp0
aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpc10oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CisKKyAg
ICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAg
QVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5jb21taXRUcmFuc2FjdGlvbigqdGhp
cywgW3RoaXMsIHByb3RlY3RlZFRoaXNdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y29tbWl0IChj
YWxsYmFjaykiKTsKICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZENvbW1pdFRyYW5z
YWN0aW9uKCp0aGlzLCBlcnJvcik7CiAgICAgfSk7CkBAIC0xMTIsNyArMTI2LDExIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZp
ZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQ
dHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5jcmVhdGVPYmplY3RTdG9yZSgqdGhp
cywgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJv
ciYgZXJyb3IpIHsKKworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+
ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAgZGF0YWJhc2UtPmNyZWF0
ZU9iamVjdFN0b3JlKCp0aGlzLCBpbmZvLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERh
dGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5p
cXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUgKGNhbGxiYWNrKSIp
OwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGlkQ3JlYXRlT2JqZWN0U3RvcmUoSURCUmVzdWx0RGF0YTo6Y3JlYXRlT2JqZWN0
U3RvcmVTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpKTsKQEAgLTEyOSw3
ICsxNDcsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmRlbGV0
ZU9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZU5hbWUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
LCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CisgICAgCisgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChk
YXRhYmFzZSk7CisKKyAgICBkYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVj
dFN0b3JlTmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJF
cnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlIChjYWxsYmFjaykiKTsKICAgICAgICAgaWYg
KGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZERl
bGV0ZU9iamVjdFN0b3JlKElEQlJlc3VsdERhdGE6OmRlbGV0ZU9iamVjdFN0b3JlU3VjY2Vzcyhy
ZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7CkBAIC0xNDYsNyArMTY4LDExIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3Qg
SURCUmVxdWVzdERhdGEmIHJlcXVlCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50
aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBS
ZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
LSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5yZW5hbWVPYmplY3RTdG9yZSgq
dGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBbdGhpcywgcHJvdGVjdGVkVGhp
cywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworCisgICAgYXV0byBkYXRh
YmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRh
YmFzZSk7CisKKyAgICBkYXRhYmFzZS0+cmVuYW1lT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRh
XShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZU9iamVjdFN0b3JlIChjYWxsYmFjaykiKTsK
ICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRpZFJlbmFtZU9iamVjdFN0b3JlKElEQlJlc3VsdERhdGE6OnJlbmFtZU9iamVjdFN0
b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7CkBAIC0xNjIsNyAr
MTg4LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RT
dG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIo
KSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5jbGVhck9i
amVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CisKKyAgICBhdXRvIGRh
dGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRh
dGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5jbGVhck9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RT
dG9yZUlkZW50aWZpZXIsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3Qg
SURCRXJyb3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlIChjYWxsYmFjaykiKTsKICAgICAgICAg
aWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRp
ZENsZWFyT2JqZWN0U3RvcmUoSURCUmVzdWx0RGF0YTo6Y2xlYXJPYmplY3RTdG9yZVN1Y2Nlc3Mo
cmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSkpOwpAQCAtMTc5LDcgKzIwOSwxMSBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YQogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVu
dGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwogCiAgICAg
UmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7
Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuY3JlYXRlSW5kZXgoKnRoaXMs
IGluZm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3Im
IGVycm9yKSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisKKyAgICBkYXRhYmFzZS0+Y3Jl
YXRlSW5kZXgoKnRoaXMsIGluZm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0o
Y29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleCAoY2FsbGJhY2spIik7CiAgICAgICAg
IGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
aWRDcmVhdGVJbmRleChJREJSZXN1bHREYXRhOjpjcmVhdGVJbmRleFN1Y2Nlc3MocmVxdWVzdERh
dGEucmVxdWVzdElkZW50aWZpZXIoKSkpOwpAQCAtMTk2LDcgKzIzMCwxMSBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXN0RGF0YQogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkg
PT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9k
YXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuZGVsZXRlSW5kZXgoKnRoaXMsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERh
dGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0
YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAg
CisgICAgZGF0YWJhc2UtPmRlbGV0ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGluZGV4TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJF
cnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKGVycm9y
LmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZERlbGV0ZUlu
ZGV4KElEQlJlc3VsdERhdGE6OmRlbGV0ZUluZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0
SWRlbnRpZmllcigpKSk7CkBAIC0yMTMsNyArMjUxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbjo6cmVuYW1lSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKS5yZW5hbWVJbmRleCgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1
ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CisgICAgCisgICAgYXV0byBkYXRhYmFz
ZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFz
ZSk7CisgICAgCisgICAgZGF0YWJhc2UtPnJlbmFtZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4IChjYWxsYmFj
aykiKTsKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFz
ZUNvbm5lY3Rpb24tPmRpZFJlbmFtZUluZGV4KElEQlJlc3VsdERhdGE6OnJlbmFtZUluZGV4U3Vj
Y2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7CkBAIC0yMzEsNyArMjczLDEx
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cHV0T3JBZGQoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZv
LmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAK
ICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5wdXRPckFkZChyZXF1
ZXN0RGF0YSwga2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRh
JiBrZXkpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+
cHV0T3JBZGQocmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBbdGhp
cywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29u
c3QgSURCS2V5RGF0YSYga2V5KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYg
KGVycm9yLmlzTnVsbCgpKQpAQCAtMjQ4LDcgKzI5NCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKS5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERhdGEs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
LCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2Ug
PSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2Up
OworICAgIAorICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdldFJlY29yZERh
dGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVy
cm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERC
LCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkIChjYWxsYmFjaykiKTsK
IAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCkBAIC0yNjUsNyArMzE1LDExIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1
ZXN0RGF0YSYgcmVxdWVzdERhCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZp
ZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQ
dHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5nZXRBbGxSZWNvcmRzKHJlcXVlc3RE
YXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRh
XShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7
CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFz
ZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPmdldEFsbFJl
Y29yZHMocmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhp
cywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCR2V0QWxsUmVz
dWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMgKGNhbGxiYWNrKSIpOwogCiAgICAgICAgIGlmIChl
cnJvci5pc051bGwoKSkKQEAgLTI4Miw3ICszMzYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGMKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25u
ZWN0aW9uLT5kYXRhYmFzZSgpLmdldENvdW50KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCB1
aW50NjRfdCBjb3VudCkgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIAorICAgIGRh
dGFiYXNlLT5nZXRDb3VudChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgY291
bnQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OmdldENvdW50IChjYWxsYmFjaykiKTsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
CkBAIC0yOTksNyArMzU3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlUmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0CiAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJh
c2UoKS5kZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKyAgICAKKyAg
ICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAg
QVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3JkKHJlcXVl
c3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0o
Y29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQgKGNhbGxiYWNrKSIpOwogCiAgICAg
ICAgIGlmIChlcnJvci5pc051bGwoKSkKQEAgLTMxNiw3ICszNzgsMTEgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0
YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLm9wZW5DdXJzb3IocmVxdWVzdERhdGEsIGluZm8s
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
LCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2Ug
PSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2Up
OworICAgIAorICAgIGRhdGFiYXNlLT5vcGVuQ3Vyc29yKHJlcXVlc3REYXRhLCBpbmZvLCBbdGhp
cywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29u
c3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IgKGNhbGxiYWNrKSIpOwogCiAgICAg
ICAgIGlmIChlcnJvci5pc051bGwoKSkKQEAgLTMzMyw3ICszOTksMTEgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXN0RGEKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0
YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRh
dGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVy
cm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIAorICAgIGF1dG8gZGF0YWJh
c2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJh
c2UpOworICAgIAorICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vyc29yKHJlcXVlc3REYXRhLCBkYXRh
LCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJv
ciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IgKGNhbGxiYWNrKSIp
OwogCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKQEAgLTM0OCw3ICs0MTgsNyBAQCBjb25z
dCBWZWN0b3I8dWludDY0X3Q+JiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvYmplY3RT
dG9yZUlkZW50aWZpZXJzKCkKICAgICBpZiAoIW1fb2JqZWN0U3RvcmVJZGVudGlmaWVycy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBtX29iamVjdFN0b3JlSWRlbnRpZmllcnM7CiAKLSAgICBh
dXRvJiBpbmZvID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaW5mbygpOworICAg
IGF1dG8mIGluZm8gPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS0+aW5mbygpOwog
ICAgIGZvciAoYXV0byBvYmplY3RTdG9yZU5hbWUgOiBpbmZvLm9iamVjdFN0b3JlTmFtZXMoKSkg
ewogICAgICAgICBhdXRvIG9iamVjdFN0b3JlSW5mbyA9IGluZm8uaW5mb0ZvckV4aXN0aW5nT2Jq
ZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKICAgICAgICAgQVNTRVJUKG9iamVjdFN0b3JlSW5m
byk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCUmVzdWx0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCUmVzdWx0RGF0YS5jcHAKaW5kZXggNmM2YWU2YmEwYmU1MTY5YzJlZDkzYTYwOTIwZjY4
Y2FkZjUxMGU2ZS4uN2ZmMDhlZTQ5OGU3NzY2ZDFiZjJhYTZiMTUzYmZmZWI1ZDY3MGFhMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3Vs
dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJSZXN1bHREYXRhLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIElEQlJlc3VsdERhdGEgSURCUmVz
dWx0RGF0YTo6b3BlbkRhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHJlCiAgICAgSURCUmVzdWx0RGF0YSByZXN1bHQgeyByZXF1ZXN0SWRlbnRpZmllciB9OwogICAg
IHJlc3VsdC5tX3R5cGUgPSBJREJSZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VTdWNjZXNzOwogICAg
IHJlc3VsdC5tX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIgPSBjb25uZWN0aW9uLmlkZW50
aWZpZXIoKTsKLSAgICByZXN1bHQubV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4oY29ubmVjdGlvbi5kYXRhYmFzZSgpLmluZm8oKSk7CisgICAgcmVzdWx0
Lm1fZGF0YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KGNvbm5l
Y3Rpb24uZGF0YWJhc2UoKS0+aW5mbygpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0x
MjEsNyArMTIxLDcgQEAgSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpvcGVuRGF0YWJhc2VV
cGdyYWRlTmVlZGVkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmkKICAgICBJREJSZXN1bHREYXRh
IHJlc3VsdCB7IHJlcXVlc3RJZGVudGlmaWVyIH07CiAgICAgcmVzdWx0Lm1fdHlwZSA9IElEQlJl
c3VsdFR5cGU6Ok9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQ7CiAgICAgcmVzdWx0Lm1fZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllciA9IHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmlkZW50aWZpZXIoKTsKLSAgICByZXN1bHQubV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5p
cXVlPElEQkRhdGFiYXNlSW5mbz4odHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuZGF0
YWJhc2UoKS5pbmZvKCkpOworICAgIHJlc3VsdC5tX2RhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91
bmlxdWU8SURCRGF0YWJhc2VJbmZvPih0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5k
YXRhYmFzZSgpLT5pbmZvKCkpOwogICAgIHJlc3VsdC5tX3RyYW5zYWN0aW9uSW5mbyA9IHN0ZDo6
bWFrZV91bmlxdWU8SURCVHJhbnNhY3Rpb25JbmZvPih0cmFuc2FjdGlvbi5pbmZvKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346932</attachid>
            <date>2018-08-10 15:00:06 -0700</date>
            <delta_ts>2018-08-10 16:46:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188474-20180810150005.patch</filename>
            <type>text/plain</type>
            <size>30945</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk0YTA1NjBmYmVkODc2
ZGI5OWIzYzI0NjdjMmZlYWMyN2U4YmEyNC4uYWU3YTZmMTdmM2I0NGIyZmVjNDdhZjhjZDI4N2Fl
YWRiNzY4NjI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE4LTA4LTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyYXNoVHJhY2VyOiBjb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2UgYXQgV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg4NDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uIGlzIHJlZmNvdW50
ZWQgYnkgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiBhbmQgaXQgcmVmY291bnRzCisgICAg
ICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uIFRoaXMgY3ljbGUgY291bGQgbWFrZSBV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24gb3V0bGl2ZXMKKyAgICAgICAgVW5pcXVlSURCRGF0
YWJhc2UsIHNvIGl0cyByZWZlcmVuY2UgdG8gVW5pcXVlSURCRGF0YWJhc2UgbWF5IGJlIHN0YWxl
LiBDYWxsaW5nIGEgZnVuY3Rpb24KKyAgICAgICAgb24gYSBzdGFsZSBvYmplY3QgaXMgcHJvYmFi
bHkgdGhlIHJlYXNvbiBvZiByZWNlbnQgdmFyaW91cyBzdG9yYWdlIHByb2Nlc3MgY3Jhc2hlcyBp
bgorICAgICAgICBpbmRleGVkREIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtX2RhdGFi
YXNlIGEgV2Vha1B0ciBhbmQgYWRkcyBhc3NlcnRpb25zIHRoYXQgY291bGQgaGVscCB1cyBkZWJ1
ZyB0aGUKKyAgICAgICAgY3Jhc2hlcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmln
aW5zKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6VW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uOjp+VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjphYm9y
dFRyYW5zYWN0aW9uV2l0aG91dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbjo6ZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmVzdGFibGlzaFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRBYm9ydFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246On5VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlSWRlbnRpZmllcnMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXN1bHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6
Om9wZW5EYXRhYmFzZVN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0RGF0YTo6
b3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZCk6CisKIDIwMTgtMDgtMDkgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgbWVtb3J5Rm9vdHByaW50IHNob3VsZCByZXR1
cm4gc2l6ZV90IG5vdCBvcHRpb25hbDxzaXplX3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IDFiOTk0NTIyMmMw
ZDgxNDdiNzgzNDVjYjUwMmI4Yzg5YmUzNzJlNjMuLjA1OWFlYjU1MWUwY2RlYmQzMjUyNmRmZmFh
ODI0MzM1YTliMjFlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBJREJT
ZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSBtb2Rp
ZmljYXRpb25UaW1lLAogCiAgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG9wZW5EYXRh
YmFzZXM7CiAgICAgZm9yIChhdXRvKiBjb25uZWN0aW9uIDogbV9kYXRhYmFzZUNvbm5lY3Rpb25z
LnZhbHVlcygpKQotICAgICAgICBvcGVuRGF0YWJhc2VzLmFkZCgmY29ubmVjdGlvbi0+ZGF0YWJh
c2UoKSk7CisgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkp
OwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG9wZW5EYXRhYmFzZXMpCiAgICAgICAgIGRh
dGFiYXNlLT5pbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKTsKQEAgLTUyNiwxMCArNTI2LDEz
IEBAIHZvaWQgSURCU2VydmVyOjpjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29u
c3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0CiAKICAgICBIYXNoU2V0PFVuaXF1ZUlEQkRhdGFi
YXNlKj4gb3BlbkRhdGFiYXNlczsKICAgICBmb3IgKGF1dG8qIGNvbm5lY3Rpb24gOiBtX2RhdGFi
YXNlQ29ubmVjdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmll
ciA9IGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaWRlbnRpZmllcigpOworICAgICAgICBhdXRvIGRh
dGFiYXNlID0gY29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICAgICAgQVNTRVJUKGRhdGFiYXNl
KTsKKworICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gZGF0YWJhc2UtPmlkZW50aWZp
ZXIoKTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKSB7CiAgICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5pc1JlbGF0ZWRUb09yaWdpbihvcmlnaW4pKSB7Ci0gICAgICAgICAg
ICAgICAgb3BlbkRhdGFiYXNlcy5hZGQoJmNvbm5lY3Rpb24tPmRhdGFiYXNlKCkpOworICAgICAg
ICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGRhdGFiYXNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
aW5kZXggMjhkYTJhNTY2MjUyYTExMThkMmY0Mjg2NGI4MjY3ZjljMjNmM2FmNS4uY2MwYzFiMDMx
YmU3YzAwZThmOTg5N2JjOGMwYzFjYzI0NGYyYTkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCkBAIC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJU
KCZ0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwor
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09
IHRoaXMpOwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpAQCAtMTM0NCw3
ICsxMzQ0LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFi
b3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJUKCZ0cmFuc2FjdGlvbi5k
YXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOworICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCiAgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRl
eCA5YThiMWM1ZDA2MmFiNGJkMWY5M2E4ODU2OWYyNzQ4NmQ1MTkzZGM4Li5mM2I4Nzg4ZmU4Nzcx
NTFmYjhhZDVhOWViMWJkMzBiYjcwYzE1ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAt
NzIsNyArNzIsNyBAQCB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQoY29uc3QgSURCRXJyb3ImLCBjb25z
dCBJREJHZXRSZXN1bHQmKT4gR2V0UmVzdWx0Q2FsbGJhY2s7CiB0eXBlZGVmIEZ1bmN0aW9uPHZv
aWQoY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmKT4gR2V0QWxsUmVzdWx0
c0NhbGxiYWNrOwogdHlwZWRlZiBGdW5jdGlvbjx2b2lkKGNvbnN0IElEQkVycm9yJiwgdWludDY0
X3QpPiBDb3VudENhbGxiYWNrOwogCi1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZSB7CitjbGFzcyBV
bmlxdWVJREJEYXRhYmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxVbmlxdWVJREJEYXRhYmFz
ZT4gewogcHVibGljOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKElEQlNlcnZlciYsIGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYpOwogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRh
dGFiYXNlJikgPSBkZWxldGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24uY3BwCmluZGV4IDg0MDE1ZDg2YzRjYTQ4ZjAxYmRkOTVhYzRjNDRmNjM0NjhjMGFhMGEuLjJh
NDBmNTI0MGJjMzk0ZDc2ZTVlYTdlYTA2NmM5YzBmYTZiODgzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCkBAIC00NCwxNyArNDQsMTggQEAgUmVmPFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
cmVhdGUoVW5pcXVlSURCRGEKIH0KIAogVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24oVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBTZXJ2
ZXJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAg
ICA6IG1fZGF0YWJhc2UobWFrZVdlYWtQdHIoZGF0YWJhc2UpKQogICAgICwgbV9jb25uZWN0aW9u
VG9DbGllbnQocmVxdWVzdC5jb25uZWN0aW9uKCkpCiAgICAgLCBtX29wZW5SZXF1ZXN0SWRlbnRp
ZmllcihyZXF1ZXN0LnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZpZXIoKSkKIHsKLSAgICBt
X2RhdGFiYXNlLnNlcnZlcigpLnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7
CiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRo
aXMpOwogfQogCiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246On5VbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24oKQogewotICAgIG1fZGF0YWJhc2Uuc2VydmVyKCkudW5yZWdpc3RlckRhdGFi
YXNlQ29ubmVjdGlvbigqdGhpcyk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0
YWJhc2UtPnNlcnZlcigpLnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMpOwogICAg
IG1fY29ubmVjdGlvblRvQ2xpZW50LnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMp
OwogfQogCkBAIC03MCw3ICs3MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayhVbmlxdWVJREJEYXRhYgogICAgIGNv
bnN0IGF1dG8mIHRyYW5zYWN0aW9uSWRlbnRpZmllciA9IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVu
dGlmaWVyKCk7CiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKIAotICAgIG1fZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbih0cmFuc2Fj
dGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3Qg
SURCRXJyb3ImKSB7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmICghbV9kYXRhYmFz
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXJdKGNvbnN0IElEQkVycm9yJikgewogICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1hcC5j
b250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbk1h
cC5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB9KTsKQEAgLTg3LDI4ICs5Miwz
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZy
b21DbGllbnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50IC0gJXMgLSAlIiBQUkl1NjQsIG1fb3Bl
blJlcXVlc3RJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlm
aWVyKCkpOwogCi0gICAgbV9kYXRhYmFzZS5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhp
cyk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAg
ICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhpcyk7CiB9CiAKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVy
KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
b25maXJtRGlkQ2xvc2VGcm9tU2VydmVyIC0gJXMgLSAlIiBQUkl1NjQsIG1fb3BlblJlcXVlc3RJ
ZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVyKCkpOwog
Ci0gICAgbV9kYXRhYmFzZS5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCp0aGlzKTsKKyAgICBB
U1NFUlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJh
c2UtPmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoKnRoaXMpOwogfQogCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZl
bnQgLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50aWZpZXIubG9nZ2luZ1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAKLSAgICBtX2RhdGFiYXNlLmRpZEZp
cmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBBU1NF
UlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2Ut
PmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0K
IAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpbmlzaEhhbmRsaW5nVmVy
c2lvbkNoYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
OjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UgLSAlcyAtICUiIFBSSXU2NCwgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVy
KCkpOwogCi0gICAgbV9kYXRhYmFzZS5kaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoKnRo
aXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAg
IGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5kaWRGaW5pc2hIYW5kbGluZ1Zl
cnNpb25DaGFuZ2UoKnRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3Rl
ZFZlcnNpb24pCkBAIC0xMjIsNyArMTM1LDcgQEAgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hhbmdlVHIKICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24gLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50
aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAgICAg
QVNTRVJUKCFtX2Nsb3NlUGVuZGluZyk7CiAKLSAgICBJREJUcmFuc2FjdGlvbkluZm8gaW5mbyA9
IElEQlRyYW5zYWN0aW9uSW5mbzo6dmVyc2lvbkNoYW5nZShtX2Nvbm5lY3Rpb25Ub0NsaWVudCwg
bV9kYXRhYmFzZS5pbmZvKCksIG5ld1ZlcnNpb24pOworICAgIElEQlRyYW5zYWN0aW9uSW5mbyBp
bmZvID0gSURCVHJhbnNhY3Rpb25JbmZvOjp2ZXJzaW9uQ2hhbmdlKG1fY29ubmVjdGlvblRvQ2xp
ZW50LCBtX2RhdGFiYXNlLT5pbmZvKCksIG5ld1ZlcnNpb24pOwogCiAgICAgUmVmPFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNldCh0
cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKQEAg
LTE0Miw3ICsxNTUsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZXN0YWJs
aXNoVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJgogCiAgICAgUmVmPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNl
dCh0cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBtX2RhdGFiYXNlLmVucXVldWVUcmFuc2FjdGlvbihXVEZNb3ZlKHRyYW5zYWN0aW9uKSk7
CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgbV9kYXRhYmFzZS0+ZW5xdWV1ZVRyYW5z
YWN0aW9uKFdURk1vdmUodHJhbnNhY3Rpb24pKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb246OmRpZEFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKQEAgLTE1Miw3ICsxNjcs
OCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkQWJvcnRUcmFuc2FjdGlv
bihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aQogICAgIGF1dG8gdHJhbnNhY3Rpb25JZGVudGlm
aWVyID0gdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKTsKICAgICBhdXRvIHRha2VuVHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uTWFwLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsK
IAotICAgIEFTU0VSVCh0YWtlblRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UuaGFyZENsb3NlZEZv
clVzZXJEZWxldGUoKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFTU0VSVCh0YWtl
blRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UtPmhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkpOwog
ICAgIGlmICh0YWtlblRyYW5zYWN0aW9uKQogICAgICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudC5k
aWRBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4IDJmMWEyOWEyZTg4ZTUy
NTg5ZTU4MWNhOTIxZjY5OTQ1YmMyMzkzOTMuLjNhMjU2NGExMjliYTlmNmEzMjdhZjkzMmY2YmJi
ZjJlODYzM2E2ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTMsNyBAQCBwdWJs
aWM6CiAgICAgflVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbigpOwogCiAgICAgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiBvcGVuUmVxdWVzdElkZW50aWZpZXIoKSB7IHJldHVybiBtX29w
ZW5SZXF1ZXN0SWRlbnRpZmllcjsgfQotICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSgp
IHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KKyAgICBVbmlxdWVJREJEYXRhYmFzZSogZGF0YWJhc2Uo
KSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAgICAgSURCQ29ubmVjdGlvblRvQ2xpZW50
JiBjb25uZWN0aW9uVG9DbGllbnQoKSB7IHJldHVybiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsgfQog
CiAgICAgdm9pZCBjb25uZWN0aW9uUGVuZGluZ0Nsb3NlRnJvbUNsaWVudCgpOwpAQCAtODYsNyAr
ODcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bihVbmlxdWVJREJEYXRhYmFzZSYsIFNlcnZlck9wZW5EQlJlcXVlc3QmKTsKIAotICAgIFVuaXF1
ZUlEQkRhdGFiYXNlJiBtX2RhdGFiYXNlOworICAgIFdlYWtQdHI8VW5pcXVlSURCRGF0YWJhc2U+
IG1fZGF0YWJhc2U7CiAgICAgSURCQ29ubmVjdGlvblRvQ2xpZW50JiBtX2Nvbm5lY3Rpb25Ub0Ns
aWVudDsKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9vcGVuUmVxdWVzdElkZW50aWZpZXI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCAy
MTRmOGMyMzhhMTI2MjliNzU2YTUxZGFhMDZhYmM4MGQ3N2JhZDQ2Li5mNDdjM2IzOTU5ZDRlZTI4
YjAzZmIxYTc2NmJkMDZiMmNlNmI1Y2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24uY3BwCkBAIC00NywxNiArNDcsMjMgQEAgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZUNvbm4KICAgICA6IG1fZGF0YWJhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAgICAgLCBtX3Ry
YW5zYWN0aW9uSW5mbyhpbmZvKQogeworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCiAgICAgaWYgKG1f
dHJhbnNhY3Rpb25JbmZvLm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFu
Z2UpCi0gICAgICAgIG1fb3JpZ2luYWxEYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4obV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaW5mbygpKTsK
KyAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0
YWJhc2VJbmZvPihkYXRhYmFzZS0+aW5mbygpKTsKIAotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpLnNlcnZlcigpLnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworICAgIGRh
dGFiYXNlLT5zZXJ2ZXIoKS5yZWdpc3RlclRyYW5zYWN0aW9uKCp0aGlzKTsKIH0KIAogVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6flVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24oKQog
ewotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnRyYW5zYWN0aW9uRGVzdHJv
eWVkKCp0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXIo
KS51bnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2Rh
dGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb25EZXN0cm95ZWQoKnRoaXMpOwor
ICAgIGRhdGFiYXNlLT5zZXJ2ZXIoKS51bnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOwogfQog
CiBJREJEYXRhYmFzZUluZm8qIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9yaWdpbmFs
RGF0YWJhc2VJbmZvKCkgY29uc3QKQEAgLTcwLDcgKzc3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQoKQogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCIpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCkuYWJvcnRUcmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHByb3RlY3Rl
ZFRoaXNdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2Ug
PSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2Up
OworCisgICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0IChjYWxsYmFjaykiKTsKICAgICAg
ICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZEFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIGVycm9y
KTsKICAgICB9KTsKQEAgLTk4LDcgKzEwOSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmNvbW1pdCgpCiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmNvbW1pdCIpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCkuY29tbWl0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
XShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAg
ZGF0YWJhc2UtPmNvbW1pdFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpc10o
Y29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQgKGNhbGxiYWNrKSIpOwogICAgICAgICBtX2Rh
dGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24oKnRoaXMsIGVycm9yKTsKICAg
ICB9KTsKQEAgLTExMiw3ICsxMjcsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpLmNyZWF0ZU9iamVjdFN0b3JlKCp0aGlzLCBpbmZvLCBbdGhpcywgcHJvdGVjdGVk
VGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworCisgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChk
YXRhYmFzZSk7CisKKyAgICBkYXRhYmFzZS0+Y3JlYXRlT2JqZWN0U3RvcmUoKnRoaXMsIGluZm8s
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpjcmVhdGVPYmplY3RTdG9yZSAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmIChlcnJvci5pc051
bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kaWRDcmVhdGVPYmplY3RT
dG9yZShJREJSZXN1bHREYXRhOjpjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MocmVxdWVzdERhdGEu
cmVxdWVzdElkZW50aWZpZXIoKSkpOwpAQCAtMTI5LDcgKzE0OCwxMSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZQogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0g
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuZGVsZXRlT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVj
dFN0b3JlTmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJF
cnJvciYgZXJyb3IpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNl
LT5kZWxldGVPYmplY3RTdG9yZSgqdGhpcywgb2JqZWN0U3RvcmVOYW1lLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0
U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAg
ICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRlT2JqZWN0U3RvcmUoSURCUmVzdWx0
RGF0YTo6ZGVsZXRlT2JqZWN0U3RvcmVTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlm
aWVyKCkpKTsKQEAgLTE0Niw3ICsxNjksMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpLnJlbmFtZU9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIG5ld05hbWUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURC
RXJyb3ImIGVycm9yKSB7CisKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rp
b24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5y
ZW5hbWVPYmplY3RTdG9yZSgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cmVuYW1lT2JqZWN0U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxs
KCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkUmVuYW1lT2JqZWN0U3Rv
cmUoSURCUmVzdWx0RGF0YTo6cmVuYW1lT2JqZWN0U3RvcmVTdWNjZXNzKHJlcXVlc3REYXRhLnJl
cXVlc3RJZGVudGlmaWVyKCkpKTsKQEAgLTE2Miw3ICsxODksMTEgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXMKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJh
c2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmNsZWFyT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IpIHsKKworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVj
dGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAgZGF0YWJhc2Ut
PmNsZWFyT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAg
ICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNsZWFyT2Jq
ZWN0U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAg
ICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ2xlYXJPYmplY3RTdG9yZShJREJSZXN1
bHREYXRhOjpjbGVhck9iamVjdFN0b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRp
ZmllcigpKSk7CkBAIC0xNzksNyArMjEwLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAg
ICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlv
bi0+ZGF0YWJhc2UoKS5jcmVhdGVJbmRleCgqdGhpcywgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKyAgICAKKyAgICBhdXRv
IGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJU
KGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5jcmVhdGVJbmRleCgqdGhpcywgaW5mbywgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNy
ZWF0ZUluZGV4IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAg
ICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZENyZWF0ZUluZGV4KElEQlJlc3VsdERh
dGE6OmNyZWF0ZUluZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7
CkBAIC0xOTYsNyArMjMxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJh
c2UoKS5kZWxldGVJbmRleCgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
KSB7CisKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+ZGVsZXRlSW5k
ZXgoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRlSW5kZXgoSURCUmVzdWx0RGF0YTo6ZGVsZXRl
SW5kZXhTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpKTsKQEAgLTIxMyw3
ICsyNTIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5hbWVJbmRl
eChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnJlbmFt
ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3
TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYg
ZXJyb3IpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+
cmVuYW1lSW5kZXgoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVy
LCBuZXdOYW1lLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVy
cm9yJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6cmVuYW1lSW5kZXggKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkUmVuYW1lSW5k
ZXgoSURCUmVzdWx0RGF0YTo6cmVuYW1lSW5kZXhTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJ
ZGVudGlmaWVyKCkpKTsKQEAgLTIzMSw3ICsyNzQsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGMKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25u
ZWN0aW9uLT5kYXRhYmFzZSgpLnB1dE9yQWRkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwg
b3ZlcndyaXRlTW9kZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtleSkgeworICAgIAorICAgIGF1dG8g
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQo
ZGF0YWJhc2UpOworICAgIAorICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5
RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0
RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAg
ICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9y
QWRkIChjYWxsYmFjaykiKTsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCkBAIC0yNDgs
NyArMjk1LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3Jk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmdldFJl
Y29yZChyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJl
cXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPmdl
dFJlY29yZChyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpnZXRSZWNvcmQgKGNhbGxiYWNrKSIpOwogCiAgICAgICAgIGlmIChlcnJvci5pc051
bGwoKSkKQEAgLTI2NSw3ICszMTYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpLmdldEFsbFJlY29yZHMocmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwg
Y29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNl
ID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNl
KTsKKyAgICAKKyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcyhyZXF1ZXN0RGF0YSwgZ2V0QWxs
UmVjb3Jkc0RhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURC
RXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jk
cyAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpAQCAtMjgyLDcg
KzMzNywxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVy
KCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3Rl
ZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuZ2V0Q291
bnQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVl
c3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgCisg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAg
IEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPmdldENvdW50KHJlcXVlc3RE
YXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29u
c3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQgKGNhbGxiYWNrKSIp
OwogCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKQEAgLTI5OSw3ICszNTgsMTEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXQKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRp
ZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmRlbGV0ZVJlY29yZChyZXF1ZXN0
RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNv
bnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIAor
ICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRl
bGV0ZVJlY29yZCAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpA
QCAtMzE2LDcgKzM3OSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9w
ZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25J
ZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCkub3BlbkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJl
cXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPm9w
ZW5DdXJzb3IocmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0
RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
b3BlbkN1cnNvciAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpA
QCAtMzMzLDcgKzQwMCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25J
ZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCkuaXRlcmF0ZUN1cnNvcihyZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2Ut
Pml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBy
ZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJl
c3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlz
TnVsbCgpKQpAQCAtMzQ4LDcgKzQxOSw3IEBAIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlSWRlbnRpZmllcnMoKQogICAgIGlm
ICghbV9vYmplY3RTdG9yZUlkZW50aWZpZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJZGVudGlmaWVyczsKIAotICAgIGF1dG8mIGluZm8gPSBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKS5pbmZvKCk7CisgICAgYXV0byYgaW5mbyA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpLT5pbmZvKCk7CiAgICAgZm9yIChhdXRvIG9iamVjdFN0b3Jl
TmFtZSA6IGluZm8ub2JqZWN0U3RvcmVOYW1lcygpKSB7CiAgICAgICAgIGF1dG8gb2JqZWN0U3Rv
cmVJbmZvID0gaW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUp
OwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcAppbmRl
eCA2YzZhZTZiYTBiZTUxNjljMmVkOTNhNjA5MjBmNjhjYWRmNTEwZTZlLi43ZmYwOGVlNDk4ZTc3
NjZkMWJmMmFhNmIxNTNiZmZlYjVkNjcwYWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwCkBAIC0xMTEs
NyArMTExLDcgQEAgSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpvcGVuRGF0YWJhc2VTdWNj
ZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmUKICAgICBJREJSZXN1bHREYXRhIHJl
c3VsdCB7IHJlcXVlc3RJZGVudGlmaWVyIH07CiAgICAgcmVzdWx0Lm1fdHlwZSA9IElEQlJlc3Vs
dFR5cGU6Ok9wZW5EYXRhYmFzZVN1Y2Nlc3M7CiAgICAgcmVzdWx0Lm1fZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllciA9IGNvbm5lY3Rpb24uaWRlbnRpZmllcigpOwotICAgIHJlc3VsdC5tX2Rh
dGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihjb25uZWN0aW9u
LmRhdGFiYXNlKCkuaW5mbygpKTsKKyAgICByZXN1bHQubV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1h
a2VfdW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oY29ubmVjdGlvbi5kYXRhYmFzZSgpLT5pbmZvKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBJREJSZXN1bHRE
YXRhIElEQlJlc3VsdERhdGE6Om9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaQogICAgIElEQlJlc3VsdERhdGEgcmVzdWx0IHsgcmVxdWVzdElkZW50aWZp
ZXIgfTsKICAgICByZXN1bHQubV90eXBlID0gSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlVXBn
cmFkZU5lZWRlZDsKICAgICByZXN1bHQubV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyID0g
dHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuaWRlbnRpZmllcigpOwotICAgIHJlc3Vs
dC5tX2RhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPih0cmFu
c2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpLmluZm8oKSk7CisgICAgcmVz
dWx0Lm1fZGF0YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KHRy
YW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCktPmluZm8oKSk7CiAgICAg
cmVzdWx0Lm1fdHJhbnNhY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJUcmFuc2FjdGlv
bkluZm8+KHRyYW5zYWN0aW9uLmluZm8oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346939</attachid>
            <date>2018-08-10 16:46:02 -0700</date>
            <delta_ts>2018-08-10 16:50:02 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-188474-20180810164601.patch</filename>
            <type>text/plain</type>
            <size>31833</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk0YTA1NjBmYmVkODc2
ZGI5OWIzYzI0NjdjMmZlYWMyN2U4YmEyNC4uYWU3YTZmMTdmM2I0NGIyZmVjNDdhZjhjZDI4N2Fl
YWRiNzY4NjI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE4LTA4LTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyYXNoVHJhY2VyOiBjb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2UgYXQgV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg4NDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uIGlzIHJlZmNvdW50
ZWQgYnkgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiBhbmQgaXQgcmVmY291bnRzCisgICAg
ICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uIFRoaXMgY3ljbGUgY291bGQgbWFrZSBV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24gb3V0bGl2ZXMKKyAgICAgICAgVW5pcXVlSURCRGF0
YWJhc2UsIHNvIGl0cyByZWZlcmVuY2UgdG8gVW5pcXVlSURCRGF0YWJhc2UgbWF5IGJlIHN0YWxl
LiBDYWxsaW5nIGEgZnVuY3Rpb24KKyAgICAgICAgb24gYSBzdGFsZSBvYmplY3QgaXMgcHJvYmFi
bHkgdGhlIHJlYXNvbiBvZiByZWNlbnQgdmFyaW91cyBzdG9yYWdlIHByb2Nlc3MgY3Jhc2hlcyBp
bgorICAgICAgICBpbmRleGVkREIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtX2RhdGFi
YXNlIGEgV2Vha1B0ciBhbmQgYWRkcyBhc3NlcnRpb25zIHRoYXQgY291bGQgaGVscCB1cyBkZWJ1
ZyB0aGUKKyAgICAgICAgY3Jhc2hlcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmln
aW5zKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6VW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uOjp+VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjphYm9y
dFRyYW5zYWN0aW9uV2l0aG91dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbjo6ZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmVzdGFibGlzaFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRBYm9ydFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246On5VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlSWRlbnRpZmllcnMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXN1bHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6
Om9wZW5EYXRhYmFzZVN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0RGF0YTo6
b3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZCk6CisKIDIwMTgtMDgtMDkgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgbWVtb3J5Rm9vdHByaW50IHNob3VsZCByZXR1
cm4gc2l6ZV90IG5vdCBvcHRpb25hbDxzaXplX3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IDFiOTk0NTIyMmMw
ZDgxNDdiNzgzNDVjYjUwMmI4Yzg5YmUzNzJlNjMuLjA1OWFlYjU1MWUwY2RlYmQzMjUyNmRmZmFh
ODI0MzM1YTliMjFlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBJREJT
ZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSBtb2Rp
ZmljYXRpb25UaW1lLAogCiAgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG9wZW5EYXRh
YmFzZXM7CiAgICAgZm9yIChhdXRvKiBjb25uZWN0aW9uIDogbV9kYXRhYmFzZUNvbm5lY3Rpb25z
LnZhbHVlcygpKQotICAgICAgICBvcGVuRGF0YWJhc2VzLmFkZCgmY29ubmVjdGlvbi0+ZGF0YWJh
c2UoKSk7CisgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkp
OwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG9wZW5EYXRhYmFzZXMpCiAgICAgICAgIGRh
dGFiYXNlLT5pbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKTsKQEAgLTUyNiwxMCArNTI2LDEz
IEBAIHZvaWQgSURCU2VydmVyOjpjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29u
c3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0CiAKICAgICBIYXNoU2V0PFVuaXF1ZUlEQkRhdGFi
YXNlKj4gb3BlbkRhdGFiYXNlczsKICAgICBmb3IgKGF1dG8qIGNvbm5lY3Rpb24gOiBtX2RhdGFi
YXNlQ29ubmVjdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmll
ciA9IGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaWRlbnRpZmllcigpOworICAgICAgICBhdXRvIGRh
dGFiYXNlID0gY29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICAgICAgQVNTRVJUKGRhdGFiYXNl
KTsKKworICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gZGF0YWJhc2UtPmlkZW50aWZp
ZXIoKTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKSB7CiAgICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5pc1JlbGF0ZWRUb09yaWdpbihvcmlnaW4pKSB7Ci0gICAgICAgICAg
ICAgICAgb3BlbkRhdGFiYXNlcy5hZGQoJmNvbm5lY3Rpb24tPmRhdGFiYXNlKCkpOworICAgICAg
ICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGRhdGFiYXNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
aW5kZXggMjhkYTJhNTY2MjUyYTExMThkMmY0Mjg2NGI4MjY3ZjljMjNmM2FmNS4uY2MwYzFiMDMx
YmU3YzAwZThmOTg5N2JjOGMwYzFjYzI0NGYyYTkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCkBAIC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJU
KCZ0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwor
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09
IHRoaXMpOwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpAQCAtMTM0NCw3
ICsxMzQ0LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFi
b3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJUKCZ0cmFuc2FjdGlvbi5k
YXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOworICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCiAgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRl
eCA5YThiMWM1ZDA2MmFiNGJkMWY5M2E4ODU2OWYyNzQ4NmQ1MTkzZGM4Li5mM2I4Nzg4ZmU4Nzcx
NTFmYjhhZDVhOWViMWJkMzBiYjcwYzE1ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAt
NzIsNyArNzIsNyBAQCB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQoY29uc3QgSURCRXJyb3ImLCBjb25z
dCBJREJHZXRSZXN1bHQmKT4gR2V0UmVzdWx0Q2FsbGJhY2s7CiB0eXBlZGVmIEZ1bmN0aW9uPHZv
aWQoY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmKT4gR2V0QWxsUmVzdWx0
c0NhbGxiYWNrOwogdHlwZWRlZiBGdW5jdGlvbjx2b2lkKGNvbnN0IElEQkVycm9yJiwgdWludDY0
X3QpPiBDb3VudENhbGxiYWNrOwogCi1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZSB7CitjbGFzcyBV
bmlxdWVJREJEYXRhYmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxVbmlxdWVJREJEYXRhYmFz
ZT4gewogcHVibGljOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKElEQlNlcnZlciYsIGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYpOwogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRh
dGFiYXNlJikgPSBkZWxldGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24uY3BwCmluZGV4IDg0MDE1ZDg2YzRjYTQ4ZjAxYmRkOTVhYzRjNDRmNjM0NjhjMGFhMGEuLjJh
NDBmNTI0MGJjMzk0ZDc2ZTVlYTdlYTA2NmM5YzBmYTZiODgzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCkBAIC00NCwxNyArNDQsMTggQEAgUmVmPFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
cmVhdGUoVW5pcXVlSURCRGEKIH0KIAogVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24oVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBTZXJ2
ZXJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAg
ICA6IG1fZGF0YWJhc2UobWFrZVdlYWtQdHIoZGF0YWJhc2UpKQogICAgICwgbV9jb25uZWN0aW9u
VG9DbGllbnQocmVxdWVzdC5jb25uZWN0aW9uKCkpCiAgICAgLCBtX29wZW5SZXF1ZXN0SWRlbnRp
ZmllcihyZXF1ZXN0LnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZpZXIoKSkKIHsKLSAgICBt
X2RhdGFiYXNlLnNlcnZlcigpLnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7
CiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRo
aXMpOwogfQogCiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246On5VbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24oKQogewotICAgIG1fZGF0YWJhc2Uuc2VydmVyKCkudW5yZWdpc3RlckRhdGFi
YXNlQ29ubmVjdGlvbigqdGhpcyk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0
YWJhc2UtPnNlcnZlcigpLnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMpOwogICAg
IG1fY29ubmVjdGlvblRvQ2xpZW50LnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMp
OwogfQogCkBAIC03MCw3ICs3MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayhVbmlxdWVJREJEYXRhYgogICAgIGNv
bnN0IGF1dG8mIHRyYW5zYWN0aW9uSWRlbnRpZmllciA9IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVu
dGlmaWVyKCk7CiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKIAotICAgIG1fZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbih0cmFuc2Fj
dGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3Qg
SURCRXJyb3ImKSB7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmICghbV9kYXRhYmFz
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXJdKGNvbnN0IElEQkVycm9yJikgewogICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1hcC5j
b250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbk1h
cC5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB9KTsKQEAgLTg3LDI4ICs5Miwz
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZy
b21DbGllbnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50IC0gJXMgLSAlIiBQUkl1NjQsIG1fb3Bl
blJlcXVlc3RJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlm
aWVyKCkpOwogCi0gICAgbV9kYXRhYmFzZS5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhp
cyk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAg
ICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhpcyk7CiB9CiAKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVy
KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
b25maXJtRGlkQ2xvc2VGcm9tU2VydmVyIC0gJXMgLSAlIiBQUkl1NjQsIG1fb3BlblJlcXVlc3RJ
ZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVyKCkpOwog
Ci0gICAgbV9kYXRhYmFzZS5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCp0aGlzKTsKKyAgICBB
U1NFUlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJh
c2UtPmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoKnRoaXMpOwogfQogCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZl
bnQgLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50aWZpZXIubG9nZ2luZ1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAKLSAgICBtX2RhdGFiYXNlLmRpZEZp
cmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBBU1NF
UlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2Ut
PmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0K
IAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpbmlzaEhhbmRsaW5nVmVy
c2lvbkNoYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
OjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UgLSAlcyAtICUiIFBSSXU2NCwgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVy
KCkpOwogCi0gICAgbV9kYXRhYmFzZS5kaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoKnRo
aXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAg
IGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5kaWRGaW5pc2hIYW5kbGluZ1Zl
cnNpb25DaGFuZ2UoKnRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3Rl
ZFZlcnNpb24pCkBAIC0xMjIsNyArMTM1LDcgQEAgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hhbmdlVHIKICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24gLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50
aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAgICAg
QVNTRVJUKCFtX2Nsb3NlUGVuZGluZyk7CiAKLSAgICBJREJUcmFuc2FjdGlvbkluZm8gaW5mbyA9
IElEQlRyYW5zYWN0aW9uSW5mbzo6dmVyc2lvbkNoYW5nZShtX2Nvbm5lY3Rpb25Ub0NsaWVudCwg
bV9kYXRhYmFzZS5pbmZvKCksIG5ld1ZlcnNpb24pOworICAgIElEQlRyYW5zYWN0aW9uSW5mbyBp
bmZvID0gSURCVHJhbnNhY3Rpb25JbmZvOjp2ZXJzaW9uQ2hhbmdlKG1fY29ubmVjdGlvblRvQ2xp
ZW50LCBtX2RhdGFiYXNlLT5pbmZvKCksIG5ld1ZlcnNpb24pOwogCiAgICAgUmVmPFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNldCh0
cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKQEAg
LTE0Miw3ICsxNTUsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZXN0YWJs
aXNoVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJgogCiAgICAgUmVmPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNl
dCh0cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBtX2RhdGFiYXNlLmVucXVldWVUcmFuc2FjdGlvbihXVEZNb3ZlKHRyYW5zYWN0aW9uKSk7
CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgbV9kYXRhYmFzZS0+ZW5xdWV1ZVRyYW5z
YWN0aW9uKFdURk1vdmUodHJhbnNhY3Rpb24pKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb246OmRpZEFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKQEAgLTE1Miw3ICsxNjcs
OCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkQWJvcnRUcmFuc2FjdGlv
bihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aQogICAgIGF1dG8gdHJhbnNhY3Rpb25JZGVudGlm
aWVyID0gdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKTsKICAgICBhdXRvIHRha2VuVHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uTWFwLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsK
IAotICAgIEFTU0VSVCh0YWtlblRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UuaGFyZENsb3NlZEZv
clVzZXJEZWxldGUoKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFTU0VSVCh0YWtl
blRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UtPmhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkpOwog
ICAgIGlmICh0YWtlblRyYW5zYWN0aW9uKQogICAgICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudC5k
aWRBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4IDJmMWEyOWEyZTg4ZTUy
NTg5ZTU4MWNhOTIxZjY5OTQ1YmMyMzkzOTMuLjNhMjU2NGExMjliYTlmNmEzMjdhZjkzMmY2YmJi
ZjJlODYzM2E2ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTMsNyBAQCBwdWJs
aWM6CiAgICAgflVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbigpOwogCiAgICAgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiBvcGVuUmVxdWVzdElkZW50aWZpZXIoKSB7IHJldHVybiBtX29w
ZW5SZXF1ZXN0SWRlbnRpZmllcjsgfQotICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSgp
IHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KKyAgICBVbmlxdWVJREJEYXRhYmFzZSogZGF0YWJhc2Uo
KSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAgICAgSURCQ29ubmVjdGlvblRvQ2xpZW50
JiBjb25uZWN0aW9uVG9DbGllbnQoKSB7IHJldHVybiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsgfQog
CiAgICAgdm9pZCBjb25uZWN0aW9uUGVuZGluZ0Nsb3NlRnJvbUNsaWVudCgpOwpAQCAtODYsNyAr
ODcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bihVbmlxdWVJREJEYXRhYmFzZSYsIFNlcnZlck9wZW5EQlJlcXVlc3QmKTsKIAotICAgIFVuaXF1
ZUlEQkRhdGFiYXNlJiBtX2RhdGFiYXNlOworICAgIFdlYWtQdHI8VW5pcXVlSURCRGF0YWJhc2U+
IG1fZGF0YWJhc2U7CiAgICAgSURCQ29ubmVjdGlvblRvQ2xpZW50JiBtX2Nvbm5lY3Rpb25Ub0Ns
aWVudDsKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9vcGVuUmVxdWVzdElkZW50aWZpZXI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCAy
MTRmOGMyMzhhMTI2MjliNzU2YTUxZGFhMDZhYmM4MGQ3N2JhZDQ2Li5mNDdjM2IzOTU5ZDRlZTI4
YjAzZmIxYTc2NmJkMDZiMmNlNmI1Y2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24uY3BwCkBAIC00NywxNiArNDcsMjMgQEAgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZUNvbm4KICAgICA6IG1fZGF0YWJhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAgICAgLCBtX3Ry
YW5zYWN0aW9uSW5mbyhpbmZvKQogeworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCiAgICAgaWYgKG1f
dHJhbnNhY3Rpb25JbmZvLm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFu
Z2UpCi0gICAgICAgIG1fb3JpZ2luYWxEYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4obV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaW5mbygpKTsK
KyAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0
YWJhc2VJbmZvPihkYXRhYmFzZS0+aW5mbygpKTsKIAotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpLnNlcnZlcigpLnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworICAgIGRh
dGFiYXNlLT5zZXJ2ZXIoKS5yZWdpc3RlclRyYW5zYWN0aW9uKCp0aGlzKTsKIH0KIAogVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6flVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24oKQog
ewotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnRyYW5zYWN0aW9uRGVzdHJv
eWVkKCp0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXIo
KS51bnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2Rh
dGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb25EZXN0cm95ZWQoKnRoaXMpOwor
ICAgIGRhdGFiYXNlLT5zZXJ2ZXIoKS51bnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOwogfQog
CiBJREJEYXRhYmFzZUluZm8qIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9yaWdpbmFs
RGF0YWJhc2VJbmZvKCkgY29uc3QKQEAgLTcwLDcgKzc3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQoKQogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCIpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCkuYWJvcnRUcmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHByb3RlY3Rl
ZFRoaXNdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2Ug
PSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2Up
OworCisgICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0IChjYWxsYmFjaykiKTsKICAgICAg
ICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZEFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIGVycm9y
KTsKICAgICB9KTsKQEAgLTk4LDcgKzEwOSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmNvbW1pdCgpCiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmNvbW1pdCIpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCkuY29tbWl0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
XShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAg
ZGF0YWJhc2UtPmNvbW1pdFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpc10o
Y29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQgKGNhbGxiYWNrKSIpOwogICAgICAgICBtX2Rh
dGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24oKnRoaXMsIGVycm9yKTsKICAg
ICB9KTsKQEAgLTExMiw3ICsxMjcsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpLmNyZWF0ZU9iamVjdFN0b3JlKCp0aGlzLCBpbmZvLCBbdGhpcywgcHJvdGVjdGVk
VGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworCisgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChk
YXRhYmFzZSk7CisKKyAgICBkYXRhYmFzZS0+Y3JlYXRlT2JqZWN0U3RvcmUoKnRoaXMsIGluZm8s
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpjcmVhdGVPYmplY3RTdG9yZSAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmIChlcnJvci5pc051
bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kaWRDcmVhdGVPYmplY3RT
dG9yZShJREJSZXN1bHREYXRhOjpjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MocmVxdWVzdERhdGEu
cmVxdWVzdElkZW50aWZpZXIoKSkpOwpAQCAtMTI5LDcgKzE0OCwxMSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZQogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0g
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuZGVsZXRlT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVj
dFN0b3JlTmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJF
cnJvciYgZXJyb3IpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNl
LT5kZWxldGVPYmplY3RTdG9yZSgqdGhpcywgb2JqZWN0U3RvcmVOYW1lLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0
U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAg
ICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRlT2JqZWN0U3RvcmUoSURCUmVzdWx0
RGF0YTo6ZGVsZXRlT2JqZWN0U3RvcmVTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlm
aWVyKCkpKTsKQEAgLTE0Niw3ICsxNjksMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpLnJlbmFtZU9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIG5ld05hbWUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURC
RXJyb3ImIGVycm9yKSB7CisKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rp
b24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5y
ZW5hbWVPYmplY3RTdG9yZSgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cmVuYW1lT2JqZWN0U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxs
KCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkUmVuYW1lT2JqZWN0U3Rv
cmUoSURCUmVzdWx0RGF0YTo6cmVuYW1lT2JqZWN0U3RvcmVTdWNjZXNzKHJlcXVlc3REYXRhLnJl
cXVlc3RJZGVudGlmaWVyKCkpKTsKQEAgLTE2Miw3ICsxODksMTEgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXMKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJh
c2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmNsZWFyT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IpIHsKKworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVj
dGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAgZGF0YWJhc2Ut
PmNsZWFyT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAg
ICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNsZWFyT2Jq
ZWN0U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAg
ICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ2xlYXJPYmplY3RTdG9yZShJREJSZXN1
bHREYXRhOjpjbGVhck9iamVjdFN0b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRp
ZmllcigpKSk7CkBAIC0xNzksNyArMjEwLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAg
ICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlv
bi0+ZGF0YWJhc2UoKS5jcmVhdGVJbmRleCgqdGhpcywgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKyAgICAKKyAgICBhdXRv
IGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJU
KGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5jcmVhdGVJbmRleCgqdGhpcywgaW5mbywgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNy
ZWF0ZUluZGV4IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAg
ICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZENyZWF0ZUluZGV4KElEQlJlc3VsdERh
dGE6OmNyZWF0ZUluZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7
CkBAIC0xOTYsNyArMjMxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJh
c2UoKS5kZWxldGVJbmRleCgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
KSB7CisKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+ZGVsZXRlSW5k
ZXgoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRlSW5kZXgoSURCUmVzdWx0RGF0YTo6ZGVsZXRl
SW5kZXhTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpKTsKQEAgLTIxMyw3
ICsyNTIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5hbWVJbmRl
eChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnJlbmFt
ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3
TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYg
ZXJyb3IpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+
cmVuYW1lSW5kZXgoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVy
LCBuZXdOYW1lLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVy
cm9yJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6cmVuYW1lSW5kZXggKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkUmVuYW1lSW5k
ZXgoSURCUmVzdWx0RGF0YTo6cmVuYW1lSW5kZXhTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJ
ZGVudGlmaWVyKCkpKTsKQEAgLTIzMSw3ICsyNzQsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGMKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25u
ZWN0aW9uLT5kYXRhYmFzZSgpLnB1dE9yQWRkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwg
b3ZlcndyaXRlTW9kZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtleSkgeworICAgIAorICAgIGF1dG8g
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQo
ZGF0YWJhc2UpOworICAgIAorICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5
RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0
RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAg
ICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9y
QWRkIChjYWxsYmFjaykiKTsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCkBAIC0yNDgs
NyArMjk1LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3Jk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmdldFJl
Y29yZChyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJl
cXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPmdl
dFJlY29yZChyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpnZXRSZWNvcmQgKGNhbGxiYWNrKSIpOwogCiAgICAgICAgIGlmIChlcnJvci5pc051
bGwoKSkKQEAgLTI2NSw3ICszMTYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpLmdldEFsbFJlY29yZHMocmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwg
Y29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNl
ID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNl
KTsKKyAgICAKKyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcyhyZXF1ZXN0RGF0YSwgZ2V0QWxs
UmVjb3Jkc0RhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURC
RXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jk
cyAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpAQCAtMjgyLDcg
KzMzNywxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVy
KCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3Rl
ZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuZ2V0Q291
bnQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVl
c3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgCisg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAg
IEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPmdldENvdW50KHJlcXVlc3RE
YXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29u
c3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQgKGNhbGxiYWNrKSIp
OwogCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKQEAgLTI5OSw3ICszNTgsMTEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXQKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRp
ZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmRlbGV0ZVJlY29yZChyZXF1ZXN0
RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNv
bnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIAor
ICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRl
bGV0ZVJlY29yZCAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpA
QCAtMzE2LDcgKzM3OSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9w
ZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25J
ZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCkub3BlbkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJl
cXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPm9w
ZW5DdXJzb3IocmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0
RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
b3BlbkN1cnNvciAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpA
QCAtMzMzLDcgKzQwMCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25J
ZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCkuaXRlcmF0ZUN1cnNvcihyZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2Ut
Pml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBy
ZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJl
c3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlz
TnVsbCgpKQpAQCAtMzQ4LDcgKzQxOSw3IEBAIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlSWRlbnRpZmllcnMoKQogICAgIGlm
ICghbV9vYmplY3RTdG9yZUlkZW50aWZpZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJZGVudGlmaWVyczsKIAotICAgIGF1dG8mIGluZm8gPSBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKS5pbmZvKCk7CisgICAgYXV0byYgaW5mbyA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpLT5pbmZvKCk7CiAgICAgZm9yIChhdXRvIG9iamVjdFN0b3Jl
TmFtZSA6IGluZm8ub2JqZWN0U3RvcmVOYW1lcygpKSB7CiAgICAgICAgIGF1dG8gb2JqZWN0U3Rv
cmVJbmZvID0gaW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUp
OwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcAppbmRl
eCA2YzZhZTZiYTBiZTUxNjljMmVkOTNhNjA5MjBmNjhjYWRmNTEwZTZlLi43ZmYwOGVlNDk4ZTc3
NjZkMWJmMmFhNmIxNTNiZmZlYjVkNjcwYWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwCkBAIC0xMTEs
NyArMTExLDcgQEAgSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpvcGVuRGF0YWJhc2VTdWNj
ZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmUKICAgICBJREJSZXN1bHREYXRhIHJl
c3VsdCB7IHJlcXVlc3RJZGVudGlmaWVyIH07CiAgICAgcmVzdWx0Lm1fdHlwZSA9IElEQlJlc3Vs
dFR5cGU6Ok9wZW5EYXRhYmFzZVN1Y2Nlc3M7CiAgICAgcmVzdWx0Lm1fZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllciA9IGNvbm5lY3Rpb24uaWRlbnRpZmllcigpOwotICAgIHJlc3VsdC5tX2Rh
dGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihjb25uZWN0aW9u
LmRhdGFiYXNlKCkuaW5mbygpKTsKKyAgICByZXN1bHQubV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1h
a2VfdW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oY29ubmVjdGlvbi5kYXRhYmFzZSgpLT5pbmZvKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBJREJSZXN1bHRE
YXRhIElEQlJlc3VsdERhdGE6Om9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaQogICAgIElEQlJlc3VsdERhdGEgcmVzdWx0IHsgcmVxdWVzdElkZW50aWZp
ZXIgfTsKICAgICByZXN1bHQubV90eXBlID0gSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlVXBn
cmFkZU5lZWRlZDsKICAgICByZXN1bHQubV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyID0g
dHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuaWRlbnRpZmllcigpOwotICAgIHJlc3Vs
dC5tX2RhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPih0cmFu
c2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpLmluZm8oKSk7CisgICAgcmVz
dWx0Lm1fZGF0YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KHRy
YW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCktPmluZm8oKSk7CiAgICAg
cmVzdWx0Lm1fdHJhbnNhY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJUcmFuc2FjdGlv
bkluZm8+KHRyYW5zYWN0aW9uLmluZm8oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CmluZGV4IDI3ZjBkZDI4NWI1NDBlY2ZmNDU4MjVjNjNlZTlkZmQ1OTcyY2U5NWEuLjhlYTkzMDFm
ZmVhOGY1ZTk2ZmEzZmY0MGY1MjJmYWM0ODRmNDFkZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcApAQCAtMTg1LDkgKzE4
NSwxMiBAQCB2b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKQogCiB2
b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUoKQogeworICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIFJFTEVBU0VfQVNTRVJUKGlu
amVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSk7CisKICAgICBzZXRXYWl0VW50aWxEb25lKHRy
dWUpOwogICAgIC8vIEZJWE1FOiBXYXRjaGRvZyB0aW1lciBzaG91bGQgYmUgbW92ZWQgdG8gVUkg
cHJvY2VzcyBpbiBvcmRlciB0byB0YWtlIHRoZSBlbGFwc2VkIHRpbWUgaW4gYW5vdGVociBwcm9j
ZXNzIGludG8gYWNjb3VudC4KLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnVz
ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpCisgICAgaWYgKGluamVjdGVkQnVuZGxlLnVzZVdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpCiAgICAgICAgIGluaXRpYWxpemVXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcklmTmVlZGVkKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346940</attachid>
            <date>2018-08-10 16:50:03 -0700</date>
            <delta_ts>2018-08-12 23:33:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-188474-20180810165002.patch</filename>
            <type>text/plain</type>
            <size>30945</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk0YTA1NjBmYmVkODc2
ZGI5OWIzYzI0NjdjMmZlYWMyN2U4YmEyNC4uYWU3YTZmMTdmM2I0NGIyZmVjNDdhZjhjZDI4N2Fl
YWRiNzY4NjI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE4LTA4LTEwICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIENyYXNoVHJhY2VyOiBjb20u
YXBwbGUuV2ViS2l0LlN0b3JhZ2UgYXQgV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6Y29ubmVjdGlvbkNsb3NlZEZyb21DbGllbnQoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg4NDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uIGlzIHJlZmNvdW50
ZWQgYnkgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiBhbmQgaXQgcmVmY291bnRzCisgICAg
ICAgIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uIFRoaXMgY3ljbGUgY291bGQgbWFrZSBV
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24gb3V0bGl2ZXMKKyAgICAgICAgVW5pcXVlSURCRGF0
YWJhc2UsIHNvIGl0cyByZWZlcmVuY2UgdG8gVW5pcXVlSURCRGF0YWJhc2UgbWF5IGJlIHN0YWxl
LiBDYWxsaW5nIGEgZnVuY3Rpb24KKyAgICAgICAgb24gYSBzdGFsZSBvYmplY3QgaXMgcHJvYmFi
bHkgdGhlIHJlYXNvbiBvZiByZWNlbnQgdmFyaW91cyBzdG9yYWdlIHByb2Nlc3MgY3Jhc2hlcyBp
bgorICAgICAgICBpbmRleGVkREIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtX2RhdGFi
YXNlIGEgV2Vha1B0ciBhbmQgYWRkcyBhc3NlcnRpb25zIHRoYXQgY291bGQgaGVscCB1cyBkZWJ1
ZyB0aGUKKyAgICAgICAgY3Jhc2hlcy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmln
aW5zKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
Y29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6VW5pcXVlSURCRGF0
YWJhc2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uOjp+VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjphYm9y
dFRyYW5zYWN0aW9uV2l0aG91dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVj
dGlvbjo6Y29uZmlybURpZENsb3NlRnJvbVNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlQ29u
bmVjdGlvbjo6ZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZUNvbm5lY3Rpb246OmVzdGFibGlzaFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpkaWRBYm9ydFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2VDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGF0YWJhc2UpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246On5VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0
ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlSWRlbnRpZmllcnMpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXN1bHREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc3VsdERhdGE6
Om9wZW5EYXRhYmFzZVN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzdWx0RGF0YTo6
b3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZCk6CisKIDIwMTgtMDgtMDkgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgbWVtb3J5Rm9vdHByaW50IHNob3VsZCByZXR1
cm4gc2l6ZV90IG5vdCBvcHRpb25hbDxzaXplX3Q+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4IDFiOTk0NTIyMmMw
ZDgxNDdiNzgzNDVjYjUwMmI4Yzg5YmUzNzJlNjMuLjA1OWFlYjU1MWUwY2RlYmQzMjUyNmRmZmFh
ODI0MzM1YTliMjFlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBJREJT
ZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSBtb2Rp
ZmljYXRpb25UaW1lLAogCiAgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFzZSo+IG9wZW5EYXRh
YmFzZXM7CiAgICAgZm9yIChhdXRvKiBjb25uZWN0aW9uIDogbV9kYXRhYmFzZUNvbm5lY3Rpb25z
LnZhbHVlcygpKQotICAgICAgICBvcGVuRGF0YWJhc2VzLmFkZCgmY29ubmVjdGlvbi0+ZGF0YWJh
c2UoKSk7CisgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkp
OwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG9wZW5EYXRhYmFzZXMpCiAgICAgICAgIGRh
dGFiYXNlLT5pbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKTsKQEAgLTUyNiwxMCArNTI2LDEz
IEBAIHZvaWQgSURCU2VydmVyOjpjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29u
c3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0CiAKICAgICBIYXNoU2V0PFVuaXF1ZUlEQkRhdGFi
YXNlKj4gb3BlbkRhdGFiYXNlczsKICAgICBmb3IgKGF1dG8qIGNvbm5lY3Rpb24gOiBtX2RhdGFi
YXNlQ29ubmVjdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYgaWRlbnRpZmll
ciA9IGNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaWRlbnRpZmllcigpOworICAgICAgICBhdXRvIGRh
dGFiYXNlID0gY29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICAgICAgQVNTRVJUKGRhdGFiYXNl
KTsKKworICAgICAgICBjb25zdCBhdXRvJiBpZGVudGlmaWVyID0gZGF0YWJhc2UtPmlkZW50aWZp
ZXIoKTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zKSB7CiAgICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5pc1JlbGF0ZWRUb09yaWdpbihvcmlnaW4pKSB7Ci0gICAgICAgICAg
ICAgICAgb3BlbkRhdGFiYXNlcy5hZGQoJmNvbm5lY3Rpb24tPmRhdGFiYXNlKCkpOworICAgICAg
ICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYWRkKGRhdGFiYXNlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
aW5kZXggMjhkYTJhNTY2MjUyYTExMThkMmY0Mjg2NGI4MjY3ZjljMjNmM2FmNS4uY2MwYzFiMDMx
YmU3YzAwZThmOTg5N2JjOGMwYzFjYzI0NGYyYTkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCkBAIC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb21taXRU
cmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJ
REJEYXRhYmFzZTo6Y29tbWl0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJU
KCZ0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwor
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09
IHRoaXMpOwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVF
cnJvcihXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpAQCAtMTM0NCw3
ICsxMzQ0LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJvcnRUcmFuc2FjdGlvbihVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmFi
b3J0VHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgQVNTRVJUKCZ0cmFuc2FjdGlvbi5k
YXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOworICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpID09IHRoaXMpOwogCiAgICAg
dWludDY0X3QgY2FsbGJhY2tJRCA9IHN0b3JlQ2FsbGJhY2tPckZpcmVFcnJvcihXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgaWYgKCFjYWxsYmFja0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAppbmRl
eCA5YThiMWM1ZDA2MmFiNGJkMWY5M2E4ODU2OWYyNzQ4NmQ1MTkzZGM4Li5mM2I4Nzg4ZmU4Nzcx
NTFmYjhhZDVhOWViMWJkMzBiYjcwYzE1ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaApAQCAt
NzIsNyArNzIsNyBAQCB0eXBlZGVmIEZ1bmN0aW9uPHZvaWQoY29uc3QgSURCRXJyb3ImLCBjb25z
dCBJREJHZXRSZXN1bHQmKT4gR2V0UmVzdWx0Q2FsbGJhY2s7CiB0eXBlZGVmIEZ1bmN0aW9uPHZv
aWQoY29uc3QgSURCRXJyb3ImLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmKT4gR2V0QWxsUmVzdWx0
c0NhbGxiYWNrOwogdHlwZWRlZiBGdW5jdGlvbjx2b2lkKGNvbnN0IElEQkVycm9yJiwgdWludDY0
X3QpPiBDb3VudENhbGxiYWNrOwogCi1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZSB7CitjbGFzcyBV
bmlxdWVJREJEYXRhYmFzZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxVbmlxdWVJREJEYXRhYmFz
ZT4gewogcHVibGljOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKElEQlNlcnZlciYsIGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYpOwogICAgIFVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRh
dGFiYXNlJikgPSBkZWxldGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rp
b24uY3BwCmluZGV4IDg0MDE1ZDg2YzRjYTQ4ZjAxYmRkOTVhYzRjNDRmNjM0NjhjMGFhMGEuLjJh
NDBmNTI0MGJjMzk0ZDc2ZTVlYTdlYTA2NmM5YzBmYTZiODgzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uY3BwCkBAIC00NCwxNyArNDQsMTggQEAgUmVmPFVu
aXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
cmVhdGUoVW5pcXVlSURCRGEKIH0KIAogVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpVbmlx
dWVJREJEYXRhYmFzZUNvbm5lY3Rpb24oVW5pcXVlSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBTZXJ2
ZXJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQotICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAg
ICA6IG1fZGF0YWJhc2UobWFrZVdlYWtQdHIoZGF0YWJhc2UpKQogICAgICwgbV9jb25uZWN0aW9u
VG9DbGllbnQocmVxdWVzdC5jb25uZWN0aW9uKCkpCiAgICAgLCBtX29wZW5SZXF1ZXN0SWRlbnRp
ZmllcihyZXF1ZXN0LnJlcXVlc3REYXRhKCkucmVxdWVzdElkZW50aWZpZXIoKSkKIHsKLSAgICBt
X2RhdGFiYXNlLnNlcnZlcigpLnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKKyAg
ICBtX2RhdGFiYXNlLT5zZXJ2ZXIoKS5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7
CiAgICAgbV9jb25uZWN0aW9uVG9DbGllbnQucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRo
aXMpOwogfQogCiBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246On5VbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb24oKQogewotICAgIG1fZGF0YWJhc2Uuc2VydmVyKCkudW5yZWdpc3RlckRhdGFi
YXNlQ29ubmVjdGlvbigqdGhpcyk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0
YWJhc2UtPnNlcnZlcigpLnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMpOwogICAg
IG1fY29ubmVjdGlvblRvQ2xpZW50LnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMp
OwogfQogCkBAIC03MCw3ICs3MSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bjo6YWJvcnRUcmFuc2FjdGlvbldpdGhvdXRDYWxsYmFjayhVbmlxdWVJREJEYXRhYgogICAgIGNv
bnN0IGF1dG8mIHRyYW5zYWN0aW9uSWRlbnRpZmllciA9IHRyYW5zYWN0aW9uLmluZm8oKS5pZGVu
dGlmaWVyKCk7CiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKIAotICAgIG1fZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbih0cmFuc2Fj
dGlvbiwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcl0oY29uc3Qg
SURCRXJyb3ImKSB7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmICghbV9kYXRhYmFz
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rp
b24odHJhbnNhY3Rpb24sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCB0cmFuc2FjdGlvbklkZW50aWZp
ZXJdKGNvbnN0IElEQkVycm9yJikgewogICAgICAgICBBU1NFUlQobV90cmFuc2FjdGlvbk1hcC5j
b250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbk1h
cC5yZW1vdmUodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICB9KTsKQEAgLTg3LDI4ICs5Miwz
NiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkNsb3NlZEZy
b21DbGllbnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5l
Y3Rpb246OmNvbm5lY3Rpb25DbG9zZWRGcm9tQ2xpZW50IC0gJXMgLSAlIiBQUkl1NjQsIG1fb3Bl
blJlcXVlc3RJZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlm
aWVyKCkpOwogCi0gICAgbV9kYXRhYmFzZS5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhp
cyk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIGlmIChtX2RhdGFiYXNlKQorICAgICAg
ICBtX2RhdGFiYXNlLT5jb25uZWN0aW9uQ2xvc2VkRnJvbUNsaWVudCgqdGhpcyk7CiB9CiAKIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjb25maXJtRGlkQ2xvc2VGcm9tU2VydmVy
KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpj
b25maXJtRGlkQ2xvc2VGcm9tU2VydmVyIC0gJXMgLSAlIiBQUkl1NjQsIG1fb3BlblJlcXVlc3RJ
ZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVyKCkpOwog
Ci0gICAgbV9kYXRhYmFzZS5jb25maXJtRGlkQ2xvc2VGcm9tU2VydmVyKCp0aGlzKTsKKyAgICBB
U1NFUlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJh
c2UtPmNvbmZpcm1EaWRDbG9zZUZyb21TZXJ2ZXIoKnRoaXMpOwogfQogCiB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKQogewogICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZl
bnQgLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50aWZpZXIubG9nZ2luZ1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAKLSAgICBtX2RhdGFiYXNlLmRpZEZp
cmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAgICBBU1NF
UlQobV9kYXRhYmFzZSk7CisgICAgaWYgKG1fZGF0YWJhc2UpCisgICAgICAgIG1fZGF0YWJhc2Ut
PmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoKnRoaXMsIHJlcXVlc3RJZGVudGlmaWVyKTsKIH0K
IAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb246OmRpZEZpbmlzaEhhbmRsaW5nVmVy
c2lvbkNoYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllcikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9u
OjpkaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UgLSAlcyAtICUiIFBSSXU2NCwgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpZGVudGlmaWVy
KCkpOwogCi0gICAgbV9kYXRhYmFzZS5kaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2UoKnRo
aXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAg
IGlmIChtX2RhdGFiYXNlKQorICAgICAgICBtX2RhdGFiYXNlLT5kaWRGaW5pc2hIYW5kbGluZ1Zl
cnNpb25DaGFuZ2UoKnRoaXMsIHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVlc3Rl
ZFZlcnNpb24pCkBAIC0xMjIsNyArMTM1LDcgQEAgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJzaW9uQ2hhbmdlVHIKICAg
ICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uOjpjcmVhdGVWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24gLSAlcyAtICUiIFBSSXU2NCwgbV9vcGVuUmVxdWVzdElkZW50
aWZpZXIubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIGlkZW50aWZpZXIoKSk7CiAgICAg
QVNTRVJUKCFtX2Nsb3NlUGVuZGluZyk7CiAKLSAgICBJREJUcmFuc2FjdGlvbkluZm8gaW5mbyA9
IElEQlRyYW5zYWN0aW9uSW5mbzo6dmVyc2lvbkNoYW5nZShtX2Nvbm5lY3Rpb25Ub0NsaWVudCwg
bV9kYXRhYmFzZS5pbmZvKCksIG5ld1ZlcnNpb24pOworICAgIElEQlRyYW5zYWN0aW9uSW5mbyBp
bmZvID0gSURCVHJhbnNhY3Rpb25JbmZvOjp2ZXJzaW9uQ2hhbmdlKG1fY29ubmVjdGlvblRvQ2xp
ZW50LCBtX2RhdGFiYXNlLT5pbmZvKCksIG5ld1ZlcnNpb24pOwogCiAgICAgUmVmPFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNldCh0
cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKQEAg
LTE0Miw3ICsxNTUsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZXN0YWJs
aXNoVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJgogCiAgICAgUmVmPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKICAgICBtX3RyYW5zYWN0aW9uTWFwLnNl
dCh0cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsK
LSAgICBtX2RhdGFiYXNlLmVucXVldWVUcmFuc2FjdGlvbihXVEZNb3ZlKHRyYW5zYWN0aW9uKSk7
CisKKyAgICBBU1NFUlQobV9kYXRhYmFzZSk7CisgICAgbV9kYXRhYmFzZS0+ZW5xdWV1ZVRyYW5z
YWN0aW9uKFdURk1vdmUodHJhbnNhY3Rpb24pKTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZUNvbm5lY3Rpb246OmRpZEFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkVycm9yJiBlcnJvcikKQEAgLTE1Miw3ICsxNjcs
OCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbjo6ZGlkQWJvcnRUcmFuc2FjdGlv
bihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aQogICAgIGF1dG8gdHJhbnNhY3Rpb25JZGVudGlm
aWVyID0gdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKTsKICAgICBhdXRvIHRha2VuVHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uTWFwLnRha2UodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsK
IAotICAgIEFTU0VSVCh0YWtlblRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UuaGFyZENsb3NlZEZv
clVzZXJEZWxldGUoKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UpOworICAgIEFTU0VSVCh0YWtl
blRyYW5zYWN0aW9uIHx8IG1fZGF0YWJhc2UtPmhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkpOwog
ICAgIGlmICh0YWtlblRyYW5zYWN0aW9uKQogICAgICAgICBtX2Nvbm5lY3Rpb25Ub0NsaWVudC5k
aWRBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgZXJyb3IpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbi5oCmluZGV4IDJmMWEyOWEyZTg4ZTUy
NTg5ZTU4MWNhOTIxZjY5OTQ1YmMyMzkzOTMuLjNhMjU2NGExMjliYTlmNmEzMjdhZjkzMmY2YmJi
ZjJlODYzM2E2ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VDb25uZWN0aW9uLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNyArNTMsNyBAQCBwdWJs
aWM6CiAgICAgflVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbigpOwogCiAgICAgY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiBvcGVuUmVxdWVzdElkZW50aWZpZXIoKSB7IHJldHVybiBtX29w
ZW5SZXF1ZXN0SWRlbnRpZmllcjsgfQotICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRhYmFzZSgp
IHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KKyAgICBVbmlxdWVJREJEYXRhYmFzZSogZGF0YWJhc2Uo
KSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAgICAgSURCQ29ubmVjdGlvblRvQ2xpZW50
JiBjb25uZWN0aW9uVG9DbGllbnQoKSB7IHJldHVybiBtX2Nvbm5lY3Rpb25Ub0NsaWVudDsgfQog
CiAgICAgdm9pZCBjb25uZWN0aW9uUGVuZGluZ0Nsb3NlRnJvbUNsaWVudCgpOwpAQCAtODYsNyAr
ODcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlv
bihVbmlxdWVJREJEYXRhYmFzZSYsIFNlcnZlck9wZW5EQlJlcXVlc3QmKTsKIAotICAgIFVuaXF1
ZUlEQkRhdGFiYXNlJiBtX2RhdGFiYXNlOworICAgIFdlYWtQdHI8VW5pcXVlSURCRGF0YWJhc2U+
IG1fZGF0YWJhc2U7CiAgICAgSURCQ29ubmVjdGlvblRvQ2xpZW50JiBtX2Nvbm5lY3Rpb25Ub0Ns
aWVudDsKICAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9vcGVuUmVxdWVzdElkZW50aWZpZXI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCAy
MTRmOGMyMzhhMTI2MjliNzU2YTUxZGFhMDZhYmM4MGQ3N2JhZDQ2Li5mNDdjM2IzOTU5ZDRlZTI4
YjAzZmIxYTc2NmJkMDZiMmNlNmI1Y2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24uY3BwCkBAIC00NywxNiArNDcsMjMgQEAgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFz
ZUNvbm4KICAgICA6IG1fZGF0YWJhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pCiAgICAgLCBtX3Ry
YW5zYWN0aW9uSW5mbyhpbmZvKQogeworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCiAgICAgaWYgKG1f
dHJhbnNhY3Rpb25JbmZvLm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25jaGFu
Z2UpCi0gICAgICAgIG1fb3JpZ2luYWxEYXRhYmFzZUluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4obV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuaW5mbygpKTsK
KyAgICAgICAgbV9vcmlnaW5hbERhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0
YWJhc2VJbmZvPihkYXRhYmFzZS0+aW5mbygpKTsKIAotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpLnNlcnZlcigpLnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworICAgIGRh
dGFiYXNlLT5zZXJ2ZXIoKS5yZWdpc3RlclRyYW5zYWN0aW9uKCp0aGlzKTsKIH0KIAogVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6flVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24oKQog
ewotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnRyYW5zYWN0aW9uRGVzdHJv
eWVkKCp0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXIo
KS51bnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2Rh
dGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb25EZXN0cm95ZWQoKnRoaXMpOwor
ICAgIGRhdGFiYXNlLT5zZXJ2ZXIoKS51bnJlZ2lzdGVyVHJhbnNhY3Rpb24oKnRoaXMpOwogfQog
CiBJREJEYXRhYmFzZUluZm8qIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9yaWdpbmFs
RGF0YWJhc2VJbmZvKCkgY29uc3QKQEAgLTcwLDcgKzc3LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQoKQogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCIpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCkuYWJvcnRUcmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHByb3RlY3Rl
ZFRoaXNdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2Ug
PSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2Up
OworCisgICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwg
IlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0IChjYWxsYmFjaykiKTsKICAgICAg
ICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZEFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIGVycm9y
KTsKICAgICB9KTsKQEAgLTk4LDcgKzEwOSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmNvbW1pdCgpCiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmNvbW1pdCIpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCkuY29tbWl0VHJhbnNhY3Rpb24oKnRoaXMsIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
XShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAg
ZGF0YWJhc2UtPmNvbW1pdFRyYW5zYWN0aW9uKCp0aGlzLCBbdGhpcywgcHJvdGVjdGVkVGhpc10o
Y29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQgKGNhbGxiYWNrKSIpOwogICAgICAgICBtX2Rh
dGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24oKnRoaXMsIGVycm9yKTsKICAg
ICB9KTsKQEAgLTExMiw3ICsxMjcsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpLmNyZWF0ZU9iamVjdFN0b3JlKCp0aGlzLCBpbmZvLCBbdGhpcywgcHJvdGVjdGVk
VGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworCisgICAgYXV0byBk
YXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChk
YXRhYmFzZSk7CisKKyAgICBkYXRhYmFzZS0+Y3JlYXRlT2JqZWN0U3RvcmUoKnRoaXMsIGluZm8s
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpjcmVhdGVPYmplY3RTdG9yZSAoY2FsbGJhY2spIik7CiAgICAgICAgIGlmIChlcnJvci5pc051
bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kaWRDcmVhdGVPYmplY3RT
dG9yZShJREJSZXN1bHREYXRhOjpjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MocmVxdWVzdERhdGEu
cmVxdWVzdElkZW50aWZpZXIoKSkpOwpAQCAtMTI5LDcgKzE0OCwxMSBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3RE
YXRhJiByZXF1ZQogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0g
cmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuZGVsZXRlT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVj
dFN0b3JlTmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJF
cnJvciYgZXJyb3IpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNl
LT5kZWxldGVPYmplY3RTdG9yZSgqdGhpcywgb2JqZWN0U3RvcmVOYW1lLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0
U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAg
ICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRlT2JqZWN0U3RvcmUoSURCUmVzdWx0
RGF0YTo6ZGVsZXRlT2JqZWN0U3RvcmVTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlm
aWVyKCkpKTsKQEAgLTE0Niw3ICsxNjksMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpyZW5hbWVPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWUKICAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpLnJlbmFtZU9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIG5ld05hbWUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURC
RXJyb3ImIGVycm9yKSB7CisKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rp
b24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5y
ZW5hbWVPYmplY3RTdG9yZSgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBuZXdOYW1lLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
cmVuYW1lT2JqZWN0U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxs
KCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkUmVuYW1lT2JqZWN0U3Rv
cmUoSURCUmVzdWx0RGF0YTo6cmVuYW1lT2JqZWN0U3RvcmVTdWNjZXNzKHJlcXVlc3REYXRhLnJl
cXVlc3RJZGVudGlmaWVyKCkpKTsKQEAgLTE2Miw3ICsxODksMTEgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZXMKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJl
cXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJh
c2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmNsZWFyT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IpIHsKKworICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVj
dGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworCisgICAgZGF0YWJhc2Ut
PmNsZWFyT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAg
ICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNsZWFyT2Jq
ZWN0U3RvcmUgKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAg
ICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ2xlYXJPYmplY3RTdG9yZShJREJSZXN1
bHREYXRhOjpjbGVhck9iamVjdFN0b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRp
ZmllcigpKSk7CkBAIC0xNzksNyArMjEwLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbjo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAg
ICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50
cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlv
bi0+ZGF0YWJhc2UoKS5jcmVhdGVJbmRleCgqdGhpcywgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKyAgICAKKyAgICBhdXRv
IGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJU
KGRhdGFiYXNlKTsKKworICAgIGRhdGFiYXNlLT5jcmVhdGVJbmRleCgqdGhpcywgaW5mbywgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNy
ZWF0ZUluZGV4IChjYWxsYmFjaykiKTsKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAg
ICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZENyZWF0ZUluZGV4KElEQlJlc3VsdERh
dGE6OmNyZWF0ZUluZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7
CkBAIC0xOTYsNyArMjMxLDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAgICAgQVNTRVJU
KG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSk7CiAKICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJh
c2UoKS5kZWxldGVJbmRleCgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
KSB7CisKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+ZGVsZXRlSW5k
ZXgoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgg
KGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRlSW5kZXgoSURCUmVzdWx0RGF0YTo6ZGVsZXRl
SW5kZXhTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpKTsKQEAgLTIxMyw3
ICsyNTIsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5hbWVJbmRl
eChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLnJlbmFt
ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3
TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYg
ZXJyb3IpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24t
PmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICAKKyAgICBkYXRhYmFzZS0+
cmVuYW1lSW5kZXgoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVy
LCBuZXdOYW1lLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVy
cm9yJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6cmVuYW1lSW5kZXggKGNhbGxiYWNrKSIpOwogICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkUmVuYW1lSW5k
ZXgoSURCUmVzdWx0RGF0YTo6cmVuYW1lSW5kZXhTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJ
ZGVudGlmaWVyKCkpKTsKQEAgLTIzMSw3ICsyNzQsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEs
IGMKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25u
ZWN0aW9uLT5kYXRhYmFzZSgpLnB1dE9yQWRkKHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwg
b3ZlcndyaXRlTW9kZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtleSkgeworICAgIAorICAgIGF1dG8g
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQo
ZGF0YWJhc2UpOworICAgIAorICAgIGRhdGFiYXNlLT5wdXRPckFkZChyZXF1ZXN0RGF0YSwga2V5
RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0
RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAg
ICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9y
QWRkIChjYWxsYmFjaykiKTsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCkBAIC0yNDgs
NyArMjk1LDExIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3Jk
KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwKICAgICBBU1NFUlQobV90cmFuc2Fj
dGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmll
cigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmdldFJl
Y29yZChyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJl
cXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPmdl
dFJlY29yZChyZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uOjpnZXRSZWNvcmQgKGNhbGxiYWNrKSIpOwogCiAgICAgICAgIGlmIChlcnJvci5pc051
bGwoKSkKQEAgLTI2NSw3ICszMTYsMTEgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBB
U1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5z
YWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpLmdldEFsbFJlY29yZHMocmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwg
Y29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKKyAgICAKKyAgICBhdXRvIGRhdGFiYXNl
ID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNl
KTsKKyAgICAKKyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVjb3JkcyhyZXF1ZXN0RGF0YSwgZ2V0QWxs
UmVjb3Jkc0RhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURC
RXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRBbGxSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jk
cyAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpAQCAtMjgyLDcg
KzMzNywxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldENvdW50KGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogICAgIEFTU0VSVChtX3RyYW5zYWN0
aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVy
KCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3Rl
ZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCkuZ2V0Q291
bnQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVl
c3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CisgICAgCisg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOworICAg
IEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPmdldENvdW50KHJlcXVlc3RE
YXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29u
c3QgSURCRXJyb3ImIGVycm9yLCB1aW50NjRfdCBjb3VudCkgewogICAgICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQgKGNhbGxiYWNrKSIp
OwogCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKQEAgLTI5OSw3ICszNTgsMTEgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmQoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXQKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRp
ZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAogICAgIFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
ICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpLmRlbGV0ZVJlY29yZChyZXF1ZXN0
RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNv
bnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIAorICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIAor
ICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsK
ICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRl
bGV0ZVJlY29yZCAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpA
QCAtMzE2LDcgKzM3OSwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9w
ZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLAogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25J
ZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCkub3BlbkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJl
cXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2UtPm9w
ZW5DdXJzb3IocmVxdWVzdERhdGEsIGluZm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0
RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkg
ewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6
b3BlbkN1cnNvciAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQpA
QCAtMzMzLDcgKzQwMCwxMSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25J
ZGVudGlmaWVyKCkpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+
IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCkuaXRlcmF0ZUN1cnNvcihyZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgCisgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgCisgICAgZGF0YWJhc2Ut
Pml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBy
ZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJl
c3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJhY2spIik7CiAKICAgICAgICAgaWYgKGVycm9yLmlz
TnVsbCgpKQpAQCAtMzQ4LDcgKzQxOSw3IEBAIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlSWRlbnRpZmllcnMoKQogICAgIGlm
ICghbV9vYmplY3RTdG9yZUlkZW50aWZpZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1f
b2JqZWN0U3RvcmVJZGVudGlmaWVyczsKIAotICAgIGF1dG8mIGluZm8gPSBtX2RhdGFiYXNlQ29u
bmVjdGlvbi0+ZGF0YWJhc2UoKS5pbmZvKCk7CisgICAgYXV0byYgaW5mbyA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpLT5pbmZvKCk7CiAgICAgZm9yIChhdXRvIG9iamVjdFN0b3Jl
TmFtZSA6IGluZm8ub2JqZWN0U3RvcmVOYW1lcygpKSB7CiAgICAgICAgIGF1dG8gb2JqZWN0U3Rv
cmVJbmZvID0gaW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUp
OwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXN1bHREYXRhLmNwcAppbmRl
eCA2YzZhZTZiYTBiZTUxNjljMmVkOTNhNjA5MjBmNjhjYWRmNTEwZTZlLi43ZmYwOGVlNDk4ZTc3
NjZkMWJmMmFhNmIxNTNiZmZlYjVkNjcwYWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzdWx0RGF0YS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc3VsdERhdGEuY3BwCkBAIC0xMTEs
NyArMTExLDcgQEAgSURCUmVzdWx0RGF0YSBJREJSZXN1bHREYXRhOjpvcGVuRGF0YWJhc2VTdWNj
ZXNzKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmUKICAgICBJREJSZXN1bHREYXRhIHJl
c3VsdCB7IHJlcXVlc3RJZGVudGlmaWVyIH07CiAgICAgcmVzdWx0Lm1fdHlwZSA9IElEQlJlc3Vs
dFR5cGU6Ok9wZW5EYXRhYmFzZVN1Y2Nlc3M7CiAgICAgcmVzdWx0Lm1fZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllciA9IGNvbm5lY3Rpb24uaWRlbnRpZmllcigpOwotICAgIHJlc3VsdC5tX2Rh
dGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPihjb25uZWN0aW9u
LmRhdGFiYXNlKCkuaW5mbygpKTsKKyAgICByZXN1bHQubV9kYXRhYmFzZUluZm8gPSBzdGQ6Om1h
a2VfdW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oY29ubmVjdGlvbi5kYXRhYmFzZSgpLT5pbmZvKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBJREJSZXN1bHRE
YXRhIElEQlJlc3VsdERhdGE6Om9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaQogICAgIElEQlJlc3VsdERhdGEgcmVzdWx0IHsgcmVxdWVzdElkZW50aWZp
ZXIgfTsKICAgICByZXN1bHQubV90eXBlID0gSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlVXBn
cmFkZU5lZWRlZDsKICAgICByZXN1bHQubV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyID0g
dHJhbnNhY3Rpb24uZGF0YWJhc2VDb25uZWN0aW9uKCkuaWRlbnRpZmllcigpOwotICAgIHJlc3Vs
dC5tX2RhdGFiYXNlSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VJbmZvPih0cmFu
c2FjdGlvbi5kYXRhYmFzZUNvbm5lY3Rpb24oKS5kYXRhYmFzZSgpLmluZm8oKSk7CisgICAgcmVz
dWx0Lm1fZGF0YWJhc2VJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZUluZm8+KHRy
YW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCktPmluZm8oKSk7CiAgICAg
cmVzdWx0Lm1fdHJhbnNhY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxJREJUcmFuc2FjdGlv
bkluZm8+KHRyYW5zYWN0aW9uLmluZm8oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>