<?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>202074</bug_id>
          
          <creation_ts>2019-09-21 00:17:09 -0700</creation_ts>
          <short_desc>Stop refing UniqueIDBDatabaseTransaction in callbacks</short_desc>
          <delta_ts>2019-09-24 14:12:20 -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>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1573049</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-21 00:17:09 -0700</bug_when>
    <thetext>After quota check is introduced to IDB, the callback that takes the ref of UniqueIDBDatabaseTransaction will be passed to StorageQuotaManager. Previously the callback was only passed to UniqueIDBDatabase and UniqueIDBDatabase would make sure they were called before UniqueIDBDatabase was destroyed. Now UniqueIDBDatabaseTransaction may live longer than UniqueIDBDatabase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573050</commentid>
    <comment_count>1</comment_count>
      <attachid>379313</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-21 00:19:54 -0700</bug_when>
    <thetext>Created attachment 379313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573237</commentid>
    <comment_count>2</comment_count>
      <attachid>379313</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-22 23:02:11 -0700</bug_when>
    <thetext>Comment on attachment 379313
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        UniqueIDBDatabase.

Your patch seems to move away from refing UniqueIDBDatabaseTransaction and instead use WeakPtr.
Would it be possible to make UniqueIDBDatabaseTransaction no longer be RefCounted?

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1229
&gt; +    requestSpace(taskSize, &quot;putOrAdd&quot;, [this, taskSize, transaction = makeWeakPtr(transaction), requestData, keyData, value, callback = WTFMove(callback), overwriteMode](auto error) mutable {

With your changes, it seems requestSpace could take a UniqueIDBDatabaseTransaction&amp;, create the makeWeakPtr itself and return UnknownError.
This would put the transaction check in only one place.
This would also apply well to waitForRequestSpaceCompletion.

&gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:82
&gt; +    database-&gt;abortTransaction(*this, UniqueIDBDatabase::WaitForPendingTasks::Yes, [this, weakThis = makeWeakPtr(*this)](const IDBError&amp; error) {

Could use auto&amp; for error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573307</commentid>
    <comment_count>3</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-23 08:45:01 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #2)
&gt; Comment on attachment 379313 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379313&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        UniqueIDBDatabase.
&gt; 
&gt; Your patch seems to move away from refing UniqueIDBDatabaseTransaction and
&gt; instead use WeakPtr.
&gt; Would it be possible to make UniqueIDBDatabaseTransaction no longer be
&gt; RefCounted?
&gt; 
UniqueIDBDatabaseTransaction can be kept alive by UniqueIDBDatabase and be destroyed when it&apos;s finished. We just need to make sure last ref of UniqueIDBDatabaseTransaction is properly released when UniqueIDBDatabase is closed.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp:1229
&gt; &gt; +    requestSpace(taskSize, &quot;putOrAdd&quot;, [this, taskSize, transaction = makeWeakPtr(transaction), requestData, keyData, value, callback = WTFMove(callback), overwriteMode](auto error) mutable {
&gt; 
&gt; With your changes, it seems requestSpace could take a
&gt; UniqueIDBDatabaseTransaction&amp;, create the makeWeakPtr itself and return
&gt; UnknownError.
&gt; This would put the transaction check in only one place.
&gt; This would also apply well to waitForRequestSpaceCompletion.
&gt; 
Okay. Will make this change.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:82
&gt; &gt; +    database-&gt;abortTransaction(*this, UniqueIDBDatabase::WaitForPendingTasks::Yes, [this, weakThis = makeWeakPtr(*this)](const IDBError&amp; error) {
&gt; 
&gt; Could use auto&amp; for error

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573318</commentid>
    <comment_count>4</comment_count>
      <attachid>379373</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-23 09:12:38 -0700</bug_when>
    <thetext>Created attachment 379373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573624</commentid>
    <comment_count>5</comment_count>
      <attachid>379373</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-24 05:42:00 -0700</bug_when>
    <thetext>Comment on attachment 379373
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        passed to StorageQuotaManager. This can make UniqueIDBDatabaseTransaction live longer than UniqueIDBDatabase.

LGTM.
As long as UniqueIDBDatabaseTransaction is RefCounted, we have no real way of guaranteeing that UniqueIDBDatabaseTransaction will never live longer than UniqueIDBDatabase.
Ideally, we should try to make UniqueIDBDatabaseTransaction no longer RefCounted.
Instead, UniqueIDBDatabase will have unique_ptr&lt;UniqueIDBDatabaseTransaction&gt; and other users of transaction will have WeakPtr&lt;UniqueIDBDatabaseTransaction&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573792</commentid>
    <comment_count>6</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-09-24 13:27:08 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; Comment on attachment 379373 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379373&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        passed to StorageQuotaManager. This can make UniqueIDBDatabaseTransaction live longer than UniqueIDBDatabase.
&gt; 
&gt; LGTM.
&gt; As long as UniqueIDBDatabaseTransaction is RefCounted, we have no real way
&gt; of guaranteeing that UniqueIDBDatabaseTransaction will never live longer
&gt; than UniqueIDBDatabase.
&gt; Ideally, we should try to make UniqueIDBDatabaseTransaction no longer
&gt; RefCounted.
&gt; Instead, UniqueIDBDatabase will have
&gt; unique_ptr&lt;UniqueIDBDatabaseTransaction&gt; and other users of transaction will
&gt; have WeakPtr&lt;UniqueIDBDatabaseTransaction&gt;.

I see. I will make a follow-up patch if that does not break things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573822</commentid>
    <comment_count>7</comment_count>
      <attachid>379373</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-24 14:11:41 -0700</bug_when>
    <thetext>Comment on attachment 379373
Patch

Clearing flags on attachment: 379373

Committed r250317: &lt;https://trac.webkit.org/changeset/250317&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573823</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-24 14:11:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573824</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-24 14:12:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/55676811&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379313</attachid>
            <date>2019-09-21 00:19:54 -0700</date>
            <delta_ts>2019-09-23 09:12:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202074-20190921001953.patch</filename>
            <type>text/plain</type>
            <size>29572</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjYxZTJiYTA4MDU1ZmZk
YmZkNjFlYWMyNGU0ZTc0NThlMWYyMWFjMi4uNWM2MDAwMzdlZTMxZTM4NjhhZGNhMDU4ZTcxZWNh
NGM3NmVjMGJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE5LTA5LTIxICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgcmVmaW5nIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24gaW4gY2FsbGJhY2tzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIwNzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZnRlciBxdW90YSBjaGVjayBpcyBpbnRyb2R1
Y2VkIHRvIElEQiwgY2FsbGJhY2tzIHRoYXQgdGFrZSB0aGUgcmVmIG9mIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24gd2lsbCBiZSAKKyAgICAgICAgcGFzc2VkIHRvIFN0b3JhZ2VRdW90YU1h
bmFnZXIuIFRoaXMgY2FuIG1ha2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiBtYXkgbGl2
ZSBsb25nZXIgdGhhbiAKKyAgICAgICAgVW5pcXVlSURCRGF0YWJhc2UuCisKKyAgICAgICAgQ292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6b3BlbkN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRl
Q3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb246OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVj
b3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
Oml0ZXJhdGVDdXJzb3IpOgorCiAyMDE5LTA5LTIwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgUG9zaXRpb246OnVwc3RyZWFtIGFuZCBQb3Np
dGlvbjo6ZG93bnN0cmVhbSB3aXRoIGxpbmUgbGF5b3V0IGl0ZXJhdG9yCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcAppbmRleCBjNWQ3YTk4MmQ3MDE2YTYzYTE4ZWZkZjFiOGQ1MzI3OTFkODUzY2Q3
Li5lYmE5YWE3MzQ2OTE4MGE0YjQwNGRlMDM5YzFjODU4NTlmYzQ4NmIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKQEAgLTEyMjAsMTcgKzEyMjAsMjEgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwg
Y29uc3QKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9y
KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVz
dERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBJREJW
YWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0
ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEs
IGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJE
YXRhYmFzZTo6cHV0T3JBZGQiKTsKIAogICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVP
cGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEpICsgZXN0aW1hdGVTaXplKHZhbHVl
KTsKLSAgICByZXF1ZXN0U3BhY2UodGFza1NpemUsICJwdXRPckFkZCIsIFt0aGlzLCB0YXNrU2l6
ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBvdmVyd3JpdGVNb2RlXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKKyAgICByZXF1ZXN0U3Bh
Y2UodGFza1NpemUsICJwdXRPckFkZCIsIFt0aGlzLCB0YXNrU2l6ZSwgdHJhbnNhY3Rpb24gPSBt
YWtlV2Vha1B0cih0cmFuc2FjdGlvbiksIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZSgqZXJyb3IpLCB7IH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAg
IGlmICghdHJhbnNhY3Rpb24pIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5r
bm93bkVycm9yIH0sIHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAg
ICAgdGhpcy0+cHV0T3JBZGRBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHJlcXVlc3REYXRhLCBr
ZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0p
OwogfQpAQCAtMTMzMCwxNiArMTMzNCwyMCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAg
IHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0
S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3Jk
RGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYg
Z2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRh
dGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9u
KFt0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CisgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24oW3RoaXMsIHRyYW5zYWN0aW9uID0gbWFrZVdlYWtQdHIodHJhbnNhY3Rpb24pLCBy
ZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
YXV0byBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZSgqZXJyb3IpLCB7IH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisgICAgICAgIGlmICghdHJhbnNhY3Rpb24pIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
KElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0sIHsgfSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KICAgICAgICAgdGhpcy0+Z2V0UmVjb3JkQWZ0ZXJRdW90YUNoZWNrKHJlcXVlc3RE
YXRhLCBnZXRSZWNvcmREYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfSk7CiB9CkBAIC0x
MzU2LDE2ICsxMzY0LDIwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZEFmdGVy
UXVvdGFDaGVjayhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhCiAgICAgICAgIHBvc3RE
YXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1HZXRSZWNvcmQsIGNhbGxiYWNrSUQsIHJlcXVlc3REYXRhLnRyYW5zYWN0aW9u
SWRlbnRpZmllcigpLCByZXF1ZXN0RGF0YS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSwgZ2V0UmVj
b3JkRGF0YS5rZXlSYW5nZURhdGEsIGdldFJlY29yZERhdGEudHlwZSkpOwogfQogCi12b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1
ZXN0RGF0YSwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmIGdldEFsbFJlY29yZHNEYXRhLCBH
ZXRBbGxSZXN1bHRzQ2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpn
ZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNE
YXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwgR2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3JkcyIpOwogCi0gICAgd2FpdEZvclJlcXVl
c3RTcGFjZUNvbXBsZXRpb24oW3RoaXMsIHJlcXVlc3REYXRhLCBnZXRBbGxSZWNvcmRzRGF0YSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CisgICAg
d2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oW3RoaXMsIHRyYW5zYWN0aW9uID0gbWFrZVdl
YWtQdHIodHJhbnNhY3Rpb24pLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewogICAgICAgICBp
ZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoKmVycm9yKSwgeyB9KTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBpZiAoIXRyYW5zYWN0aW9u
KSB7CisgICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9LCB7IH0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHRoaXMtPmdldEFsbFJl
Y29yZHNBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAgICAgfSk7CiB9CkBAIC0xNDM0LDE2ICsxNDQ2LDIwIEBAIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRBbGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllciwgY29uCiAgICAgcGVyZm9ybUdldEFsbFJlc3VsdHNDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0Q291bnQiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFt0
aGlzLCByZXF1ZXN0RGF0YSwgcmFuZ2UsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1
dG8gZXJyb3IpIG11dGFibGUgeworICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFt0
aGlzLCB0cmFuc2FjdGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgcmVxdWVzdERhdGEs
IHJhbmdlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxl
IHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKCpl
cnJvciksIHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgaWYg
KCF0cmFuc2FjdGlvbikgeworICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3du
RXJyb3IgfSwgeyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICB0
aGlzLT5nZXRDb3VudEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0RGF0YSwgcmFuZ2UsIFdURk1vdmUo
Y2FsbGJhY2spKTsKICAgICB9KTsKIH0KQEAgLTE0NzgsMTYgKzE0OTQsMjAgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybUdldENvdW50KHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRp
ZmllciwgY29uc3QgSUQKICAgICBwZXJmb3JtQ291bnRDYWxsYmFjayhjYWxsYmFja0lkZW50aWZp
ZXIsIGVycm9yLCBjb3VudCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJl
Y29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBFcnJvckNhbGxiYWNrIGNhbGxiYWNrKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlx
dWVJREJEYXRhYmFzZTo6ZGVsZXRlUmVjb3JkIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNl
Q29tcGxldGlvbihbdGhpcywgcmVxdWVzdERhdGEsIGtleVJhbmdlRGF0YSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CisgICAgd2FpdEZvclJlcXVl
c3RTcGFjZUNvbXBsZXRpb24oW3RoaXMsIHRyYW5zYWN0aW9uID0gbWFrZVdlYWtQdHIodHJhbnNh
Y3Rpb24pLCByZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAg
ICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKCplcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CisgICAgICAgIGlmICghdHJhbnNhY3Rpb24pIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgICAgIHRoaXMtPmRlbGV0ZVJlY29yZEFmdGVyUXVvdGFDaGVjayhyZXF1ZXN0
RGF0YSwga2V5UmFuZ2VEYXRhLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfSk7CiB9CkBAIC0x
NTE4LDE2ICsxNTM4LDIwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1EZWxl
dGVSZWNvcmQodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zCiAgICAgcGVyZm9ybUVy
cm9yQ2FsbGJhY2soY2FsbGJhY2tJZGVudGlmaWVyLCBlcnJvcik7CiB9CiAKLXZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6Om9wZW5DdXJzb3IoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykK
K3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Om9wZW5DdXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwg
Y29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbywgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5kZXhlZERCLCAiKG1haW4p
IFVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yIik7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNw
YWNlQ29tcGxldGlvbihbdGhpcywgcmVxdWVzdERhdGEsIGluZm8sIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHdhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKFt0aGlzLCB0cmFuc2FjdGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9u
KSwgcmVxdWVzdERhdGEsIGluZm8sIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8g
ZXJyb3IpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxi
YWNrKFdURk1vdmUoKmVycm9yKSwgeyB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7CisgICAgICAgICAgICBjYWxsYmFjayhJREJF
cnJvciB7IFVua25vd25FcnJvciB9LCB7IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAgICAgICAgIHRoaXMtPm9wZW5DdXJzb3JBZnRlclF1b3RhQ2hlY2socmVxdWVzdERhdGEs
IGluZm8sIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9KTsKIH0KQEAgLTE1NTksMTYgKzE1ODMs
MjAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybU9wZW5DdXJzb3IodWludDY0
X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdAogICAgIHBlcmZvcm1HZXRSZXN1bHRDYWxsYmFj
ayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwogfQogCi12b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmIGRhdGEsIEdldFJlc3VsdENhbGxiYWNrIGNh
bGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvcihVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0YSwgR2V0UmVzdWx0Q2Fs
bGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0co
SW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjppdGVyYXRlQ3Vyc29yIik7CiAK
LSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihbdGhpcywgcmVxdWVzdERhdGEsIGRh
dGEsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewor
ICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFt0aGlzLCB0cmFuc2FjdGlvbiA9IG1h
a2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgcmVxdWVzdERhdGEsIGRhdGEsIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3Ip
IHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoKmVycm9yKSwgeyB9KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7CisgICAg
ICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9LCB7IH0pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHRoaXMtPml0ZXJhdGVDdXJzb3JBZnRl
clF1b3RhQ2hlY2socmVxdWVzdERhdGEsIGRhdGEsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggNjhhNWNlYTU2NDMxM2I1NmMwNjRmNWQz
YzMzMjQ5ZDVjODNmOWNmYS4uOTE4NWU4Yzc5MjI5MzUxYmYyM2U5MTI4OWIwMjM2YWMxMWM2Y2Y2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTg5LDEzICs4OSwxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3Qg
SURCSW5kZXhJbmZvJiwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCBkZWxldGVJbmRleChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXJyb3JDYWxsYmFjayk7CiAgICAgdm9pZCByZW5h
bWVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgbmV3
TmFtZSwgRXJyb3JDYWxsYmFjayk7Ci0gICAgdm9pZCBwdXRPckFkZChjb25zdCBJREJSZXF1ZXN0
RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1ZSYsIEluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2spOwotICAgIHZvaWQgZ2V0UmVj
b3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYsIEdldFJl
c3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGdldEFsbFJlY29yZHMoY29uc3QgSURCUmVxdWVzdERh
dGEmLCBjb25zdCBJREJHZXRBbGxSZWNvcmRzRGF0YSYsIEdldEFsbFJlc3VsdHNDYWxsYmFjayk7
Ci0gICAgdm9pZCBnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYsIENvdW50Q2FsbGJhY2spOwotICAgIHZvaWQgZGVsZXRlUmVjb3JkKGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXJyb3JDYWxsYmFjayk7Ci0g
ICAgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCQ3Vyc29y
SW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdldFJlc3VsdENh
bGxiYWNrKTsKKyAgICB2b2lkIHB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24m
LCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJWYWx1
ZSYsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBLZXlEYXRhQ2FsbGJhY2sp
OworICAgIHZvaWQgZ2V0UmVjb3JkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBjb25z
dCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERhdGEmLCBHZXRSZXN1bHRDYWxs
YmFjayk7CisgICAgdm9pZCBnZXRBbGxSZWNvcmRzKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiwg
R2V0QWxsUmVzdWx0c0NhbGxiYWNrKTsKKyAgICB2b2lkIGdldENvdW50KFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYsIENvdW50Q2FsbGJhY2spOworICAgIHZvaWQgZGVsZXRlUmVjb3JkKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYsIEVycm9yQ2FsbGJhY2spOworICAgIHZvaWQgb3BlbkN1cnNvcihVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJDdXJz
b3JJbmZvJiwgR2V0UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgaXRlcmF0ZUN1cnNvcihVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJJdGVyYXRlQ3Vyc29yRGF0YSYsIEdldFJlc3VsdENhbGxiYWNrKTsKICAgICB2b2lkIGNvbW1p
dFRyYW5zYWN0aW9uKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mLCBFcnJvckNhbGxiYWNr
KTsKIAogICAgIGVudW0gY2xhc3MgV2FpdEZvclBlbmRpbmdUYXNrcyB7IE5vLCBZZXMgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcAppbmRleCA4NTQwY2E3
ODZkNTczNThkOTgyYzczZTY0NjBmN2Y4ZjBhODgzNDU0Li5mMTFiOGVkMTI1ZGM1ZjMyYWQwZDQ5
NjdkMGRkMDdhMDc1YWRhOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24uY3BwCkBAIC03NSwxNCArNzUsMTUgQEAgSURCRGF0YWJhc2VJbmZvKiBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcmlnaW5hbERhdGFiYXNlSW5mbygpIGNvbnN0CiB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6YWJvcnQiKTsKLQotICAgIFJlZlB0
cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
IAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsK
ICAgICBBU1NFUlQoZGF0YWJhc2UpOwogCi0gICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24o
KnRoaXMsIFVuaXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMsIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+
YWJvcnRUcmFuc2FjdGlvbigqdGhpcywgVW5pcXVlSURCRGF0YWJhc2U6OldhaXRGb3JQZW5kaW5n
VGFza3M6OlllcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShjb25zdCBJ
REJFcnJvciYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmFib3J0IChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhp
cykKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+
ZGlkQWJvcnRUcmFuc2FjdGlvbigqdGhpcywgZXJyb3IpOwogICAgIH0pOwogfQpAQCAtMTA4LDE0
ICsxMDksMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21taXQoKQog
ewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjb21t
aXQiKTsKIAotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwotCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9u
LT5kYXRhYmFzZSgpOwogICAgIGlmICghZGF0YWJhc2UgfHwgZGF0YWJhc2UtPmhhcmRDbG9zZWRG
b3JVc2VyRGVsZXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRhdGFiYXNlLT5jb21taXRU
cmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHByb3RlY3RlZFRoaXNdKGNvbnN0IElEQkVycm9yJiBl
cnJvcikgeworICAgIGRhdGFiYXNlLT5jb21taXRUcmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAg
ICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNvbW1p
dCAoY2FsbGJhY2spIik7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1
cm47CisKICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZENvbW1pdFRyYW5zYWN0aW9u
KCp0aGlzLCBlcnJvcik7CiAgICAgfSk7CiB9CkBAIC0xMjcsMTMgKzEyOSwxNCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
cXVlc3REYXRhJiByZXF1ZQogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2Fj
dGlvbklkZW50aWZpZXIoKSk7CiAKLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogCi0gICAg
ZGF0YWJhc2UtPmNyZWF0ZU9iamVjdFN0b3JlKCp0aGlzLCBpbmZvLCBbdGhpcywgcHJvdGVjdGVk
VGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIGRhdGFiYXNl
LT5jcmVhdGVPYmplY3RTdG9yZSgqdGhpcywgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAgICAg
ICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVP
YmplY3RTdG9yZSAoY2FsbGJhY2spIik7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAg
bV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZENyZWF0ZU9iamVjdFN0b3JlKElEQlJlc3VsdERhdGE6
OmNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigp
KSk7CiAgICAgICAgIGVsc2UKQEAgLTE0NywxNCArMTUwLDE1IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVxdWVzdERhdGEm
IHJlcXVlCiAKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwogICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVu
dGlmaWVyKCkpOwotCi0gICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHBy
b3RlY3RlZFRoaXModGhpcyk7CiAgICAgCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAKLSAgICBkYXRh
YmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0b3JlTmFtZSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKKyAgICBk
YXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0b3JlTmFtZSwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJy
b3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZSAoY2FsbGJhY2spIik7CisgICAgICAgIGlmICgh
d2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGVycm9yLmlzTnVs
bCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZERlbGV0ZU9iamVjdFN0
b3JlKElEQlJlc3VsdERhdGE6OmRlbGV0ZU9iamVjdFN0b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5y
ZXF1ZXN0SWRlbnRpZmllcigpKSk7CiAgICAgICAgIGVsc2UKQEAgLTE2OSwxMyArMTczLDE0IEBA
IHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cmVuYW1lT2JqZWN0U3RvcmUoY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsK
ICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRh
LnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAKLSAgICBkYXRhYmFzZS0+cmVuYW1lT2JqZWN0U3RvcmUoKnRoaXMsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25z
dCBJREJFcnJvciYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+cmVuYW1lT2JqZWN0U3RvcmUoKnRo
aXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbmV3TmFtZSwgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAg
ICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5h
bWVPYmplY3RTdG9yZSAoY2FsbGJhY2spIik7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAg
ICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAg
ICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZFJlbmFtZU9iamVjdFN0b3JlKElEQlJlc3VsdERh
dGE6OnJlbmFtZU9iamVjdFN0b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmll
cigpKSk7CiAgICAgICAgIGVsc2UKQEAgLTE4OSwxMyArMTk0LDE0IEBAIHZvaWQgVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0
YSYgcmVxdWVzCiAKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09
IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAotICAgIFJlZlB0cjxVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCiAgICAgYXV0
byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VS
VChkYXRhYmFzZSk7CiAKLSAgICBkYXRhYmFzZS0+Y2xlYXJPYmplY3RTdG9yZSgqdGhpcywgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNv
bnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5jbGVhck9iamVjdFN0b3JlKCp0
aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RT
dG9yZSAoY2FsbGJhY2spIik7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmRpZENsZWFyT2JqZWN0U3RvcmUoSURCUmVzdWx0RGF0YTo6Y2xlYXJP
YmplY3RTdG9yZVN1Y2Nlc3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSkpOwogICAg
ICAgICBlbHNlCkBAIC0yMDksMTQgKzIxNSwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YQog
CiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlv
bkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigp
KTsKLQotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgIAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlv
bi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogCi0gICAgZGF0YWJhc2UtPmNy
ZWF0ZUluZGV4KCp0aGlzLCBpbmZvLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFd
KGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5jcmVhdGVJbmRleCgqdGhp
cywgaW5mbywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0
YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleCAoY2FsbGJhY2spIik7CisgICAg
ICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGVy
cm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRpZENyZWF0
ZUluZGV4KElEQlJlc3VsdERhdGE6OmNyZWF0ZUluZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1
ZXN0SWRlbnRpZmllcigpKSk7CiAgICAgICAgIGVsc2UKQEAgLTIzMSwxMyArMjM4LDE0IEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVx
dWVzdERhdGEmIHJlcXVlc3REYXRhCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKICAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCiAgICAgYXV0byBkYXRhYmFzZSA9IG1f
ZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAg
ICAgCi0gICAgZGF0YWJhc2UtPmRlbGV0ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGluZGV4TmFtZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVsZXRlSW5kZXgoKnRoaXMsIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyksIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IpIHsKICAgICAgICAg
TE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4
IChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVy
bjsKKwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGlkRGVsZXRlSW5kZXgoSURCUmVzdWx0RGF0YTo6ZGVsZXRlSW5kZXhTdWNj
ZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpKTsKICAgICAgICAgZWxzZQpAQCAt
MjUxLDE0ICsyNTksMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5h
bWVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEKIAogICAgIEFTU0VSVChp
c1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZp
ZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7Ci0KLSAgICBSZWZQ
dHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICAKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7
CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cmVuYW1lSW5kZXgo
KnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1lLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikg
eworICAgIGRhdGFiYXNlLT5yZW5hbWVJbmRleCgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKSwgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgewogICAgICAgICBM
T0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6cmVuYW1lSW5kZXgg
KGNhbGxiYWNrKSIpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kaWRSZW5hbWVJbmRleChJREJSZXN1bHREYXRhOjpyZW5hbWVJbmRleFN1Y2Nl
c3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSkpOwogICAgICAgICBlbHNlCkBAIC0y
NzMsMTQgKzI4MiwxNCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnB1dE9y
QWRkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgYwogCiAgICAgQVNTRVJUKCFp
c1JlYWRPbmx5KCkpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkg
PT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwotCi0gICAgUmVmUHRyPFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgCiAg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAg
IEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPnB1dE9yQWRkKHJlcXVlc3RE
YXRhLCBrZXlEYXRhLCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIGtl
eSkgeworICAgIGRhdGFiYXNlLT5wdXRPckFkZCgqdGhpcywgcmVxdWVzdERhdGEsIGtleURhdGEs
IHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEm
IGtleSkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6cHV0T3JBZGQgKGNhbGxiYWNrKSIpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAg
ICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5jb25uZWN0aW9uVG9DbGllbnQoKS5kaWRQdXRPckFk
ZChJREJSZXN1bHREYXRhOjpwdXRPckFkZFN1Y2Nlc3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50
aWZpZXIoKSwga2V5KSk7CkBAIC0yOTUsMTMgKzMwNCwxMyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEsCiAKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVl
c3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAotICAgIFJlZlB0cjxVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIAogICAgIGF1dG8g
ZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQo
ZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRSZWNvcmQocmVxdWVzdERhdGEsIGdl
dFJlY29yZERhdGEsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURC
RXJyb3ImIGVycm9yLCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNl
LT5nZXRSZWNvcmQoKnRoaXMsIHJlcXVlc3REYXRhLCBnZXRSZWNvcmREYXRhLCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYg
ZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQgKGNhbGxiYWNrKSIp
OworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5j
b25uZWN0aW9uVG9DbGllbnQoKS5kaWRHZXRSZWNvcmQoSURCUmVzdWx0RGF0YTo6Z2V0UmVjb3Jk
U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpLCByZXN1bHQpKTsKQEAgLTMx
NSwxNCArMzI0LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxs
UmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhCiAgICAgTE9HKEluZGV4ZWRE
QiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMiKTsKIAogICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJh
bnNhY3Rpb25JZGVudGlmaWVyKCkpOwotCi0gICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7
CiAgICAgCi0gICAgZGF0YWJhc2UtPmdldEFsbFJlY29yZHMocmVxdWVzdERhdGEsIGdldEFsbFJl
Y29yZHNEYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVy
cm9yJiBlcnJvciwgY29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFz
ZS0+Z2V0QWxsUmVjb3JkcygqdGhpcywgcmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShjb25zdCBJ
REJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldEFsbFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAg
IExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRBbGxSZWNv
cmRzIChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFi
YXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkR2V0QWxsUmVjb3JkcyhJREJS
ZXN1bHREYXRhOjpnZXRBbGxSZWNvcmRzU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRp
ZmllcigpLCByZXN1bHQpKTsKQEAgLTMzNiwxNCArMzQ1LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3RE
YXRhLCBjCiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OmdldENvdW50Iik7CiAKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigp
ID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKLQotICAgIFJlZlB0cjxV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIAog
ICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAg
ICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5nZXRDb3VudChyZXF1ZXN0
RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNv
bnN0IElEQkVycm9yJiBlcnJvciwgdWludDY0X3QgY291bnQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0
Q291bnQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwg
dWludDY0X3QgY291bnQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb246OmdldENvdW50IChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
CiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCku
ZGlkR2V0Q291bnQoSURCUmVzdWx0RGF0YTo6Z2V0Q291bnRTdWNjZXNzKHJlcXVlc3REYXRhLnJl
cXVlc3RJZGVudGlmaWVyKCksIGNvdW50KSk7CkBAIC0zNTcsMTQgKzM2NiwxNCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZChjb25zdCBJREJSZXF1ZXN0
RGF0YSYgcmVxdWVzdERhdAogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpkZWxldGVSZWNvcmQiKTsKIAogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5m
by5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwot
Ci0gICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CiAgICAgCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5k
YXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPmRl
bGV0ZVJlY29yZChyZXF1ZXN0RGF0YSwga2V5UmFuZ2VEYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhp
cywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5k
ZWxldGVSZWNvcmQoKnRoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBl
cnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6ZGVsZXRlUmVjb3JkIChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAg
ICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkRGVs
ZXRlUmVjb3JkKElEQlJlc3VsdERhdGE6OmRlbGV0ZVJlY29yZFN1Y2Nlc3MocmVxdWVzdERhdGEu
cmVxdWVzdElkZW50aWZpZXIoKSkpOwpAQCAtMzc4LDE0ICszODcsMTQgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiBy
ZXF1ZXN0RGF0YSwKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6b3BlbkN1cnNvciIpOwogCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50
aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7Ci0KLSAgICBS
ZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICAKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+b3BlbkN1cnNv
cihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShj
b25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAg
ZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBpbmZvLCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYg
ZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVk
REIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yIChjYWxsYmFjayki
KTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+
Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkT3BlbkN1cnNvcihJREJSZXN1bHREYXRhOjpvcGVuQ3Vy
c29yU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpLCByZXN1bHQpKTsKQEAg
LTM5OSwxNCArNDA4LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRl
cmF0ZUN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhCiAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IiKTsKIAog
ICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEu
dHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwotCi0gICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgCiAgICAgYXV0byBkYXRhYmFz
ZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFz
ZSk7CiAgICAgCi0gICAgZGF0YWJhc2UtPml0ZXJhdGVDdXJzb3IocmVxdWVzdERhdGEsIGRhdGEs
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9y
LCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCkgeworICAgIGRhdGFiYXNlLT5pdGVyYXRlQ3Vy
c29yKCp0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCBjb25zdCBJREJH
ZXRSZXN1bHQmIHJlc3VsdCkgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvciAoY2FsbGJhY2spIik7CisgICAgICAgIGlm
ICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKGVycm9yLmlz
TnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmNvbm5lY3Rpb25Ub0Ns
aWVudCgpLmRpZEl0ZXJhdGVDdXJzb3IoSURCUmVzdWx0RGF0YTo6aXRlcmF0ZUN1cnNvclN1Y2Nl
c3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSwgcmVzdWx0KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379373</attachid>
            <date>2019-09-23 09:12:38 -0700</date>
            <delta_ts>2019-09-24 14:11:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202074-20190923091237.patch</filename>
            <type>text/plain</type>
            <size>39542</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWIzOGE1OTBlOGVhYTg4
MzMwNTcxZTExNDE5YzAyNGFlNWRjZmY2My4uN2RlOTRjZGJmMjhlYmY2M2Q4NzljZjJhZDZlNjAz
NGYwYjQwYmQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE5LTA5LTIzICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgcmVmaW5nIFVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24gaW4gY2FsbGJhY2tzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIwNzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZnRlciBxdW90YSBjaGVjayBpcyBpbnRyb2R1
Y2VkIHRvIElEQiwgY2FsbGJhY2tzIHRoYXQgdGFrZSB0aGUgcmVmIG9mIFVuaXF1ZUlEQkRhdGFi
YXNlVHJhbnNhY3Rpb24gd2lsbCBiZSAKKyAgICAgICAgcGFzc2VkIHRvIFN0b3JhZ2VRdW90YU1h
bmFnZXIuIFRoaXMgY2FuIG1ha2UgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiBsaXZlIGxv
bmdlciB0aGFuIFVuaXF1ZUlEQkRhdGFiYXNlLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnJlcXVlc3RTcGFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjp3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxl
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpj
cmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlE
QkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpjbGVhck9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0
ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6
OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0
YWJhc2U6OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURC
RGF0YWJhc2U6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRBbGxSZWNvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OmdldENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0VHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
YWJvcnRUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjphYm9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmNvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5hbWVPYmpl
Y3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0
ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpwdXRPckFkZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246
OmdldEFsbFJlY29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5D
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKToKKwogMjAxOS0wOS0yMSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSB1c2Ugb2YgU2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCkgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBj
NWQ3YTk4MmQ3MDE2YTYzYTE4ZWZkZjFiOGQ1MzI3OTFkODUzY2Q3Li5kODViMDAxNDhhMmE1YzMw
NjBiYTUwYzBlMTIyMDc1YzYzNWJiYzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAg
LTE3NCwxNCArMTc0LDE4IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHF1b3RhRXJyb3JNZXNzYWdl
TmFtZShjb25zdCBjaGFyKiB0YXNrTmFtZSkKICAgICByZXR1cm4gbWFrZVN0cmluZygiRmFpbGVk
IHRvICIsIHRhc2tOYW1lLCAiIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm90IGVub3VnaCBzcGFjZSBm
b3IgZG9tYWluIik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlcXVlc3RTcGFjZSh1
aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogdGFza05hbWUsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cmVxdWVzdFNwYWNlKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCB1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogdGFza05hbWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYpPiYmIGNhbGxiYWNrKQogewotICAg
IG1fc2VydmVyLT5yZXF1ZXN0U3BhY2UobV9pZGVudGlmaWVyLm9yaWdpbigpLCB0YXNrU2l6ZSwg
W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIodGhpcyksIHRoaXMsIHRhc2tOYW1lLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKKyAgICBtX3NlcnZl
ci0+cmVxdWVzdFNwYWNlKG1faWRlbnRpZmllci5vcmlnaW4oKSwgdGFza1NpemUsIFt3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpLCB0aGlzLCB3ZWFrVHJhbnNhY3Rpb24gPSBtYWtlV2Vha1B0
cih0cmFuc2FjdGlvbiksIHRhc2tOYW1lLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShh
dXRvIGRlY2lzaW9uKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykgewogICAgICAg
ICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoIXdlYWtUcmFuc2FjdGlvbikgeworICAg
ICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3duRXJyb3IgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKG1fb3duaW5nUG9pbnRlckZvckNsb3Nl
KSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgY2xvc2luZyB0aGUgZGF0YWJhc2UsIHRoZXJlIGlz
IG5vIHBvaW50IGluIHRyeWluZyB0byBtb2RpZnkgdGhlIGRhdGFiYXNlIGF0IHRoYXQgcG9pbnQu
CiAgICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJvciB9KTsKQEAgLTE5
OCw5ICsyMDIsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpyZXF1ZXN0U3BhY2UodWludDY0
X3QgdGFza1NpemUsIGNvbnN0IGNoYXIqIHRhc2tOYW1lLCBDbwogICAgIH0pOwogfQogCi12b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjp3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJiBjYWxsYmFjaykKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OndhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAgICByZXF1ZXN0U3BhY2Uo
MCwgIiIsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24s
IDAsICIiLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OnBlcmZvcm1DdXJyZW50T3Blbk9wZXJhdGlvbigpCkBAIC04MjEsMTYgKzgyNSwxMiBAQCB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdAogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7CiAKICAgICBhdXRvIHRhc2tTaXplID0gZGVm
YXVsdFdyaXRlT3BlcmF0aW9uQ29zdCArIGVzdGltYXRlU2l6ZShpbmZvKTsKLSAgICByZXF1ZXN0
U3BhY2UodGFza1NpemUsICJjcmVhdGVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgdHJh
bnNhY3Rpb24gPSBtYWtlV2Vha1B0cih0cmFuc2FjdGlvbiksIGluZm8sIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHJlcXVlc3RTcGFjZSh0
cmFuc2FjdGlvbiwgdGFza1NpemUsICJjcmVhdGVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6
ZSwgJnRyYW5zYWN0aW9uLCBpbmZvLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRv
IGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBjYWxs
YmFjayhXVEZNb3ZlKCplcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICghdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9y
IHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMtPmNyZWF0ZU9iamVjdFN0b3JlQWZ0ZXJRdW90YUNoZWNrKHRhc2tTaXplLCAqdHJh
bnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAgdGhpcy0+Y3JlYXRl
T2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsIHRyYW5zYWN0aW9uLCBpbmZvLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfSk7CiB9CiAKQEAgLTg3MSwxNiArODcxLDEyIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBM
T0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9y
ZSIpOwogCi0gICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24oW3RoaXMsIHRyYW5zYWN0
aW9uID0gbWFrZVdlYWtQdHIodHJhbnNhY3Rpb24pLCBvYmplY3RTdG9yZU5hbWUsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZU5hbWUsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3Ip
IG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdU
Rk1vdmUoKmVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKCF0cmFuc2FjdGlvbikgewotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhp
cy0+ZGVsZXRlT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2soKnRyYW5zYWN0aW9uLCBvYmplY3RT
dG9yZU5hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAgdGhpcy0+ZGVsZXRlT2JqZWN0
U3RvcmVBZnRlclF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTmFtZSwgV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIH0pOwogfQogCkBAIC05MjgsMTYgKzkyNCwxMiBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpyZW5hbWVPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdAogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0
YWJhc2U6OnJlbmFtZU9iamVjdFN0b3JlIik7CiAKICAgICBhdXRvIHRhc2tTaXplID0gZGVmYXVs
dFdyaXRlT3BlcmF0aW9uQ29zdCArIG5ld05hbWUuc2l6ZUluQnl0ZXMoKTsKLSAgICByZXF1ZXN0
U3BhY2UodGFza1NpemUsICJyZW5hbWVPYmplY3RTdG9yZSIsIFt0aGlzLCB0YXNrU2l6ZSwgdHJh
bnNhY3Rpb24gPSBtYWtlV2Vha1B0cih0cmFuc2FjdGlvbiksIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgbmV3TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0
YWJsZSB7CisgICAgcmVxdWVzdFNwYWNlKHRyYW5zYWN0aW9uLCB0YXNrU2l6ZSwgInJlbmFtZU9i
amVjdFN0b3JlIiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbmV3TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJv
cikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgY2FsbGJhY2so
V1RGTW92ZSgqZXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpZiAoIXRyYW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVu
a25vd25FcnJvciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0
aGlzLT5yZW5hbWVPYmplY3RTdG9yZUFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgKnRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2FsbGJhY2spKTsK
KyAgICAgICAgdGhpcy0+cmVuYW1lT2JqZWN0U3RvcmVBZnRlclF1b3RhQ2hlY2sodGFza1NpemUs
IHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIFdURk1vdmUoY2Fs
bGJhY2spKTsKICAgICB9KTsKIH0KIApAQCAtOTg0LDE2ICs5NzYsMTIgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
JiB0cmFuc2FjdGkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmNsZWFyT2JqZWN0U3RvcmUiKTsKIAotICAg
IHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFt0aGlzLCB0cmFuc2FjdGlvbiA9IG1ha2VX
ZWFrUHRyKHRyYW5zYWN0aW9uKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKKyAgICB3YWl0Rm9yUmVxdWVz
dFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9y
KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhX
VEZNb3ZlKCplcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGlmICghdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5r
bm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMtPmNsZWFyT2JqZWN0U3RvcmVBZmV0UXVvdGFDaGVjaygqdHJhbnNhY3Rpb24sIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICB0aGlzLT5jbGVhck9i
amVjdFN0b3JlQWZldFF1b3RhQ2hlY2sodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0pOwogfQogCkBAIC0xMDMxLDE2ICsxMDE5LDEy
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBV
bmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgiKTsKIAogICAgIGF1dG8gdGFza1NpemUgPSBk
ZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGluZm8pOwotICAgIHJlcXVl
c3RTcGFjZSh0YXNrU2l6ZSwgImNyZWF0ZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCB0cmFuc2Fj
dGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CisgICAgcmVxdWVzdFNwYWNlKHRyYW5z
YWN0aW9uLCB0YXNrU2l6ZSwgImNyZWF0ZUluZGV4IiwgW3RoaXMsIHRhc2tTaXplLCAmdHJhbnNh
Y3Rpb24sIGluZm8sIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11
dGFibGUgewogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKFdURk1v
dmUoKmVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KCF0cmFuc2FjdGlvbikgewotICAgICAgICAgICAgY2FsbGJhY2soSURCRXJyb3IgeyBVbmtub3du
RXJyb3IgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy0+
Y3JlYXRlSW5kZXhBZnRlclF1b3RhQ2hlY2sodGFza1NpemUsICp0cmFuc2FjdGlvbiwgaW5mbywg
V1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICB0aGlzLT5jcmVhdGVJbmRleEFmdGVyUXVvdGFD
aGVjayh0YXNrU2l6ZSwgdHJhbnNhY3Rpb24sIGluZm8sIFdURk1vdmUoY2FsbGJhY2spKTsKICAg
ICB9KTsKIH0KIApAQCAtMTA5MCwxNiArMTA3NCwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkZWxldGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
dQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWREQiwgIihtYWlu
KSBVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlSW5kZXgiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0
U3BhY2VDb21wbGV0aW9uKFt0aGlzLCB0cmFuc2FjdGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0
aW9uKSwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHdhaXRGb3JSZXF1ZXN0U3Bh
Y2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZSgqZXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBpZiAoIXRyYW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJv
ciB7IFVua25vd25FcnJvciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLT5kZWxldGVJbmRleEFmdGVyUXVvdGFDaGVjaygqdHJhbnNhY3Rpb24sIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgaW5kZXhOYW1lLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgICAg
IHRoaXMtPmRlbGV0ZUluZGV4QWZ0ZXJRdW90YUNoZWNrKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4TmFtZSwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0pOwogfQog
CkBAIC0xMTU2LDE2ICsxMTM2LDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnJlbmFtZUlu
ZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1CiAgICAgTE9H
KEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cmVuYW1lSW5kZXgiKTsKIAog
ICAgIGF1dG8gdGFza1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgbmV3TmFtZS5z
aXplSW5CeXRlcygpOwotICAgIHJlcXVlc3RTcGFjZSh0YXNrU2l6ZSwgInJlbmFtZUluZGV4Iiwg
W3RoaXMsIHRhc2tTaXplLCB0cmFuc2FjdGlvbiA9IG1ha2VXZWFrUHRyKHRyYW5zYWN0aW9uKSwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHJlcXVlc3RT
cGFjZSh0cmFuc2FjdGlvbiwgdGFza1NpemUsICJyZW5hbWVJbmRleCIsIFt0aGlzLCB0YXNrU2l6
ZSwgJnRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwg
bmV3TmFtZSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJs
ZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZSgq
ZXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoIXRy
YW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhJREJFcnJvciB7IFVua25vd25FcnJv
ciB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLT5yZW5h
bWVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgKnRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgbmV3TmFtZSwgV1RGTW92ZShjYWxsYmFjaykp
OworICAgICAgICB0aGlzLT5yZW5hbWVJbmRleEFmdGVyUXVvdGFDaGVjayh0YXNrU2l6ZSwgdHJh
bnNhY3Rpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBuZXdOYW1l
LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfSk7CiB9CiAKQEAgLTEyMjAsMTMgKzExOTYsMTMg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVJlbmFtZUluZGV4KHVpbnQ2NF90
IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cHV0
T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJLZXlEYXRh
JiBrZXlEYXRhLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVP
dmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIEtleURhdGFDYWxsYmFjayBjYWxsYmFjaykKK3Zv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OnB1dE9yQWRkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpP
YmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrIGNh
bGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6cHV0T3JBZGQiKTsKIAogICAgIGF1dG8gdGFz
a1NpemUgPSBkZWZhdWx0V3JpdGVPcGVyYXRpb25Db3N0ICsgZXN0aW1hdGVTaXplKGtleURhdGEp
ICsgZXN0aW1hdGVTaXplKHZhbHVlKTsKLSAgICByZXF1ZXN0U3BhY2UodGFza1NpemUsICJwdXRP
ckFkZCIsIFt0aGlzLCB0YXNrU2l6ZSwgcmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBvdmVyd3JpdGVNb2RlXShhdXRvIGVycm9yKSBtdXRh
YmxlIHsKKyAgICByZXF1ZXN0U3BhY2UodHJhbnNhY3Rpb24sIHRhc2tTaXplLCAicHV0T3JBZGQi
LCBbdGhpcywgdGFza1NpemUsIHJlcXVlc3REYXRhLCBrZXlEYXRhLCB2YWx1ZSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgb3ZlcndyaXRlTW9kZV0oYXV0byBlcnJvcikgbXV0YWJsZSB7
CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZSgqZXJy
b3IpLCB7IH0pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTMzMCwxMiArMTMwNiwxMiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJh
Y2tJZGVudGlmaWVyLCBjb25zdCBJRAogICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJhY2soY2FsbGJh
Y2tJZGVudGlmaWVyLCBlcnJvciwgcmVzdWx0S2V5KTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwgY29uc3Qg
SURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJh
Y2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQoVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0
YSwgY29uc3QgSURCR2V0UmVjb3JkRGF0YSYgZ2V0UmVjb3JkRGF0YSwgR2V0UmVzdWx0Q2FsbGJh
Y2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBMT0coSW5k
ZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmQiKTsKIAotICAgIHdh
aXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFt0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0UmVjb3Jk
RGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7
CisgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJhbnNhY3Rpb24sIFt0aGlzLCBy
ZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
YXV0byBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZSgqZXJyb3IpLCB7IH0pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTM1NiwxMiArMTMzMiwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRBZnRl
clF1b3RhQ2hlY2soY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYQogICAgICAgICBwb3N0
RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFi
YXNlOjpwZXJmb3JtR2V0UmVjb3JkLCBjYWxsYmFja0lELCByZXF1ZXN0RGF0YS50cmFuc2FjdGlv
bklkZW50aWZpZXIoKSwgcmVxdWVzdERhdGEub2JqZWN0U3RvcmVJZGVudGlmaWVyKCksIGdldFJl
Y29yZERhdGEua2V5UmFuZ2VEYXRhLCBnZXRSZWNvcmREYXRhLnR5cGUpKTsKIH0KIAotdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Z2V0QWxsUmVjb3Jkcyhjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVx
dWVzdERhdGEsIGNvbnN0IElEQkdldEFsbFJlY29yZHNEYXRhJiBnZXRBbGxSZWNvcmRzRGF0YSwg
R2V0QWxsUmVzdWx0c0NhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
Z2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
Y29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJHZXRBbGxSZWNvcmRz
RGF0YSYgZ2V0QWxsUmVjb3Jkc0RhdGEsIEdldEFsbFJlc3VsdHNDYWxsYmFjayBjYWxsYmFjaykK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6OmdldEFsbFJlY29yZHMiKTsKIAotICAgIHdhaXRGb3JSZXF1
ZXN0U3BhY2VDb21wbGV0aW9uKFt0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0QWxsUmVjb3Jkc0RhdGEs
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAg
IHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVz
dERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShh
dXRvIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKCplcnJvciksIHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
NDM0LDEyICsxNDEwLDEyIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRB
bGxSZWNvcmRzKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uCiAgICAgcGVyZm9ybUdl
dEFsbFJlc3VsdHNDYWxsYmFjayhjYWxsYmFja0lkZW50aWZpZXIsIGVycm9yLCByZXN1bHQpOwog
fQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChjb25zdCBJREJSZXF1ZXN0RGF0
YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIENvdW50Q2FsbGJh
Y2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRDb3VudChVbmlxdWVJREJE
YXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJl
cXVlc3REYXRhLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBDb3VudENhbGxiYWNrIGNh
bGxiYWNrKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6Z2V0Q291bnQiKTsKIAotICAgIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFt0aGlzLCByZXF1ZXN0RGF0YSwgcmFuZ2UsIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHdhaXRGb3JS
ZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEsIHJh
bmdlLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsK
ICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKCplcnJv
ciksIHsgfSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDc4LDEyICsxNDU0LDEyIEBAIHZv
aWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1HZXRDb3VudCh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIsIGNvbnN0IElECiAgICAgcGVyZm9ybUNvdW50Q2FsbGJhY2soY2FsbGJhY2tJ
ZGVudGlmaWVyLCBlcnJvciwgY291bnQpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
ZWxldGVSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykKK3ZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgRXJyb3JDYWxsYmFjayBjYWxsYmFjaykK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFp
bikgVW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJlY29yZCIpOwogCi0gICAgd2FpdEZvclJlcXVl
c3RTcGFjZUNvbXBsZXRpb24oW3RoaXMsIHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHdhaXRG
b3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgcmVxdWVzdERhdGEs
IGtleVJhbmdlRGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byBlcnJvcikg
bXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgY2FsbGJhY2soV1RG
TW92ZSgqZXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MTgsMTIgKzE0OTQsMTIg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybURlbGV0ZVJlY29yZCh1aW50NjRf
dCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnMKICAgICBwZXJmb3JtRXJyb3JDYWxsYmFjayhjYWxs
YmFja0lkZW50aWZpZXIsIGVycm9yKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkN1cnNv
ckluZm8mIGluZm8sIEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQordm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6b3BlbkN1cnNvcihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJDdXJzb3JJ
bmZvJiBpbmZvLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6Om9wZW5DdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFt0
aGlzLCByZXF1ZXN0RGF0YSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0
byBlcnJvcikgbXV0YWJsZSB7CisgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24odHJh
bnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgaW5mbywgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewogICAg
ICAgICAgICAgY2FsbGJhY2soV1RGTW92ZSgqZXJyb3IpLCB7IH0pOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTU1OSwxMiArMTUzNSwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQ
ZXJmb3JtT3BlbkN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0CiAgICAg
cGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGNhbGxiYWNrSWRlbnRpZmllciwgZXJyb3IsIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURC
UmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjb25zdCBJREJJdGVyYXRlQ3Vyc29yRGF0YSYgZGF0
YSwgR2V0UmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2spCit2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpp
dGVyYXRlQ3Vyc29yKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGNvbnN0IElEQkl0ZXJhdGVDdXJzb3JE
YXRhJiBkYXRhLCBHZXRSZXN1bHRDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJh
c2U6Oml0ZXJhdGVDdXJzb3IiKTsKIAotICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9u
KFt0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0o
YXV0byBlcnJvcikgbXV0YWJsZSB7CisgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNvbXBsZXRpb24o
dHJhbnNhY3Rpb24sIFt0aGlzLCByZXF1ZXN0RGF0YSwgZGF0YSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oYXV0byBlcnJvcikgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvcikgewog
ICAgICAgICAgICAgY2FsbGJhY2soV1RGTW92ZSgqZXJyb3IpLCB7IH0pOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTYzOCwxNiArMTYxNCwxMiBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpj
b21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFuc2FjdAog
CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigpLmRhdGFiYXNlKCkg
PT0gdGhpcyk7CiAKLSAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihbdGhpcywgdHJh
bnNhY3Rpb24gPSBtYWtlV2Vha1B0cih0cmFuc2FjdGlvbiksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKGF1dG8gZXJyb3IpIG11dGFibGUgeworICAgIHdhaXRGb3JSZXF1ZXN0U3BhY2VD
b21wbGV0aW9uKHRyYW5zYWN0aW9uLCBbdGhpcywgJnRyYW5zYWN0aW9uLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShhdXRvIGVycm9yKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGVycm9y
KSB7CiAgICAgICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKCplcnJvcikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghdHJhbnNhY3Rpb24pIHsKLSAgICAgICAg
ICAgIGNhbGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMtPmNvbW1pdFRyYW5zYWN0aW9uQWZ0ZXJRdW90
YUNoZWNrKCp0cmFuc2FjdGlvbiwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICB0aGlzLT5j
b21taXRUcmFuc2FjdGlvbkFmdGVyUXVvdGFDaGVjayh0cmFuc2FjdGlvbiwgV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIH0pOwogfQogCkBAIC0xNzE0LDE2ICsxNjg2LDEyIEBAIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OmFib3J0VHJhbnNhY3Rpb24oVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3RpCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmRhdGFiYXNlQ29ubmVjdGlvbigp
LmRhdGFiYXNlKCkgPT0gdGhpcyk7CiAKICAgICBpZiAod2FpdEZvclBlbmRpbmdUYXNrcyA9PSBX
YWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMpIHsKLSAgICAgICAgd2FpdEZvclJlcXVlc3RTcGFjZUNv
bXBsZXRpb24oW3RoaXMsIHRyYW5zYWN0aW9uID0gbWFrZVdlYWtQdHIodHJhbnNhY3Rpb24pLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShhdXRvJiYgZXJyb3IpIG11dGFibGUgeworICAg
ICAgICB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbih0cmFuc2FjdGlvbiwgW3RoaXMsICZ0
cmFuc2FjdGlvbiwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oYXV0byYmIGVycm9yKSBt
dXRhYmxlIHsKICAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgICAgIGNhbGxi
YWNrKFdURk1vdmUoKmVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbikgewotICAgICAgICAgICAgICAgIGNh
bGxiYWNrKElEQkVycm9yIHsgVW5rbm93bkVycm9yIH0pOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMtPmFib3J0VHJhbnNhY3Rpb24oKnRy
YW5zYWN0aW9uLCBXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpObywgV1RGTW92ZShjYWxsYmFjaykpOwor
ICAgICAgICAgICAgdGhpcy0+YWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgV2FpdEZvclBl
bmRpbmdUYXNrczo6Tm8sIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICAgICAgfSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IDY4YTVjZWE1NjQzMTNi
NTZjMDY0ZjVkM2MzMzI0OWQ1YzgzZjljZmEuLjUzYjIxZGZlNGQyMWRhNTVmZmNhNmYwNmZiMDZi
MjI3NWMxZWNmOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC04OSwxMyArODksMTMgQEAg
cHVibGljOgogICAgIHZvaWQgY3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEVycm9yQ2FsbGJhY2spOwogICAgIHZvaWQgZGVsZXRl
SW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEVycm9yQ2FsbGJhY2spOwogICAg
IHZvaWQgcmVuYW1lSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5ld05hbWUsIEVycm9yQ2FsbGJhY2spOwotICAgIHZvaWQgcHV0T3JBZGQoY29uc3Qg
SURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCVmFsdWUmLCBJbmRl
eGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0YUNhbGxiYWNrKTsKLSAgICB2
b2lkIGdldFJlY29yZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQkdldFJlY29yZERh
dGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBnZXRBbGxSZWNvcmRzKGNvbnN0IElE
QlJlcXVlc3REYXRhJiwgY29uc3QgSURCR2V0QWxsUmVjb3Jkc0RhdGEmLCBHZXRBbGxSZXN1bHRz
Q2FsbGJhY2spOwotICAgIHZvaWQgZ2V0Q291bnQoY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKLSAgICB2b2lkIGRlbGV0ZVJlY29y
ZChjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEVycm9yQ2Fs
bGJhY2spOwotICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBJREJSZXF1ZXN0RGF0YSYsIGNvbnN0
IElEQkN1cnNvckluZm8mLCBHZXRSZXN1bHRDYWxsYmFjayk7Ci0gICAgdm9pZCBpdGVyYXRlQ3Vy
c29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBH
ZXRSZXN1bHRDYWxsYmFjayk7CisgICAgdm9pZCBwdXRPckFkZChVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgY29u
c3QgSURCVmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgS2V5RGF0
YUNhbGxiYWNrKTsKKyAgICB2b2lkIGdldFJlY29yZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRSZWNvcmREYXRhJiwgR2V0
UmVzdWx0Q2FsbGJhY2spOworICAgIHZvaWQgZ2V0QWxsUmVjb3JkcyhVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJREJHZXRBbGxSZWNv
cmRzRGF0YSYsIEdldEFsbFJlc3VsdHNDYWxsYmFjayk7CisgICAgdm9pZCBnZXRDb3VudChVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmLCBDb3VudENhbGxiYWNrKTsKKyAgICB2b2lkIGRlbGV0ZVJlY29yZChV
bmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgY29uc3QgSURCUmVxdWVzdERhdGEmLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmLCBFcnJvckNhbGxiYWNrKTsKKyAgICB2b2lkIG9wZW5DdXJzb3Io
VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRhJiwgY29u
c3QgSURCQ3Vyc29ySW5mbyYsIEdldFJlc3VsdENhbGxiYWNrKTsKKyAgICB2b2lkIGl0ZXJhdGVD
dXJzb3IoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIGNvbnN0IElEQlJlcXVlc3REYXRh
JiwgY29uc3QgSURCSXRlcmF0ZUN1cnNvckRhdGEmLCBHZXRSZXN1bHRDYWxsYmFjayk7CiAgICAg
dm9pZCBjb21taXRUcmFuc2FjdGlvbihVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiwgRXJy
b3JDYWxsYmFjayk7CiAKICAgICBlbnVtIGNsYXNzIFdhaXRGb3JQZW5kaW5nVGFza3MgeyBObywg
WWVzIH07CkBAIC0yNDcsOCArMjQ3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG1heWJlRmluaXNo
SGFyZENsb3NlKCk7CiAgICAgYm9vbCBpc0RvbmVXaXRoSGFyZENsb3NlKCk7CiAKLSAgICB2b2lk
IHJlcXVlc3RTcGFjZSh1aW50NjRfdCB0YXNrU2l6ZSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7Ci0gICAg
dm9pZCB3YWl0Rm9yUmVxdWVzdFNwYWNlQ29tcGxldGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KE9wdGlvbmFsPElEQkVycm9yPiYmKT4mJik7CisgICAgdm9pZCByZXF1ZXN0U3BhY2UoVW5pcXVl
SURCRGF0YWJhc2VUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SURCRXJyb3I+JiYp
PiYmKTsKKyAgICB2b2lkIHdhaXRGb3JSZXF1ZXN0U3BhY2VDb21wbGV0aW9uKFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPElEQkVy
cm9yPiYmKT4mJik7CiAgICAgdm9pZCB1cGRhdGVTcGFjZVVzZWRJZk5lZWRlZChPcHRpb25hbDx1
aW50NjRfdD4gb3B0aW9uYWxDYWxsYmFja0lkZW50aWZpZXIgPSBXVEY6Om51bGxvcHQpOwogCiAg
ICAgUmVmPElEQlNlcnZlcj4gbV9zZXJ2ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbi5jcHAKaW5kZXggODU0MGNhNzg2ZDU3MzU4ZDk4MmM3M2U2NDYwZjdmOGYw
YTg4MzQ1NC4uYThkMmJkYzc0MGM4OTcxYTVhN2MwNGU3NmMwMzI5YjQ3NmFkYzQyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmNwcApAQCAtNzUsMTQgKzc1
LDE1IEBAIElEQkRhdGFiYXNlSW5mbyogVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6b3Jp
Z2luYWxEYXRhYmFzZUluZm8oKSBjb25zdAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0
aW9uOjphYm9ydCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb246OmFib3J0Iik7Ci0KLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAKICAgICBhdXRvIGRhdGFiYXNlID0gbV9k
YXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKIAot
ICAgIGRhdGFiYXNlLT5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzLCBVbmlxdWVJREJEYXRhYmFzZTo6
V2FpdEZvclBlbmRpbmdUYXNrczo6WWVzLCBbdGhpcywgcHJvdGVjdGVkVGhpc10oY29uc3QgSURC
RXJyb3ImIGVycm9yKSB7CisgICAgZGF0YWJhc2UtPmFib3J0VHJhbnNhY3Rpb24oKnRoaXMsIFVu
aXF1ZUlEQkRhdGFiYXNlOjpXYWl0Rm9yUGVuZGluZ1Rhc2tzOjpZZXMsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oYXV0byYgZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4
ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmFib3J0IChjYWxsYmFjaykiKTsK
KyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBt
X2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkQWJvcnRUcmFuc2FjdGlvbigqdGhpcywgZXJyb3IpOwog
ICAgIH0pOwogfQpAQCAtMTA4LDE0ICsxMDksMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uOjpjb21taXQoKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uOjpjb21taXQiKTsKIAotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCiAgICAgYXV0byBkYXRhYmFzZSA9
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIGlmICghZGF0YWJhc2UgfHwg
ZGF0YWJhc2UtPmhhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGRhdGFiYXNlLT5jb21taXRUcmFuc2FjdGlvbigqdGhpcywgW3RoaXMsIHByb3RlY3RlZFRo
aXNdKGNvbnN0IElEQkVycm9yJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5jb21taXRUcmFuc2Fj
dGlvbigqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXShhdXRvJiBl
cnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbjo6Y29tbWl0IChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAg
ICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkQ29tbWl0
VHJhbnNhY3Rpb24oKnRoaXMsIGVycm9yKTsKICAgICB9KTsKIH0KQEAgLTEyNywxMyArMTI5LDE0
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgp
KTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCiAgICAgYXV0byBkYXRhYmFz
ZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFz
ZSk7CiAKLSAgICBkYXRhYmFzZS0+Y3JlYXRlT2JqZWN0U3RvcmUoKnRoaXMsIGluZm8sIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7Cisg
ICAgZGF0YWJhc2UtPmNyZWF0ZU9iamVjdFN0b3JlKCp0aGlzLCBpbmZvLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvcikgewogICAg
ICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRl
T2JqZWN0U3RvcmUgKGNhbGxiYWNrKSIpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAg
ICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgICAg
IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kaWRDcmVhdGVPYmplY3RTdG9yZShJREJSZXN1bHREYXRh
OjpjcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIo
KSkpOwogICAgICAgICBlbHNlCkBAIC0xNDcsMTQgKzE1MCwxNSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlcXVlc3REYXRh
JiByZXF1ZQogCiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKICAgICBBU1NFUlQobV90
cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRyYW5zYWN0aW9uSWRl
bnRpZmllcigpKTsKLQotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIAogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNl
Q29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogCi0gICAgZGF0
YWJhc2UtPmRlbGV0ZU9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZU5hbWUsIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CisgICAg
ZGF0YWJhc2UtPmRlbGV0ZU9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZU5hbWUsIFt0aGlz
LCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVy
cm9yJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUgKGNhbGxiYWNrKSIpOworICAgICAgICBpZiAo
IXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChlcnJvci5pc051
bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kaWREZWxldGVPYmplY3RT
dG9yZShJREJSZXN1bHREYXRhOjpkZWxldGVPYmplY3RTdG9yZVN1Y2Nlc3MocmVxdWVzdERhdGEu
cmVxdWVzdElkZW50aWZpZXIoKSkpOwogICAgICAgICBlbHNlCkBAIC0xNjksMTMgKzE3MywxNCBA
QCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OnJlbmFtZU9iamVjdFN0b3JlKGNv
bnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZQogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7
CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0
YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJh
c2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQogICAgIGF1dG8gZGF0YWJhc2Ug
PSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2Up
OwogCi0gICAgZGF0YWJhc2UtPnJlbmFtZU9iamVjdFN0b3JlKCp0aGlzLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIG5ld05hbWUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29u
c3QgSURCRXJyb3ImIGVycm9yKSB7CisgICAgZGF0YWJhc2UtPnJlbmFtZU9iamVjdFN0b3JlKCp0
aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIG5ld05hbWUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExP
RyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5hbWVPYmplY3RT
dG9yZSAoY2FsbGJhY2spIik7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRh
YmFzZUNvbm5lY3Rpb24tPmRpZFJlbmFtZU9iamVjdFN0b3JlKElEQlJlc3VsdERhdGE6OnJlbmFt
ZU9iamVjdFN0b3JlU3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7CiAg
ICAgICAgIGVsc2UKQEAgLTE4OSwxMyArMTk0LDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VU
cmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVz
CiAKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3RE
YXRhLnRyYW5zYWN0aW9uSWRlbnRpZmllcigpKTsKIAotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRh
YmFzZVRyYW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCiAgICAgYXV0byBkYXRhYmFz
ZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFz
ZSk7CiAKLSAgICBkYXRhYmFzZS0+Y2xlYXJPYmplY3RTdG9yZSgqdGhpcywgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVy
cm9yJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5jbGVhck9iamVjdFN0b3JlKCp0aGlzLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
cmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlx
dWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlIChjYWxsYmFjaykiKTsK
KyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBp
ZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlk
Q2xlYXJPYmplY3RTdG9yZShJREJSZXN1bHREYXRhOjpjbGVhck9iamVjdFN0b3JlU3VjY2Vzcyhy
ZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7CiAgICAgICAgIGVsc2UKQEAgLTIwOSwx
NCArMjE1LDE1IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3JlYXRlSW5k
ZXgoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhCiAKICAgICBBU1NFUlQoaXNWZXJz
aW9uQ2hhbmdlKCkpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkg
PT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVudGlmaWVyKCkpOwotCi0gICAgUmVmUHRyPFVu
aXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgCiAg
ICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAg
IEFTU0VSVChkYXRhYmFzZSk7CiAKLSAgICBkYXRhYmFzZS0+Y3JlYXRlSW5kZXgoKnRoaXMsIGlu
Zm8sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVy
cm9yKSB7CisgICAgZGF0YWJhc2UtPmNyZWF0ZUluZGV4KCp0aGlzLCBpbmZvLCBbdGhpcywgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvcikgewog
ICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Y3Jl
YXRlSW5kZXggKGNhbGxiYWNrKSIpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgICAgIG1f
ZGF0YWJhc2VDb25uZWN0aW9uLT5kaWRDcmVhdGVJbmRleChJREJSZXN1bHREYXRhOjpjcmVhdGVJ
bmRleFN1Y2Nlc3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSkpOwogICAgICAgICBl
bHNlCkBAIC0yMzEsMTMgKzIzOCwxNCBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YQogICAgIEFT
U0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlk
ZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKLSAg
ICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKLQogICAgIGF1dG8gZGF0YWJhc2UgPSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2Uo
KTsKICAgICBBU1NFUlQoZGF0YWJhc2UpOwogICAgIAotICAgIGRhdGFiYXNlLT5kZWxldGVJbmRl
eCgqdGhpcywgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yKSB7CisgICAgZGF0YWJh
c2UtPmRlbGV0ZUluZGV4KCp0aGlzLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSwg
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYg
ZXJyb3IpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb246OmNyZWF0ZUluZGV4IChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAg
ICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGlkRGVsZXRlSW5kZXgoSURCUmVzdWx0RGF0
YTo6ZGVsZXRlSW5kZXhTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCkpKTsK
ICAgICAgICAgZWxzZQpAQCAtMjUxLDE0ICsyNTksMTUgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpyZW5hbWVJbmRleChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERh
dGEKIAogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CiAgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZp
ZXIoKSk7Ci0KLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKICAgICAKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRh
YmFzZS0+cmVuYW1lSW5kZXgoKnRoaXMsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVu
dGlmaWVyLCBuZXdOYW1lLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0
IElEQkVycm9yJiBlcnJvcikgeworICAgIGRhdGFiYXNlLT5yZW5hbWVJbmRleCgqdGhpcywgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleElkZW50aWZpZXIsIG5ld05hbWUsIFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yKSB7CiAg
ICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpyZW5h
bWVJbmRleCAoY2FsbGJhY2spIik7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAg
ICByZXR1cm47CisKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9k
YXRhYmFzZUNvbm5lY3Rpb24tPmRpZFJlbmFtZUluZGV4KElEQlJlc3VsdERhdGE6OnJlbmFtZUlu
ZGV4U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpKSk7CiAgICAgICAgIGVs
c2UKQEAgLTI3MywxNCArMjgyLDE0IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bjo6cHV0T3JBZGQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhLCBjCiAKICAgICBB
U1NFUlQoIWlzUmVhZE9ubHkoKSk7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50
aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7Ci0KLSAgICBS
ZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICAKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNl
KCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+cHV0T3JBZGQo
cmVxdWVzdERhdGEsIGtleURhdGEsIHZhbHVlLCBvdmVyd3JpdGVNb2RlLCBbdGhpcywgcHJvdGVj
dGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwgY29uc3QgSURCS2V5
RGF0YSYga2V5KSB7CisgICAgZGF0YWJhc2UtPnB1dE9yQWRkKCp0aGlzLCByZXF1ZXN0RGF0YSwg
a2V5RGF0YSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgcmVxdWVzdERhdGFdKGF1dG8mIGVycm9yLCBjb25zdCBJREJLZXlEYXRhJiBr
ZXkpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rp
b246OnB1dE9yQWRkIChjYWxsYmFjaykiKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAg
ICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRvQ2xpZW50KCkuZGlkUHV0T3JBZGQo
SURCUmVzdWx0RGF0YTo6cHV0T3JBZGRTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlm
aWVyKCksIGtleSkpOwpAQCAtMjk1LDEzICszMDQsMTMgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
LAogCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7CiAKLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICAKICAgICBhdXRvIGRh
dGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRh
dGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+Z2V0UmVjb3JkKHJlcXVlc3REYXRhLCBnZXRS
ZWNvcmREYXRhLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVy
cm9yJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+
Z2V0UmVjb3JkKCp0aGlzLCByZXF1ZXN0RGF0YSwgZ2V0UmVjb3JkRGF0YSwgW3RoaXMsIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCByZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIGNvbnN0
IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CiAgICAgICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRSZWNvcmQgKGNhbGxiYWNrKSIpOworICAgICAgICBp
ZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChlcnJvci5p
c051bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5jb25uZWN0aW9uVG9D
bGllbnQoKS5kaWRHZXRSZWNvcmQoSURCUmVzdWx0RGF0YTo6Z2V0UmVjb3JkU3VjY2VzcyhyZXF1
ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpLCByZXN1bHQpKTsKQEAgLTMxNSwxNCArMzI0LDE0
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0QWxsUmVjb3Jkcyhjb25z
dCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhCiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMiKTsKIAogICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNhY3Rpb25JZGVu
dGlmaWVyKCkpOwotCi0gICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+IHBy
b3RlY3RlZFRoaXModGhpcyk7CiAgICAgCiAgICAgYXV0byBkYXRhYmFzZSA9IG1fZGF0YWJhc2VD
b25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAgICAgCi0gICAg
ZGF0YWJhc2UtPmdldEFsbFJlY29yZHMocmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBb
dGhpcywgcHJvdGVjdGVkVGhpcywgcmVxdWVzdERhdGFdKGNvbnN0IElEQkVycm9yJiBlcnJvciwg
Y29uc3QgSURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKKyAgICBkYXRhYmFzZS0+Z2V0QWxsUmVj
b3JkcygqdGhpcywgcmVxdWVzdERhdGEsIGdldEFsbFJlY29yZHNEYXRhLCBbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3Qg
SURCR2V0QWxsUmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1
ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246OmdldEFsbFJlY29yZHMgKGNhbGxiYWNrKSIpOworICAg
ICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChl
cnJvci5pc051bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5jb25uZWN0
aW9uVG9DbGllbnQoKS5kaWRHZXRBbGxSZWNvcmRzKElEQlJlc3VsdERhdGE6OmdldEFsbFJlY29y
ZHNTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIHJlc3VsdCkpOwpAQCAt
MzM2LDE0ICszNDUsMTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRD
b3VudChjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEsIGMKICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6Z2V0Q291bnQiKTsKIAogICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9uSW5mby5pZGVudGlmaWVyKCkgPT0gcmVxdWVzdERhdGEudHJhbnNh
Y3Rpb25JZGVudGlmaWVyKCkpOwotCi0gICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgCiAgICAgYXV0byBkYXRhYmFzZSA9IG1f
ZGF0YWJhc2VDb25uZWN0aW9uLT5kYXRhYmFzZSgpOwogICAgIEFTU0VSVChkYXRhYmFzZSk7CiAg
ICAgCi0gICAgZGF0YWJhc2UtPmdldENvdW50KHJlcXVlc3REYXRhLCBrZXlSYW5nZURhdGEsIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzLCByZXF1ZXN0RGF0YV0oY29uc3QgSURCRXJyb3ImIGVycm9yLCB1
aW50NjRfdCBjb3VudCkgeworICAgIGRhdGFiYXNlLT5nZXRDb3VudCgqdGhpcywgcmVxdWVzdERh
dGEsIGtleVJhbmdlRGF0YSwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBy
ZXF1ZXN0RGF0YV0oYXV0byYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KSB7CiAgICAgICAgIExPRyhJ
bmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpnZXRDb3VudCAoY2FsbGJh
Y2spIik7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgbV9kYXRhYmFzZUNvbm5lY3Rp
b24tPmNvbm5lY3Rpb25Ub0NsaWVudCgpLmRpZEdldENvdW50KElEQlJlc3VsdERhdGE6OmdldENv
dW50U3VjY2VzcyhyZXF1ZXN0RGF0YS5yZXF1ZXN0SWRlbnRpZmllcigpLCBjb3VudCkpOwpAQCAt
MzU3LDE0ICszNjYsMTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpkZWxl
dGVSZWNvcmQoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXQKICAgICBMT0coSW5kZXhl
ZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkIik7CiAKICAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbkluZm8uaWRlbnRpZmllcigpID09IHJlcXVlc3REYXRhLnRy
YW5zYWN0aW9uSWRlbnRpZmllcigpKTsKLQotICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZVRy
YW5zYWN0aW9uPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIAogICAgIGF1dG8gZGF0YWJhc2Ug
PSBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+ZGF0YWJhc2UoKTsKICAgICBBU1NFUlQoZGF0YWJhc2Up
OwogICAgIAotICAgIGRhdGFiYXNlLT5kZWxldGVSZWNvcmQocmVxdWVzdERhdGEsIGtleVJhbmdl
RGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYg
ZXJyb3IpIHsKKyAgICBkYXRhYmFzZS0+ZGVsZXRlUmVjb3JkKCp0aGlzLCByZXF1ZXN0RGF0YSwg
a2V5UmFuZ2VEYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVl
c3REYXRhXShhdXRvJiBlcnJvcikgewogICAgICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkIChjYWxsYmFjaykiKTsKKyAgICAgICAg
aWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoZXJyb3Iu
aXNOdWxsKCkpCiAgICAgICAgICAgICBtX2RhdGFiYXNlQ29ubmVjdGlvbi0+Y29ubmVjdGlvblRv
Q2xpZW50KCkuZGlkRGVsZXRlUmVjb3JkKElEQlJlc3VsdERhdGE6OmRlbGV0ZVJlY29yZFN1Y2Nl
c3MocmVxdWVzdERhdGEucmVxdWVzdElkZW50aWZpZXIoKSkpOwpAQCAtMzc4LDE0ICszODcsMTQg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yKGNvbnN0IElE
QlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSwKICAgICBMT0coSW5kZXhlZERCLCAiVW5pcXVlSURC
RGF0YWJhc2VUcmFuc2FjdGlvbjo6b3BlbkN1cnNvciIpOwogCiAgICAgQVNTRVJUKG1fdHJhbnNh
Y3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0RGF0YS50cmFuc2FjdGlvbklkZW50aWZp
ZXIoKSk7Ci0KLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKICAgICAKICAgICBhdXRvIGRhdGFiYXNlID0gbV9kYXRhYmFzZUNvbm5l
Y3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRhdGFiYXNlKTsKICAgICAKLSAgICBkYXRh
YmFzZS0+b3BlbkN1cnNvcihyZXF1ZXN0RGF0YSwgaW5mbywgW3RoaXMsIHByb3RlY3RlZFRoaXMs
IHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYg
cmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPm9wZW5DdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBp
bmZvLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShh
dXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKElu
ZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb246Om9wZW5DdXJzb3IgKGNhbGxi
YWNrKSIpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0
aW9uLT5jb25uZWN0aW9uVG9DbGllbnQoKS5kaWRPcGVuQ3Vyc29yKElEQlJlc3VsdERhdGE6Om9w
ZW5DdXJzb3JTdWNjZXNzKHJlcXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIHJlc3VsdCkp
OwpAQCAtMzk5LDE0ICs0MDgsMTQgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9u
OjppdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGEKICAgICBMT0co
SW5kZXhlZERCLCAiVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvciIp
OwogCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25JbmZvLmlkZW50aWZpZXIoKSA9PSByZXF1ZXN0
RGF0YS50cmFuc2FjdGlvbklkZW50aWZpZXIoKSk7Ci0KLSAgICBSZWZQdHI8VW5pcXVlSURCRGF0
YWJhc2VUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICAKICAgICBhdXRvIGRh
dGFiYXNlID0gbV9kYXRhYmFzZUNvbm5lY3Rpb24tPmRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGRh
dGFiYXNlKTsKICAgICAKLSAgICBkYXRhYmFzZS0+aXRlcmF0ZUN1cnNvcihyZXF1ZXN0RGF0YSwg
ZGF0YSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIHJlcXVlc3REYXRhXShjb25zdCBJREJFcnJvciYg
ZXJyb3IsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0KSB7CisgICAgZGF0YWJhc2UtPml0ZXJh
dGVDdXJzb3IoKnRoaXMsIHJlcXVlc3REYXRhLCBkYXRhLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIHJlcXVlc3REYXRhXShhdXRvJiBlcnJvciwgY29uc3QgSURCR2V0UmVz
dWx0JiByZXN1bHQpIHsKICAgICAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
VHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IgKGNhbGxiYWNrKSIpOworICAgICAgICBpZiAoIXdl
YWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChlcnJvci5pc051bGwo
KSkKICAgICAgICAgICAgIG1fZGF0YWJhc2VDb25uZWN0aW9uLT5jb25uZWN0aW9uVG9DbGllbnQo
KS5kaWRJdGVyYXRlQ3Vyc29yKElEQlJlc3VsdERhdGE6Oml0ZXJhdGVDdXJzb3JTdWNjZXNzKHJl
cXVlc3REYXRhLnJlcXVlc3RJZGVudGlmaWVyKCksIHJlc3VsdCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>