<?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>226277</bug_id>
          
          <creation_ts>2021-05-26 10:04:49 -0700</creation_ts>
          <short_desc>Make CacheStorageEngine use the same WorkQueue as StorageQuotaManager</short_desc>
          <delta_ts>2021-06-02 10:05: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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763949</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-26 10:04:49 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763961</commentid>
    <comment_count>1</comment_count>
      <attachid>429771</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-26 10:20:42 -0700</bug_when>
    <thetext>Created attachment 429771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763967</commentid>
    <comment_count>2</comment_count>
      <attachid>429771</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-26 10:27:40 -0700</bug_when>
    <thetext>Comment on attachment 429771
Patch

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

&gt; Source/WebKit/ChangeLog:8
&gt; +        Make one WorkQueue per SessionStorageQuotaManager and use it for both StorageQuotaManagar and CacheStorageEngine.

typo: StorageQuotaManagar

&gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2519
&gt; +RefPtr&lt;WorkQueue&gt; NetworkProcess::storageSessionQueue(PAL::SessionID sessionID)

Do different storage sessions really need different work queues or could they all share the same static WorkQueue. Not that we&apos;d be less likely to have threading bugs if they shared the same queue.

&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:349
&gt; +    RefPtr&lt;WorkQueue&gt; storageSessionQueue(PAL::SessionID);

Seems like this should be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763976</commentid>
    <comment_count>3</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-26 11:02:36 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #2)
&gt; Comment on attachment 429771 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429771&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:8
&gt; &gt; +        Make one WorkQueue per SessionStorageQuotaManager and use it for both StorageQuotaManagar and CacheStorageEngine.
&gt; 
&gt; typo: StorageQuotaManagar
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2519
&gt; &gt; +RefPtr&lt;WorkQueue&gt; NetworkProcess::storageSessionQueue(PAL::SessionID sessionID)
&gt; 
&gt; Do different storage sessions really need different work queues or could
&gt; they all share the same static WorkQueue. Not that we&apos;d be less likely to
&gt; have threading bugs if they shared the same queue.
&gt; 

&apos;Not that&apos; or &apos;Note that&apos;? It means opposite things :)!

My thought is if they share the same queue, requests from persistent session will slow down the ones from ephemeral session, which do not need disk access. Requests from persistent session are probably fine as the bottleneck is probably disk I/O even if they don&apos;t share and sharing means less locking.

&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.h:349
&gt; &gt; +    RefPtr&lt;WorkQueue&gt; storageSessionQueue(PAL::SessionID);
&gt; 
&gt; Seems like this should be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763977</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-26 11:04:44 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #3)
&gt; (In reply to Chris Dumez from comment #2)
&gt; &gt; Comment on attachment 429771 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=429771&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/ChangeLog:8
&gt; &gt; &gt; +        Make one WorkQueue per SessionStorageQuotaManager and use it for both StorageQuotaManagar and CacheStorageEngine.
&gt; &gt; 
&gt; &gt; typo: StorageQuotaManagar
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2519
&gt; &gt; &gt; +RefPtr&lt;WorkQueue&gt; NetworkProcess::storageSessionQueue(PAL::SessionID sessionID)
&gt; &gt; 
&gt; &gt; Do different storage sessions really need different work queues or could
&gt; &gt; they all share the same static WorkQueue. Not that we&apos;d be less likely to
&gt; &gt; have threading bugs if they shared the same queue.
&gt; &gt; 
&gt; 
&gt; &apos;Not that&apos; or &apos;Note that&apos;? It means opposite things :)!
&gt; 
&gt; My thought is if they share the same queue, requests from persistent session
&gt; will slow down the ones from ephemeral session, which do not need disk
&gt; access. Requests from persistent session are probably fine as the bottleneck
&gt; is probably disk I/O even if they don&apos;t share and sharing means less locking.

That assumes we have parallel work for both persistent and non-persistent sessions. I personally don&apos;t think that&apos;s super common.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764014</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-26 12:45:38 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)
&gt; (In reply to Sihui Liu from comment #3)
&gt; &gt; (In reply to Chris Dumez from comment #2)
&gt; &gt; &gt; Comment on attachment 429771 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=429771&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/ChangeLog:8
&gt; &gt; &gt; &gt; +        Make one WorkQueue per SessionStorageQuotaManager and use it for both StorageQuotaManagar and CacheStorageEngine.
&gt; &gt; &gt; 
&gt; &gt; &gt; typo: StorageQuotaManagar
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.cpp:2519
&gt; &gt; &gt; &gt; +RefPtr&lt;WorkQueue&gt; NetworkProcess::storageSessionQueue(PAL::SessionID sessionID)
&gt; &gt; &gt; 
&gt; &gt; &gt; Do different storage sessions really need different work queues or could
&gt; &gt; &gt; they all share the same static WorkQueue. Not that we&apos;d be less likely to
&gt; &gt; &gt; have threading bugs if they shared the same queue.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; &apos;Not that&apos; or &apos;Note that&apos;? It means opposite things :)!

Darn, I make this typo all the time :(

&gt; &gt; 
&gt; &gt; My thought is if they share the same queue, requests from persistent session
&gt; &gt; will slow down the ones from ephemeral session, which do not need disk
&gt; &gt; access. Requests from persistent session are probably fine as the bottleneck
&gt; &gt; is probably disk I/O even if they don&apos;t share and sharing means less locking.
&gt; 
&gt; That assumes we have parallel work for both persistent and non-persistent
&gt; sessions. I personally don&apos;t think that&apos;s super common.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764239</commentid>
    <comment_count>6</comment_count>
      <attachid>429771</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-05-27 00:25:51 -0700</bug_when>
    <thetext>Comment on attachment 429771
Patch

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

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:52
&gt;      ASSERT(!isMainThread());

It seems ok to remove requestSpaceOnMainThread.
If the plan for IDB to call requestSpaceOnBackgroundThread in the shared work queue, that will lead to good simplifications.
But, IIRC, that was the hard part due to the IDB was implemented. Have you tried doing so?

&gt; Source/WebKit/NetworkProcess/NetworkProcess.h:513
&gt; +                return WebCore::StorageQuotaManager::create(quota, WTFMove(usageGetter), WTFMove(quotaIncreaseRequester), WTFMove(queue));

Quota management is independent per origin.
If one page of origin A triggers a prompt, it should not block page of origin B to also trigger the prompt.
Conceptually, it seems StorageQuotaManager should have its own queue and not share it with other managers.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:275
&gt; +    m_ioQueue = m_networkProcess-&gt;storageSessionQueue(m_sessionID);

This queue is mostly used to read/write cache infrastructure files, like list of cache names, salt, origin...
The actual storage of cache entries is implemented through NetworkCache::Storage which is using concurrent queues for performance reasons.
I am not sure we are solving what we think we are solving with this patch. Computation of actual disk size will always be racy if there are ongoing operations.
Ultimately, if the web page wants to optimise prompting, it would be up to the web page to make careful sequential operations instead of doing several operations in parallel that may or may not hit the quota.

That said, removing requestSpaceOnMainThread is fine by me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764359</commentid>
    <comment_count>7</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-27 09:33:21 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #6)
&gt; Comment on attachment 429771 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429771&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/StorageQuotaManager.cpp:52
&gt; &gt;      ASSERT(!isMainThread());
&gt; 
&gt; It seems ok to remove requestSpaceOnMainThread.
&gt; If the plan for IDB to call requestSpaceOnBackgroundThread in the shared
&gt; work queue, that will lead to good simplifications.
&gt; But, IIRC, that was the hard part due to the IDB was implemented. Have you
&gt; tried doing so?

Yes, I tried to make IDB use WorkQueue (first step is creating a dedicated thread for JS serialization https://bugs.webkit.org/show_bug.cgi?id=226228).

&gt;
&gt; &gt; Source/WebKit/NetworkProcess/NetworkProcess.h:513
&gt; &gt; +                return WebCore::StorageQuotaManager::create(quota, WTFMove(usageGetter), WTFMove(quotaIncreaseRequester), WTFMove(queue));
&gt; 
&gt; Quota management is independent per origin.
&gt; If one page of origin A triggers a prompt, it should not block page of
&gt; origin B to also trigger the prompt.
&gt; Conceptually, it seems StorageQuotaManager should have its own queue and not
&gt; share it with other managers.

Is it possible to show multiple quota prompts at the same time? If user can only see/handle one prompt at one time, it might be Okay. 

I use one queue per session as it simplifies things, e.g. fetching/deleting data for origins will be one task on the shared queue instead of multiple tasks on different queues, or when we stop storage activities (e.g. for suspension), we may just need to suspend the shared queue.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:275
&gt; &gt; +    m_ioQueue = m_networkProcess-&gt;storageSessionQueue(m_sessionID);
&gt; 
&gt; This queue is mostly used to read/write cache infrastructure files, like
&gt; list of cache names, salt, origin...
&gt; The actual storage of cache entries is implemented through
&gt; NetworkCache::Storage which is using concurrent queues for performance
&gt; reasons.
&gt; I am not sure we are solving what we think we are solving with this patch.
&gt; Computation of actual disk size will always be racy if there are ongoing
&gt; operations.
&gt; Ultimately, if the web page wants to optimise prompting, it would be up to
&gt; the web page to make careful sequential operations instead of doing several
&gt; operations in parallel that may or may not hit the quota.
&gt; 
&gt; That said, removing requestSpaceOnMainThread is fine by me.

Yes I think to make the disk usage accurate we should do all the writes at the same queue, or at least we should ensure granted writes happen before next quota check, which likely requires architectural change in Cache storage.

If necessary, we can also update the size file (based on estimate) at the shared queue, and correct size file periodically based on results from other queues of NetworkCache::Storage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764423</commentid>
    <comment_count>8</comment_count>
      <attachid>429904</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-27 11:19:05 -0700</bug_when>
    <thetext>Created attachment 429904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764447</commentid>
    <comment_count>9</comment_count>
      <attachid>429909</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-27 12:00:11 -0700</bug_when>
    <thetext>Created attachment 429909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764545</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-27 15:32:20 -0700</bug_when>
    <thetext>API test failure looks related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764813</commentid>
    <comment_count>11</comment_count>
      <attachid>430022</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2021-05-28 10:10:26 -0700</bug_when>
    <thetext>Created attachment 430022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765336</commentid>
    <comment_count>12</comment_count>
      <attachid>430022</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-05-31 00:04:57 -0700</bug_when>
    <thetext>Comment on attachment 430022
Patch

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

&gt; Source/WebCore/storage/StorageQuotaManager.cpp:45
&gt; +    , m_workQueue(queue)

WTFMove

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:251
&gt; +    if (!m_ioQueue || !m_networkProcess) {

It does not seem like m_ioQueue can be null now.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:262
&gt; +    m_ioQueue-&gt;dispatch([storageQuotaManager, spaceRequested, callback = WTFMove(callback)]() mutable {

storageQuotaManager  = WTFMove(storageQuotaManager)

We should probably add a comment here to state why we have to hop in to ioQueue to request space.

&gt; Tools/ChangeLog:8
&gt; +        Update the test expectation as with this change cache request from one origin may block that from another.

I don&apos;t think we want to have that behavior.
If we go with that change, we should be able to have requests from different origins run in parallel.
As discussed offline, either with a queue per quota manager, or as you proposed, quota manager handling several callbacks in parallel.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:83
&gt; +    NSLog(@&quot;sihuil: decideDatabaseQuotaForSecurityOrigin sets receivedQuotaDelegateCalled true&quot;);

to be removed here and below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766056</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-02 10:05:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78769703&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429771</attachid>
            <date>2021-05-26 10:20:42 -0700</date>
            <delta_ts>2021-05-27 11:19:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226277-20210526102041.patch</filename>
            <type>text/plain</type>
            <size>15897</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmNDJkMWM1OWUwNWM4
MmEzYWIxNGZkZDBlOGQ3M2Y0OWFhMzVkNS4uMGQ4MTdiZWMyMGRhYmQ0ZTMxOTFjNzEzMmNmMTYz
YmIxOTcwNDVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTI2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQ2FjaGVTdG9yYWdl
RW5naW5lIHVzZSB0aGUgc2FtZSBXb3JrUXVldWUgYXMgU3RvcmFnZVF1b3RhTWFuYWdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2Mjc3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IFN0b3JhZ2VR
dW90YU1hbmFnZXIgdGFrZSBhIFdvcmtRdWV1ZSBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQpOiBEZWxldGVkLCBhcyBDYWNo
ZVN0b3JhZ2VFbmdpbmUgYWxzbyByZXF1ZXN0IGZyb20KKyAgICAgICAgYSBiYWNrZ3JvdW5kIHRo
cmVhZCBub3cuCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmg6CisKIDIw
MjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRj
aCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpvcHRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjMTE5ZGNi
ZTIzMjYxZTE0ZDJmMDhmYmUyMDhmYmUyNzA0ODNjNTE0Li5jMDA2ZGMzN2VlNTVjZTU3ZjJhZmQ5
NzE4MWMxZTc2NGNjMTcxOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA1LTI2
ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQ2FjaGVT
dG9yYWdlRW5naW5lIHVzZSB0aGUgc2FtZSBXb3JrUXVldWUgYXMgU3RvcmFnZVF1b3RhTWFuYWdl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2Mjc3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBv
bmUgV29ya1F1ZXVlIHBlciBTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlciBhbmQgdXNlIGl0IGZv
ciBib3RoIFN0b3JhZ2VRdW90YU1hbmFnYXIgYW5kIENhY2hlU3RvcmFnZUVuZ2luZS4KKworICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uUXVldWUpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzOjpTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcjo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFn
ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXI6OmVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OndvcmtRdWV1
ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnJlcXVlc3RTcGFjZSk6
CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpFbmdpbmUpOgorCiAyMDIx
LTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2l0Y2gg
ZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5k
ZXggN2E1YTFjYWU0YzExYjg2NTAzZGY2MWMwYTg5MzRmOTkwZjE1MGM0Mi4uNWMxOTlhNGIxYzA5
MWY4NmE4Y2RjYTNkNzg1ZDcwM2RjYTlkNDk2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMS0wNS0yNiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4K
KworICAgICAgICBNYWtlIENhY2hlU3RvcmFnZUVuZ2luZSB1c2UgdGhlIHNhbWUgV29ya1F1ZXVl
IGFzIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNjI3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgorICAgICAg
ICAoSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgorICAgICAgICAoSW5Qcm9jZXNz
SURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIpOgorICAgICAgICAqIFN0b3JhZ2UvSW5Qcm9j
ZXNzSURCU2VydmVyLmg6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbW92ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRMaXRlcmFsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCAzNzFk
MzNiNmYxNTY3N2I3MWNiOTUwMGU5MmVlMjA5MzIzZTIzNmI0Li4zYjRiM2FjNDI4N2U1ZmQyY2Zj
ODBmYTEwMTNhY2FhY2QwNGYxNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTMzLDQyICszMywyMCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVJlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpj
cmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5j
cmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQorUmVmPFN0b3JhZ2VRdW90
YU1hbmFnZXI+IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNh
Z2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5j
cmVhc2VSZXF1ZXN0ZXIsIFJlZjxXb3JrUXVldWU+JiYgcXVldWUpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU3RvcmFnZVF1b3RhTWFuYWdlcihxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRl
ciksIFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdG9yYWdlUXVvdGFNYW5hZ2VyKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwg
V1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSwgV1RGTW92ZShxdWV1ZSkpKTsKIH0KIAot
U3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwg
VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXIpCitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5h
Z2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3Jl
YXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciwgUmVmPFdvcmtRdWV1ZT4mJiBx
dWV1ZSkKICAgICA6IG1fcXVvdGEocXVvdGEpCiAgICAgLCBtX3VzYWdlR2V0dGVyKFdURk1vdmUo
dXNhZ2VHZXR0ZXIpKQogICAgICwgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUocXVv
dGFJbmNyZWFzZVJlcXVlc3RlcikpCi0gICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0
ZSgiU3RvcmFnZVF1b3RhTWFuYWdlciBCYWNrZ3JvdW5kIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBl
OjpTZXJpYWwpKQorICAgICwgbV93b3JrUXVldWUocXVldWUpCiAgICAgLCBtX2luaXRpYWxRdW90
YShxdW90YSkKIHsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VP
bk1haW5UaHJlYWQodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIFJlcXVlc3RDYWxsYmFjayYmIGNh
bGxiYWNrKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBGYXN0IHBh
dGguCi0gICAgaWYgKG1fcXVvdGFDb3VudERvd25Mb2NrLnRyeUxvY2soKSkgewotICAgICAgICBp
ZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkgewotICAgICAgICAgICAgbV9xdW90
YUNvdW50RG93bkxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBjYWxsYmFjayhEZWNpc2lvbjo6
R3JhbnQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fcXVvdGFD
b3VudERvd25Mb2NrLnVubG9jaygpOwotICAgIH0KLQotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBk
ZWNpc2lvbiA9IHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCk7
Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IGRlY2lzaW9uXSgpIG11dGFibGUgewotICAgICAgICAgICAgY2FsbGJhY2soZGVjaXNpb24pOwot
ICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24g
U3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2
NF90IHNwYWNlUmVxdWVzdGVkKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAppbmRleCA1YjM1NjU3
MmQ0OGJiNDI3NTljYTFlZjVhNDU5MGM4YzAyMzY0ZTc4Li5mMjMzYjNhMDgzZmIxMTUzZDI4OTAz
ODU0MGM5OGE5YjhlZjFjYjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VR
dW90YU1hbmFnZXIuaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2Vy
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VRdW90YU1hbmFnZXI+LCBwdQog
cHVibGljOgogICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gRnVuY3Rpb248dWludDY0X3QoKT47CiAg
ICAgdXNpbmcgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3Qg
Y3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZElu
Y3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0
ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNy
ZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3Rl
ciYmLCBSZWY8V29ya1F1ZXVlPiYmKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qg
ZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkg
eyByZXR1cm4gcXVvdGEgLyAxMDsgfQogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVm
YXVsdFF1b3RhKCkgeyByZXR1cm4gMTAwMCAqIE1COyB9CkBAIC00NiwxMyArNDYsMTIgQEAgcHVi
bGljOgogCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNp
bmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+Owot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90
LCBSZXF1ZXN0Q2FsbGJhY2smJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVz
dFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVzZXRRdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2VGb3JUZXN0aW5nKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZXNldFF1b3RhRm9yVGVzdGluZygpOwogcHJpdmF0ZToKLSAgICBT
dG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUlu
Y3JlYXNlUmVxdWVzdGVyJiYpOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVv
dGEsIFVzYWdlR2V0dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiwgUmVmPFdvcmtRdWV1
ZT4mJik7CiAgICAgYm9vbCB0cnlHcmFudFJlcXVlc3QodWludDY0X3QpIFdURl9SRVFVSVJFU19M
T0NLKG1fcXVvdGFDb3VudERvd25Mb2NrKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9u
VXNhZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKaW5kZXggMzY0YzIzNjE4YjNjZTI1ZTBjNDNiNTRiZjUzODU4MmFkYWI4MzE5Mi4uMWM5
MGNlNjY2N2FkZGYwNGY4ZDRjZWU2NmZhMTEwNThiYTkxZDZjYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTI1MTYsNiArMjUxNiwx
NiBAQCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VR
dW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgcwogICAgIHJldHVybiBvcmlnaW5TdG9yYWdlUXVv
dGFNYW5hZ2VyOwogfQogCitSZWZQdHI8V29ya1F1ZXVlPiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFn
ZVNlc3Npb25RdWV1ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgTG9ja2VyIGxv
Y2tlciB7IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayB9OworICAgIGF1dG8qIHNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMu
Z2V0KHNlc3Npb25JRCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gbWFrZVJlZlB0cihzZXNzaW9uU3Rv
cmFnZVF1b3RhTWFuYWdlci0+d29ya1F1ZXVlKCkpOworfQorCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5
UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggMDgzMzgyYzk5YTA3YjI2ZmQ1ODky
MWM1Yzg3ZTJhNjFiMjEwNzYxYy4uYzZkMWNiMzllOWU4ZjliZDRmMzBmNjg1NjRiMDQwOWIxMDMx
M2ExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aApAQCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBDTUZyYXVkUHJldmVu
dGlvblZhbHVlc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIFN0cmluZyYmIHVubGlua2FibGVU
b2tlbiwgU3RyaW5nJiYgc2VjcmV0VG9rZW4sIFN0cmluZyYmIHNpZ25hdHVyZSwgU3RyaW5nJiYg
a2V5SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICBSZWZQdHI8V2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25J
RCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4g
c3RvcmFnZVNlc3Npb25RdWV1ZShQQUw6OlNlc3Npb25JRCk7CiAKICAgICB2b2lkIGFkZEtlcHRB
bGl2ZUxvYWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAgdm9pZCByZW1vdmVL
ZXB0QWxpdmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNTAxLDE0ICs1MDIsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIDogbV9jYWNoZVJvb3RQYXRoKGNhY2hlUm9vdFBhdGgp
CiAgICAgICAgICAgICAsIG1fZGVmYXVsdFF1b3RhKGRlZmF1bHRRdW90YSkKICAgICAgICAgICAg
ICwgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCisgICAg
ICAgICAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJTdG9yYWdlIFNlc3Npb24g
UXVldWUiKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIHVpbnQ2NF90IGRlZmF1bHRR
dW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4g
b3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEg
OiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0KIAogICAgICAgICBSZWY8V2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihXZWJDb3Jl
OjpDbGllbnRPcmlnaW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fc3RvcmFnZVF1b3RhTWFu
YWdlcnMuZW5zdXJlKG9yaWdpbiwgW3F1b3RhLCB1c2FnZUdldHRlciA9IFdURk1vdmUodXNhZ2VH
ZXR0ZXIpLCBxdW90YUluY3JlYXNlUmVxdWVzdGVyID0gV1RGTW92ZShxdW90YUluY3JlYXNlUmVx
dWVzdGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6U3Rv
cmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RG
TW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSBt
X3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFtxdW90YSwgdXNhZ2VHZXR0ZXIg
PSBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IFdURk1vdmUo
cXVvdGFJbmNyZWFzZVJlcXVlc3RlciksIHF1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3Rh
SW5jcmVhc2VSZXF1ZXN0ZXIpLCBXVEZNb3ZlKHF1ZXVlKSk7CiAgICAgICAgICAgICB9KS5pdGVy
YXRvcjsKICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKCppdGVyLT52YWx1ZSk7CiAgICAgICAg
IH0KQEAgLTUyMCwxMiArNTIyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0SURCUm9v
dFBhdGgoY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCkgeyBtX2lkYlJvb3RQYXRoID0gaWRiUm9v
dFBhdGg7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1faWRiUm9vdFBhdGg7IH0KIAorICAgICAgICBXb3JrUXVldWUmIHdvcmtRdWV1ZSgpIHsg
cmV0dXJuIG1fd29ya1F1ZXVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9j
YWNoZVJvb3RQYXRoOwogICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKICAgICAgICAgdWlu
dDY0X3QgbV9kZWZhdWx0UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZh
dWx0UXVvdGEoKSB9OwogICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEg
eyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkg
fTsKICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIFJlZlB0cjxXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9zdG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICAgICAg
UmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAgICAgfTsKICAgICB2b2lkIGFkZFNlc3Npb25T
dG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEs
IHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290
UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CkBAIC01ODcsNyArNTkyLDYgQEAg
cHJpdmF0ZToKIAogICAgIExvY2sgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrOwog
ICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFn
ZVF1b3RhTWFuYWdlcj4+IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKLSAgICBib29sIG1f
cXVvdGFMb2dnaW5nRW5hYmxlZCB7IGZhbHNlIH07CiAKICAgICBPcHRpb25TZXQ8TmV0d29ya0Nh
Y2hlOjpDYWNoZU9wdGlvbj4gbV9jYWNoZU9wdGlvbnM7CiAgICAgV2ViQ29yZTo6TWVzc2FnZVBv
cnRDaGFubmVsUmVnaXN0cnkgbV9tZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lLmNwcAppbmRleCAyYWNlNTFjNjEwOGUyMzVmODA2MWRjMmU4ODk5YmQ1NmJkNzgyMzgyLi5m
ZjIwNTUyYjk3ZmM2ZGM2ZWYzZWFhYzA3ZTM2MmQyZGRiY2VhMjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUu
Y3BwCkBAIC0yNDYsMTYgKzI0NiwyNSBAQCB1aW50NjRfdCBFbmdpbmU6OmRpc2tVc2FnZShjb25z
dCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mCiAKIHZvaWQg
RW5naW5lOjpyZXF1ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4s
IHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKIHsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgaWYgKCFtX2lvUXVldWUgfHwgIW1fbmV0d29y
a1Byb2Nlc3MpIHsKICAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdl
cjo6RGVjaXNpb246OkRlbnkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25l
dHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOwot
ICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFn
ZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBv
cmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikgewogICAgICAgICBjYWxsYmFj
ayhXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VP
bk1haW5UaHJlYWQoc3BhY2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBtX2lv
UXVldWUtPmRpc3BhdGNoKFtzdG9yYWdlUXVvdGFNYW5hZ2VyLCBzcGFjZVJlcXVlc3RlZCwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQo
c3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Jlc3Vs
dCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgIH0pOworICAgIH0pOwogfQogCiBFbmdpbmU6OkVu
Z2luZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBT
dHJpbmcmJiByb290UGF0aCkKQEAgLTI2Myw4ICsyNzIsNyBAQCBFbmdpbmU6OkVuZ2luZShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBTdHJpbmcmJiBy
b290UAogICAgICwgbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKICAgICAs
IG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCiB7Ci0gICAgaWYgKCFtX3Jvb3RQYXRoLmlz
TnVsbCgpKQotICAgICAgICBtX2lvUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxl
LldlYktpdC5DYWNoZVN0b3JhZ2VFbmdpbmUuc2VyaWFsLmRlZmF1bHQiLCBXb3JrUXVldWU6OlR5
cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OkRlZmF1bHQpOworICAgIG1faW9RdWV1ZSA9IG1f
bmV0d29ya1Byb2Nlc3MtPnN0b3JhZ2VTZXNzaW9uUXVldWUobV9zZXNzaW9uSUQpOwogfQogCiB2
b2lkIEVuZ2luZTo6b3Blbihjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBjYWNoZU5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2sp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIu
Y3BwCmluZGV4IGFiMGU5MDk4OGI0OWQwMzk1MmIxZTdlNTgyMjY3Y2ExMWE2ZTkxODEuLjcyMjUy
ZTc1N2NhMDVkZDgyMjE5YWYxZWMwZTU1OTdmODk1MWQzNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC03MSwxMiArNzEs
MTIgQEAgSW5Qcm9jZXNzSURCU2VydmVyOjp+SW5Qcm9jZXNzSURCU2VydmVyKCkKIAogU3RvcmFn
ZVF1b3RhTWFuYWdlciogSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIoY29uc3QgQ2xp
ZW50T3JpZ2luJiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIG1fcXVvdGFNYW5hZ2Vycy5lbnN1cmUo
b3JpZ2luLCBbXSB7CisgICAgcmV0dXJuIG1fcXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBb
d29ya1F1ZXVlID0gbV93b3JrUXVldWVdIHsKICAgICAgICAgcmV0dXJuIFN0b3JhZ2VRdW90YU1h
bmFnZXI6OmNyZWF0ZShTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSwgW10gewog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0sIFtdKHVpbnQ2NF90IHF1b3RhLCB1aW50
NjRfdCBjdXJyZW50U3BhY2UsIHVpbnQ2NF90IHNwYWNlSW5jcmVhc2UsIGF1dG8gY2FsbGJhY2sp
IHsKICAgICAgICAgICAgIGNhbGxiYWNrKHF1b3RhICsgY3VycmVudFNwYWNlICsgc3BhY2VJbmNy
ZWFzZSk7Ci0gICAgICAgIH0pOworICAgICAgICB9LCB3b3JrUXVldWUuY29weVJlZigpKTsKICAg
ICB9KS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKQEAgLTkwLDYgKzkwLDcgQEAgc3RhdGlj
IGlubGluZSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6U3RvcmFnZVF1b3RhTWFuYWdlclNwYWNlUmVx
dWVzdGVyIHN0b3JhZ2VRdW8KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2
ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aCkKICAgICA6IG1fdGhyZWFkKG1ha2VVbmlxdWU8U3RvcmFnZVRocmVhZD4oU3RvcmFn
ZVRocmVhZDo6VHlwZTo6SW5kZXhlZERCKSkKKyAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6
Y3JlYXRlKCJJblByb2Nlc3NJREJTZXJ2ZXIgUXVldWUiKSkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIG1fY29ubmVjdGlvblRvU2VydmVyID0gSURCQ2xpZW50OjpJREJDb25u
ZWN0aW9uVG9TZXJ2ZXI6OmNyZWF0ZSgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmgKaW5kZXggNmNiOGY3ZWY5YWZlNTliZjRlZTY0
YTg0YjQxMTA2OGE4NmZhZTBhYy4uNjdiZGEzYTY0NjA0MTlmNGZjMGUzNjYwMTEyOWNlNGEyOWFh
ZTNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL0luUHJvY2Vzc0lE
QlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9JblByb2Nlc3NJREJT
ZXJ2ZXIuaApAQCAtMTMzLDQgKzEzMyw1IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlN0b3JhZ2VUaHJlYWQ+IG1fdGhyZWFkOwogCiAgICAgSGFzaE1hcDxXZWJDb3Jl
OjpDbGllbnRPcmlnaW4sIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9x
dW90YU1hbmFnZXJzOworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429904</attachid>
            <date>2021-05-27 11:19:05 -0700</date>
            <delta_ts>2021-05-27 12:02:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226277-20210527111904.patch</filename>
            <type>text/plain</type>
            <size>17021</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDUxNzg1M2YxZjY0NGY0
MjFkMjNlYjBkMTliM2Q1MjIzZTQ5MmYyNi4uNzRiOGNlM2I4ZDUyZTQ1MjM3MGVhMWYxZTU2OTY0
N2U3YzhkNjJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTI3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQ2FjaGVTdG9yYWdl
RW5naW5lIHVzZSB0aGUgc2FtZSBXb3JrUXVldWUgYXMgU3RvcmFnZVF1b3RhTWFuYWdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2Mjc3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IFN0b3JhZ2VR
dW90YU1hbmFnZXIgdGFrZSBhIFdvcmtRdWV1ZSBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorCiAyMDIxLTA1LTI3ICBBbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQ0NDM0KSBE
aXNwYXRjaCBpbnRyaW5zaWNDb250ZW50c1NpemVDaGFuZ2VkIG9uIHRoZSBtYWluIGZyYW1lIG9u
bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggOWI0OTg4YmViNjJmZTgyMTY2YjAwNTZkOTk3YTViNDZiOTQzZWRhYS4u
YzE4Nzk2ZWYxZjFlYzVmY2U2ZjIyMDIwZDRkNGQ1NDhlZjg5NDkyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAyMS0wNS0yNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4K
KworICAgICAgICBNYWtlIENhY2hlU3RvcmFnZUVuZ2luZSB1c2UgdGhlIHNhbWUgV29ya1F1ZXVl
IGFzIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNjI3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2Ugb25lIFdvcmtRdWV1ZSBwZXIgU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIgYW5kIHVzZSBpdCBmb3IgYm90aCBTdG9yYWdlUXVvdGFNYW5hZ2FyIGFuZCBDYWNo
ZVN0b3JhZ2VFbmdpbmUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvblF1
ZXVlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OlNl
c3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjplbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFN
YW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyOjp3b3JrUXVldWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
RW5naW5lOjpyZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVu
Z2luZTo6RW5naW5lKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuaDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnNob3Vs
ZFBlcnNpc3QgY29uc3QpOgorCiAyMDIxLTA1LTI3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQWRkIHZhbGlkYXRpb24gd2hl
biByZWFkaW5nIERpc3BsYXlMaXN0U2hhcmVkTWVtb3J5SGVhZGVyOjp3YWl0aW5nU3RhdHVzIGlu
IERpc3BsYXlMaXN0UmVhZGVySGFuZGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCmluZGV4IDdhNWExY2Fl
NGMxMWI4NjUwM2RmNjFjMGE4OTM0Zjk5MGYxNTBjNDIuLjIxYzYwZDUwYWI1MGE1N2NiZDI5ZDFh
ZWE3ZTYxYjRjODk1NjcyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMjEtMDUtMjcgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSBDYWNoZVN0b3JhZ2VFbmdpbmUgdXNlIHRoZSBzYW1lIFdvcmtRdWV1ZSBhcyBTdG9yYWdl
UXVvdGFNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjYyNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFN0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmNwcDoKKyAgICAgICAgKEluUHJvY2Vz
c0lEQlNlcnZlcjo6cXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKEluUHJvY2Vzc0lEQlNlcnZlcjo6
SW5Qcm9jZXNzSURCU2VydmVyKToKKyAgICAgICAgKiBTdG9yYWdlL0luUHJvY2Vzc0lEQlNlcnZl
ci5oOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTGl0ZXJhbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKaW5kZXggMzcxZDMzYjZmMTU2Nzdi
NzFjYjk1MDBlOTJlZTIwOTMyM2UyMzZiNC4uM2I0YjNhYzQyODdlNWZkMmNmYzgwZmExMDEzYWNh
YWNkMDRmMTQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVv
dGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1h
bmFnZXIuY3BwCkBAIC0zMyw0MiArMzMsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1S
ZWY8U3RvcmFnZVF1b3RhTWFuYWdlcj4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHVpbnQ2
NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVz
dGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlcikKK1JlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYg
dXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVz
dGVyLCBSZWY8V29ya1F1ZXVlPiYmIHF1ZXVlKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0b3JhZ2VRdW90YU1hbmFnZXIocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3Zl
KHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Rv
cmFnZVF1b3RhTWFuYWdlcihxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVv
dGFJbmNyZWFzZVJlcXVlc3RlciksIFdURk1vdmUocXVldWUpKSk7CiB9CiAKLVN0b3JhZ2VRdW90
YU1hbmFnZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVy
JiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVx
dWVzdGVyKQorU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRf
dCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3Rl
ciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIsIFJlZjxXb3JrUXVldWU+JiYgcXVldWUpCiAgICAg
OiBtX3F1b3RhKHF1b3RhKQogICAgICwgbV91c2FnZUdldHRlcihXVEZNb3ZlKHVzYWdlR2V0dGVy
KSkKICAgICAsIG1fcXVvdGFJbmNyZWFzZVJlcXVlc3RlcihXVEZNb3ZlKHF1b3RhSW5jcmVhc2VS
ZXF1ZXN0ZXIpKQotICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIlN0b3JhZ2VR
dW90YU1hbmFnZXIgQmFja2dyb3VuZCBRdWV1ZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFsKSkK
KyAgICAsIG1fd29ya1F1ZXVlKHF1ZXVlKQogICAgICwgbV9pbml0aWFsUXVvdGEocXVvdGEpCiB7
CiB9CiAKLXZvaWQgU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25NYWluVGhyZWFk
KHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBSZXF1ZXN0Q2FsbGJhY2smJiBjYWxsYmFjaykKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gRmFzdCBwYXRoLgotICAgIGlm
IChtX3F1b3RhQ291bnREb3duTG9jay50cnlMb2NrKCkpIHsKLSAgICAgICAgaWYgKHRyeUdyYW50
UmVxdWVzdChzcGFjZVJlcXVlc3RlZCkpIHsKLSAgICAgICAgICAgIG1fcXVvdGFDb3VudERvd25M
b2NrLnVubG9jaygpOwotICAgICAgICAgICAgY2FsbGJhY2soRGVjaXNpb246OkdyYW50KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX3F1b3RhQ291bnREb3duTG9j
ay51bmxvY2soKTsKLSAgICB9Ci0KLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc3BhY2VSZXF1ZXN0ZWQsIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGF1dG8gZGVjaXNpb24gPSBy
ZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQpOwotICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBkZWNpc2lvbl0o
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKGRlY2lzaW9uKTsKLSAgICAgICAgfSk7
Ci0gICAgfSk7Ci19Ci0KIFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uIFN0b3JhZ2VRdW90
YU1hbmFnZXI6OnJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZCh1aW50NjRfdCBzcGFjZVJl
cXVlc3RlZCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKaW5kZXggNWIzNTY1NzJkNDhiYjQyNzU5
Y2ExZWY1YTQ1OTBjOGMwMjM2NGU3OC4uZjIzM2IzYTA4M2ZiMTE1M2QyODkwMzg1NDBjOThhOWI4
ZWYxY2I2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2Vy
LmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgU3RvcmFnZVF1b3RhTWFuYWdlciA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTdG9yYWdlUXVvdGFNYW5hZ2VyPiwgcHUKIHB1YmxpYzoKICAg
ICB1c2luZyBVc2FnZUdldHRlciA9IEZ1bmN0aW9uPHVpbnQ2NF90KCk+OwogICAgIHVzaW5nIFF1
b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IGN1cnJlbnRRdW90
YSwgdWludDY0X3QgY3VycmVudFVzYWdlLCB1aW50NjRfdCByZXF1ZXN0ZWRJbmNyZWFzZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDx1aW50NjRfdD4pPiYmKT47Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBjcmVhdGUodWludDY0X3Qg
cXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBjcmVhdGUodWludDY0
X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiwgUmVmPFdv
cmtRdWV1ZT4mJik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRUaGly
ZFBhcnR5UXVvdGFGcm9tUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpIHsgcmV0dXJuIHF1
b3RhIC8gMTA7IH0KICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGRlZmF1bHRRdW90YSgp
IHsgcmV0dXJuIDEwMDAgKiBNQjsgfQpAQCAtNDYsMTMgKzQ2LDEyIEBAIHB1YmxpYzoKIAogICAg
IGVudW0gY2xhc3MgRGVjaXNpb24geyBEZW55LCBHcmFudCB9OwogICAgIHVzaW5nIFJlcXVlc3RD
YWxsYmFjayA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjaXNpb24pPjsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlcXVlc3RTcGFjZU9uTWFpblRocmVhZCh1aW50NjRfdCwgUmVxdWVzdENh
bGxiYWNrJiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIERlY2lzaW9uIHJlcXVlc3RTcGFjZU9uQmFj
a2dyb3VuZFRocmVhZCh1aW50NjRfdCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0
UXVvdGFVcGRhdGVkQmFzZWRPblVzYWdlRm9yVGVzdGluZygpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVzZXRRdW90YUZvclRlc3RpbmcoKTsKIHByaXZhdGU6Ci0gICAgU3RvcmFnZVF1b3Rh
TWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVl
c3RlciYmKTsKKyAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdl
dHRlciYmLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYsIFJlZjxXb3JrUXVldWU+JiYpOwogICAg
IGJvb2wgdHJ5R3JhbnRSZXF1ZXN0KHVpbnQ2NF90KSBXVEZfUkVRVUlSRVNfTE9DSyhtX3F1b3Rh
Q291bnREb3duTG9jayk7CiAKICAgICB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblVzYWdlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4
IDM2NGMyMzYxOGIzY2UyNWUwYzQzYjU0YmY1Mzg1ODJhZGFiODMxOTIuLjdjOTgzYWM1OTIwY2Ex
ZmEwOTkyMWZiYzdhMmJkYmEwMDQyNTJmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yNTE2LDYgKzI1MTYsMTYgQEAgUmVmUHRy
PFN0b3JhZ2VRdW90YU1hbmFnZXI+IE5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlUXVvdGFNYW5hZ2Vy
KFBBTDo6U2Vzc2lvbklEIHMKICAgICByZXR1cm4gb3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcjsK
IH0KIAorUmVmUHRyPFdvcmtRdWV1ZT4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VTZXNzaW9uUXVl
dWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSBjb25zdAoreworICAgIExvY2tlciBsb2NrZXIg
eyBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2Vyc0xvY2sgfTsKKyAgICBhdXRvKiBzZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlciA9IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzLmdldChz
ZXNzaW9uSUQpOworICAgIGlmICghc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIG1ha2VSZWZQdHIoc2Vzc2lvblN0b3JhZ2VR
dW90YU1hbmFnZXItPndvcmtRdWV1ZSgpKTsKK30KKwogI2lmICFQTEFURk9STShDT0NPQSkKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvbnN0IEF1eGlsaWFyeVByb2Nl
c3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDA4MzM4MmM5OWEwN2IyNmZkNTg5MjFjNWM4
N2UyYTYxYjIxMDc2MWMuLmQyNTQyODQ3NzI2ODc0YTUxMGJmMDhkNDFlOTE2NGU3OTAyMTI3MzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAg
LTM0Niw2ICszNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQQ01GcmF1ZFByZXZlbnRpb25W
YWx1ZXNGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBTdHJpbmcmJiB1bmxpbmthYmxlVG9rZW4s
IFN0cmluZyYmIHNlY3JldFRva2VuLCBTdHJpbmcmJiBzaWduYXR1cmUsIFN0cmluZyYmIGtleUlE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgUmVmUHRyPFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOworICAgIFJlZlB0cjxXb3JrUXVldWU+IHN0b3Jh
Z2VTZXNzaW9uUXVldWUoUEFMOjpTZXNzaW9uSUQpIGNvbnN0OwogCiAgICAgdm9pZCBhZGRLZXB0
QWxpdmVMb2FkKFJlZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+JiYpOwogICAgIHZvaWQgcmVtb3Zl
S2VwdEFsaXZlTG9hZChOZXR3b3JrUmVzb3VyY2VMb2FkZXImKTsKQEAgLTUwMSwxNCArNTAyLDE1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICA6IG1fY2FjaGVSb290UGF0aChjYWNoZVJvb3RQYXRo
KQogICAgICAgICAgICAgLCBtX2RlZmF1bHRRdW90YShkZWZhdWx0UXVvdGEpCiAgICAgICAgICAg
ICAsIG1fZGVmYXVsdFRoaXJkUGFydHlRdW90YShkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKQorICAg
ICAgICAgICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiU3RvcmFnZSBTZXNzaW9u
IFF1ZXVlIikpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB1aW50NjRfdCBkZWZhdWx0
UXVvdGEoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4pIGNvbnN0IHsgcmV0dXJu
IG9yaWdpbi50b3BPcmlnaW4gPT0gb3JpZ2luLmNsaWVudE9yaWdpbiA/IG1fZGVmYXVsdFF1b3Rh
IDogbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhOyB9CiAKICAgICAgICAgUmVmPFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI+IGVuc3VyZU9yaWdpblN0b3JhZ2VRdW90YU1hbmFnZXIoV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luIG9yaWdpbiwgdWludDY0X3QgcXVvdGEsIFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OlVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFdlYkNvcmU6OlN0b3JhZ2VR
dW90YU1hbmFnZXI6OlF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVz
dGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0b3JhZ2VRdW90YU1h
bmFnZXJzLmVuc3VyZShvcmlnaW4sIFtxdW90YSwgdXNhZ2VHZXR0ZXIgPSBXVEZNb3ZlKHVzYWdl
R2V0dGVyKSwgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IFdURk1vdmUocXVvdGFJbmNyZWFzZVJl
cXVlc3RlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZShxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdU
Rk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpOworICAgICAgICAgICAgYXV0byBpdGVyID0g
bV9zdG9yYWdlUXVvdGFNYW5hZ2Vycy5lbnN1cmUob3JpZ2luLCBbcXVvdGEsIHVzYWdlR2V0dGVy
ID0gV1RGTW92ZSh1c2FnZUdldHRlciksIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIgPSBXVEZNb3Zl
KHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpLCBxdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6Y3JlYXRlKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90
YUluY3JlYXNlUmVxdWVzdGVyKSwgV1RGTW92ZShxdWV1ZSkpOwogICAgICAgICAgICAgfSkuaXRl
cmF0b3I7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVJlZigqaXRlci0+dmFsdWUpOwogICAgICAg
ICB9CkBAIC01MjAsMTIgKzUyMiwxNSBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNldElEQlJv
b3RQYXRoKGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgpIHsgbV9pZGJSb290UGF0aCA9IGlkYlJv
b3RQYXRoOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgaWRiUm9vdFBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX2lkYlJvb3RQYXRoOyB9CiAKKyAgICAgICAgV29ya1F1ZXVlJiB3b3JrUXVldWUoKSB7
IHJldHVybiBtX3dvcmtRdWV1ZTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIG1f
Y2FjaGVSb290UGF0aDsKICAgICAgICAgU3RyaW5nIG1faWRiUm9vdFBhdGg7CiAgICAgICAgIHVp
bnQ2NF90IG1fZGVmYXVsdFF1b3RhIHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVm
YXVsdFF1b3RhKCkgfTsKICAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3Rh
IHsgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFRoaXJkUGFydHlRdW90YSgp
IH07CiAgICAgICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBSZWZQdHI8V2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnM7CisgICAgICAg
IFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwogICAgIH07CiAgICAgdm9pZCBhZGRTZXNzaW9u
U3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgdWludDY0X3QgZGVmYXVsdFF1b3Rh
LCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJpbmcmIGNhY2hlUm9v
dFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlU2Vzc2lv
blN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQpOwpAQCAtNTg3LDcgKzU5Miw2IEBA
IHByaXZhdGU6CiAKICAgICBMb2NrIG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jazsK
ICAgICBIYXNoTWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8U2Vzc2lvblN0b3Jh
Z2VRdW90YU1hbmFnZXI+PiBtX3Nlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VycyBXVEZfR1VBUkRF
RF9CWV9MT0NLKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7Ci0gICAgYm9vbCBt
X3F1b3RhTG9nZ2luZ0VuYWJsZWQgeyBmYWxzZSB9OwogCiAgICAgT3B0aW9uU2V0PE5ldHdvcmtD
YWNoZTo6Q2FjaGVPcHRpb24+IG1fY2FjaGVPcHRpb25zOwogICAgIFdlYkNvcmU6Ok1lc3NhZ2VQ
b3J0Q2hhbm5lbFJlZ2lzdHJ5IG1fbWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZS5jcHAKaW5kZXggMmFjZTUxYzYxMDhlMjM1ZjgwNjFkYzJlODg5OWJkNTZiZDc4MjM4Mi4u
ZmYyMDU1MmI5N2ZjNmRjNmVmM2VhYWMwN2UzNjJkMmRkYmNlYTI1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
LmNwcApAQCAtMjQ2LDE2ICsyNDYsMjUgQEAgdWludDY0X3QgRW5naW5lOjpkaXNrVXNhZ2UoY29u
c3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJgogCiB2b2lk
IEVuZ2luZTo6cmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYgb3JpZ2lu
LCB1aW50NjRfdCBzcGFjZVJlcXVlc3RlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYgY2FsbGJhY2spCiB7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0g
ICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAgIGlmICghbV9pb1F1ZXVlIHx8ICFtX25ldHdv
cmtQcm9jZXNzKSB7CiAgICAgICAgIGNhbGxiYWNrKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFn
ZXI6OkRlY2lzaW9uOjpEZW55KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFJlZlB0
cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPiBzdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9u
ZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihtX3Nlc3Npb25JRCwgb3JpZ2luKTsK
LSAgICBpZiAoIXN0b3JhZ2VRdW90YU1hbmFnZXIpCisgICAgYXV0byBzdG9yYWdlUXVvdGFNYW5h
Z2VyID0gbV9uZXR3b3JrUHJvY2Vzcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihtX3Nlc3Npb25JRCwg
b3JpZ2luKTsKKyAgICBpZiAoIXN0b3JhZ2VRdW90YU1hbmFnZXIpIHsKICAgICAgICAgY2FsbGJh
Y2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNl
T25NYWluVGhyZWFkKHNwYWNlUmVxdWVzdGVkLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgbV9p
b1F1ZXVlLT5kaXNwYXRjaChbc3RvcmFnZVF1b3RhTWFuYWdlciwgc3BhY2VSZXF1ZXN0ZWQsIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gc3RvcmFnZVF1b3RhTWFuYWdlci0+cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFk
KHNwYWNlUmVxdWVzdGVkKTsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtyZXN1
bHQsIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAogRW5naW5lOjpF
bmdpbmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2VzcyYgcHJvY2Vzcywg
U3RyaW5nJiYgcm9vdFBhdGgpCkBAIC0yNjMsOCArMjcyLDcgQEAgRW5naW5lOjpFbmdpbmUoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2VzcyYgcHJvY2VzcywgU3RyaW5nJiYg
cm9vdFAKICAgICAsIG1fbmV0d29ya1Byb2Nlc3MobWFrZVdlYWtQdHIocHJvY2VzcykpCiAgICAg
LCBtX3Jvb3RQYXRoKFdURk1vdmUocm9vdFBhdGgpKQogewotICAgIGlmICghbV9yb290UGF0aC5p
c051bGwoKSkKLSAgICAgICAgbV9pb1F1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuQ2FjaGVTdG9yYWdlRW5naW5lLnNlcmlhbC5kZWZhdWx0IiwgV29ya1F1ZXVlOjpU
eXBlOjpTZXJpYWwsIFdvcmtRdWV1ZTo6UU9TOjpEZWZhdWx0KTsKKyAgICBtX2lvUXVldWUgPSBt
X25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlU2Vzc2lvblF1ZXVlKG1fc2Vzc2lvbklEKTsKIH0KIAog
dm9pZCBFbmdpbmU6Om9wZW4oY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgY2FjaGVOYW1lLCBDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmIGNhbGxiYWNr
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lLmgKaW5kZXggNDQwOWU3YjQ5NmFiOGNmNjQ2YzlhMGZmYWVkZjU3MzRjMGZm
MWU4OC4uMDIxY2ExZjYyZDY3MWQ4ZDA4NTFmNjQwYTAyZThkZWUyNmYyMTI0MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZS5oCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdWludDY0X3QgZGlz
a1VzYWdlKGNvbnN0IFN0cmluZyYgcm9vdFBhdGgsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biYpOwogICAgIHZvaWQgcmVxdWVzdFNwYWNlKGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYs
IHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7CiAKLSAgICBib29sIHNob3VsZFBl
cnNpc3QoKSBjb25zdCB7IHJldHVybiAhIW1faW9RdWV1ZTt9CisgICAgYm9vbCBzaG91bGRQZXJz
aXN0KCkgY29uc3QgeyByZXR1cm4gIW1fcm9vdFBhdGguaXNOdWxsKCk7IH0KIAogICAgIHZvaWQg
d3JpdGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIE5ldHdvcmtDYWNoZTo6RGF0YSYmLCBX
ZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOwogICAgIHZvaWQg
cmVhZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBOZXR3b3JrQ2FjaGU6OkRhdGEmLCBpbnQgZXJyb3IpPiYmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwIGIvU291cmNl
L1dlYktpdExlZ2FjeS9TdG9yYWdlL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAKaW5kZXggYWIwZTkw
OTg4YjQ5ZDAzOTUyYjFlN2U1ODIyNjdjYTExYTZlOTE4MS4uNzIyNTJlNzU3Y2EwNWRkODIyMTlh
ZjFlYzBlNTU5N2Y4OTUxZDM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9y
YWdlL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9y
YWdlL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAKQEAgLTcxLDEyICs3MSwxMiBAQCBJblByb2Nlc3NJ
REJTZXJ2ZXI6On5JblByb2Nlc3NJREJTZXJ2ZXIoKQogCiBTdG9yYWdlUXVvdGFNYW5hZ2VyKiBJ
blByb2Nlc3NJREJTZXJ2ZXI6OnF1b3RhTWFuYWdlcihjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdp
bikKIHsKLSAgICByZXR1cm4gbV9xdW90YU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFtdIHsKKyAg
ICByZXR1cm4gbV9xdW90YU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFt3b3JrUXVldWUgPSBtX3dv
cmtRdWV1ZV0gewogICAgICAgICByZXR1cm4gU3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKFN0
b3JhZ2VRdW90YU1hbmFnZXI6OmRlZmF1bHRRdW90YSgpLCBbXSB7CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfSwgW10odWludDY0X3QgcXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRTcGFj
ZSwgdWludDY0X3Qgc3BhY2VJbmNyZWFzZSwgYXV0byBjYWxsYmFjaykgewogICAgICAgICAgICAg
Y2FsbGJhY2socXVvdGEgKyBjdXJyZW50U3BhY2UgKyBzcGFjZUluY3JlYXNlKTsKLSAgICAgICAg
fSk7CisgICAgICAgIH0sIHdvcmtRdWV1ZS5jb3B5UmVmKCkpOwogICAgIH0pLml0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKIH0KIApAQCAtOTAsNiArOTAsNyBAQCBzdGF0aWMgaW5saW5lIElEQlNlcnZl
cjo6SURCU2VydmVyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyU3BhY2VSZXF1ZXN0ZXIgc3RvcmFnZVF1
bwogCiBJblByb2Nlc3NJREJTZXJ2ZXI6OkluUHJvY2Vzc0lEQlNlcnZlcihQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQogICAgIDog
bV90aHJlYWQobWFrZVVuaXF1ZTxTdG9yYWdlVGhyZWFkPihTdG9yYWdlVGhyZWFkOjpUeXBlOjpJ
bmRleGVkREIpKQorICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoIkluUHJvY2Vz
c0lEQlNlcnZlciBRdWV1ZSIpKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
bV9jb25uZWN0aW9uVG9TZXJ2ZXIgPSBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6
Y3JlYXRlKCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9J
blByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9JblByb2Nl
c3NJREJTZXJ2ZXIuaAppbmRleCA2Y2I4ZjdlZjlhZmU1OWJmNGVlNjRhODRiNDExMDY4YTg2ZmFl
MGFjLi42N2JkYTNhNjQ2MDQxOWY0ZmMwZTM2NjAxMTI5Y2U0YTI5YWFlM2YxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC0xMzMs
NCArMTMzLDUgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U3RvcmFn
ZVRocmVhZD4gbV90aHJlYWQ7CiAKICAgICBIYXNoTWFwPFdlYkNvcmU6OkNsaWVudE9yaWdpbiwg
UmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+PiBtX3F1b3RhTWFuYWdlcnM7Cisg
ICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiB9Owo=
</data>
<flag name="commit-queue"
          id="451198"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429909</attachid>
            <date>2021-05-27 12:00:11 -0700</date>
            <delta_ts>2021-05-27 19:07:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226277-20210527120010.patch</filename>
            <type>text/plain</type>
            <size>16918</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY5MzI0MWM3MTViNTI5
ZjhkY2Q5NTVlNTc1YmEyMzZiODU5MjQwYi4uZTA3ODUxYzcxMzNlYWM3ZDQ0OWM1MTk4Y2I2ZDNj
ZmYzZTk4ZTQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTI3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQ2FjaGVTdG9yYWdl
RW5naW5lIHVzZSB0aGUgc2FtZSBXb3JrUXVldWUgYXMgU3RvcmFnZVF1b3RhTWFuYWdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2Mjc3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IFN0b3JhZ2VR
dW90YU1hbmFnZXIgdGFrZSBhIFdvcmtRdWV1ZSBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorCiAyMDIxLTA1LTI3ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhbmltYXRpb25z
IHRvIEdyYXBoaWNzTGF5ZXIgbG9nZ2luZyBvdXRwdXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGNiMDcyMGM3ZmFi
ZGY0NjY3OThhMmU4ZmQxMWFkYjBhZTI2ZDNmMi4uY2I5ZmYyZGQzODQ3OTczZmZhOGRmMzQ5ZDUx
MWI1YWNiNzljZGNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMS0wNS0yNyAgU2lo
dWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhY2hlU3RvcmFn
ZUVuZ2luZSB1c2UgdGhlIHNhbWUgV29ya1F1ZXVlIGFzIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjI3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ugb25lIFdv
cmtRdWV1ZSBwZXIgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIgYW5kIHVzZSBpdCBmb3IgYm90
aCBTdG9yYWdlUXVvdGFNYW5hZ2FyIGFuZCBDYWNoZVN0b3JhZ2VFbmdpbmUuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvblF1ZXVlKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6
U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyOjplbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyOjp3b3JrUXVldWUpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpyZXF1ZXN0U3BhY2UpOgorICAg
ICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6RW5naW5lKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaDoKKyAgICAgICAgKFdlYktp
dDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnNob3VsZFBlcnNpc3QgY29uc3QpOgorCiAyMDIxLTA1
LTI3ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2FsbGluZyAt
W1dLV2ViVmlldyBfY2xvc2VBbGxNZWRpYVByZXNlbnRhdGlvbnNdIGNyYXNoZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cKaW5kZXggN2E1YTFjYWU0YzExYjg2NTAzZGY2MWMwYTg5MzRmOTkwZjE1MGM0Mi4u
MjFjNjBkNTBhYjUwYTU3Y2JkMjlkMWFlYTdlNjFiNGM4OTU2NzJlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0yNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhY2hlU3RvcmFnZUVuZ2luZSB1c2UgdGhlIHNh
bWUgV29ya1F1ZXVlIGFzIFN0b3JhZ2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjI3NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIu
Y3BwOgorICAgICAgICAoSW5Qcm9jZXNzSURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgorICAgICAg
ICAoSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIpOgorICAgICAgICAqIFN0
b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRM
aXRlcmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNw
cAppbmRleCAzNzFkMzNiNmYxNTY3N2I3MWNiOTUwMGU5MmVlMjA5MzIzZTIzNmI0Li4zYjRiM2Fj
NDI4N2U1ZmQyY2ZjODBmYTEwMTNhY2FhY2QwNGYxNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHAKQEAgLTMzLDQyICszMywyMCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBTdG9yYWdlUXVv
dGFNYW5hZ2VyOjpjcmVhdGUodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0
ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQorUmVm
PFN0b3JhZ2VRdW90YU1hbmFnZXI+IFN0b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSh1aW50NjRf
dCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3Rl
ciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIsIFJlZjxXb3JrUXVldWU+JiYgcXVldWUpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RvcmFnZVF1b3RhTWFuYWdlcihxdW90YSwgV1RGTW92
ZSh1c2FnZUdldHRlciksIFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9yYWdlUXVvdGFNYW5hZ2VyKHF1b3RhLCBXVEZNb3ZlKHVz
YWdlR2V0dGVyKSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSwgV1RGTW92ZShxdWV1
ZSkpKTsKIH0KIAotU3RvcmFnZVF1b3RhTWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50
NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVl
c3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVy
LCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciwgUmVmPFdv
cmtRdWV1ZT4mJiBxdWV1ZSkKICAgICA6IG1fcXVvdGEocXVvdGEpCiAgICAgLCBtX3VzYWdlR2V0
dGVyKFdURk1vdmUodXNhZ2VHZXR0ZXIpKQogICAgICwgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVy
KFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpCi0gICAgLCBtX3dvcmtRdWV1ZShXb3Jr
UXVldWU6OmNyZWF0ZSgiU3RvcmFnZVF1b3RhTWFuYWdlciBCYWNrZ3JvdW5kIFF1ZXVlIiwgV29y
a1F1ZXVlOjpUeXBlOjpTZXJpYWwpKQorICAgICwgbV93b3JrUXVldWUocXVldWUpCiAgICAgLCBt
X2luaXRpYWxRdW90YShxdW90YSkKIHsKIH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpy
ZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQodWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIFJlcXVlc3RD
YWxsYmFjayYmIGNhbGxiYWNrKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICAvLyBGYXN0IHBhdGguCi0gICAgaWYgKG1fcXVvdGFDb3VudERvd25Mb2NrLnRyeUxvY2soKSkg
ewotICAgICAgICBpZiAodHJ5R3JhbnRSZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkgewotICAgICAg
ICAgICAgbV9xdW90YUNvdW50RG93bkxvY2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBjYWxsYmFj
ayhEZWNpc2lvbjo6R3JhbnQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIG1fcXVvdGFDb3VudERvd25Mb2NrLnVubG9jaygpOwotICAgIH0KLQotICAgIG1fd29ya1F1
ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFj
ZVJlcXVlc3RlZCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgYXV0byBkZWNpc2lvbiA9IHJlcXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFj
ZVJlcXVlc3RlZCk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIGRlY2lzaW9uXSgpIG11dGFibGUgewotICAgICAgICAgICAgY2FsbGJhY2so
ZGVjaXNpb24pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogU3RvcmFnZVF1b3RhTWFuYWdl
cjo6RGVjaXNpb24gU3RvcmFnZVF1b3RhTWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5k
VGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkKQogewogICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApp
bmRleCA1YjM1NjU3MmQ0OGJiNDI3NTljYTFlZjVhNDU5MGM4YzAyMzY0ZTc4Li5mMjMzYjNhMDgz
ZmIxMTUzZDI4OTAzODU0MGM5OGE5YjhlZjFjYjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBTdG9yYWdl
UXVvdGFNYW5hZ2VyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VRdW90YU1h
bmFnZXI+LCBwdQogcHVibGljOgogICAgIHVzaW5nIFVzYWdlR2V0dGVyID0gRnVuY3Rpb248dWlu
dDY0X3QoKT47CiAgICAgdXNpbmcgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IEZ1bmN0aW9uPHZv
aWQodWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90
IHJlcXVlc3RlZEluY3JlYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2
NF90Pik+JiYpPjsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1h
bmFnZXI+IGNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFz
ZVJlcXVlc3RlciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90
YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNy
ZWFzZVJlcXVlc3RlciYmLCBSZWY8V29ya1F1ZXVlPiYmKTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDY0X3QgZGVmYXVsdFRoaXJkUGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50
NjRfdCBxdW90YSkgeyByZXR1cm4gcXVvdGEgLyAxMDsgfQogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDY0X3QgZGVmYXVsdFF1b3RhKCkgeyByZXR1cm4gMTAwMCAqIE1COyB9CkBAIC00NiwxMyAr
NDYsMTIgQEAgcHVibGljOgogCiAgICAgZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50
IH07CiAgICAgdXNpbmcgUmVxdWVzdENhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChE
ZWNpc2lvbik+OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWluVGhy
ZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2FsbGJhY2smJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRGVj
aXNpb24gcmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90KTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRRdW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2VGb3JUZXN0aW5n
KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldFF1b3RhRm9yVGVzdGluZygpOwogcHJp
dmF0ZToKLSAgICBTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRl
ciYmLCBRdW90YUluY3JlYXNlUmVxdWVzdGVyJiYpOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIo
dWludDY0X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiwg
UmVmPFdvcmtRdWV1ZT4mJik7CiAgICAgYm9vbCB0cnlHcmFudFJlcXVlc3QodWludDY0X3QpIFdU
Rl9SRVFVSVJFU19MT0NLKG1fcXVvdGFDb3VudERvd25Mb2NrKTsKIAogICAgIHZvaWQgdXBkYXRl
UXVvdGFCYXNlZE9uVXNhZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMzY0YzIzNjE4YjNjZTI1ZTBjNDNiNTRiZjUzODU4MmFk
YWI4MzE5Mi4uMWM5MGNlNjY2N2FkZGYwNGY4ZDRjZWU2NmZhMTEwNThiYTkxZDZjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTI1
MTYsNiArMjUxNiwxNiBAQCBSZWZQdHI8U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nl
c3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgcwogICAgIHJldHVybiBvcmln
aW5TdG9yYWdlUXVvdGFNYW5hZ2VyOwogfQogCitSZWZQdHI8V29ya1F1ZXVlPiBOZXR3b3JrUHJv
Y2Vzczo6c3RvcmFnZVNlc3Npb25RdWV1ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayB9Owor
ICAgIGF1dG8qIHNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1
b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25JRCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gbWFrZVJlZlB0
cihzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlci0+d29ya1F1ZXVlKCkpOworfQorCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29u
c3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXggMDgzMzgyYzk5
YTA3YjI2ZmQ1ODkyMWM1Yzg3ZTJhNjFiMjEwNzYxYy4uYzZkMWNiMzllOWU4ZjliZDRmMzBmNjg1
NjRiMDQwOWIxMDMxM2ExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuaApAQCAtMzQ2LDYgKzM0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBD
TUZyYXVkUHJldmVudGlvblZhbHVlc0ZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIFN0cmluZyYm
IHVubGlua2FibGVUb2tlbiwgU3RyaW5nJiYgc2VjcmV0VG9rZW4sIFN0cmluZyYmIHNpZ25hdHVy
ZSwgU3RyaW5nJiYga2V5SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICBS
ZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlcihQ
QUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRy
PFdvcmtRdWV1ZT4gc3RvcmFnZVNlc3Npb25RdWV1ZShQQUw6OlNlc3Npb25JRCk7CiAKICAgICB2
b2lkIGFkZEtlcHRBbGl2ZUxvYWQoUmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAg
dm9pZCByZW1vdmVLZXB0QWxpdmVMb2FkKE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNTAx
LDE0ICs1MDIsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIDogbV9jYWNoZVJvb3RQYXRoKGNh
Y2hlUm9vdFBhdGgpCiAgICAgICAgICAgICAsIG1fZGVmYXVsdFF1b3RhKGRlZmF1bHRRdW90YSkK
ICAgICAgICAgICAgICwgbV9kZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKGRlZmF1bHRUaGlyZFBhcnR5
UXVvdGEpCisgICAgICAgICAgICAsIG1fd29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJTdG9y
YWdlIFNlc3Npb24gUXVldWUiKSkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIHVpbnQ2
NF90IGRlZmF1bHRRdW90YShjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29u
c3QgeyByZXR1cm4gb3JpZ2luLnRvcE9yaWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9k
ZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGE7IH0KIAogICAgICAgICBSZWY8
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFu
YWdlcihXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5j
cmVhc2VSZXF1ZXN0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fc3Rv
cmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJlKG9yaWdpbiwgW3F1b3RhLCB1c2FnZUdldHRlciA9IFdU
Rk1vdmUodXNhZ2VHZXR0ZXIpLCBxdW90YUluY3JlYXNlUmVxdWVzdGVyID0gV1RGTW92ZShxdW90
YUluY3JlYXNlUmVxdWVzdGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6Y3JlYXRlKHF1b3RhLCBXVEZNb3ZlKHVzYWdl
R2V0dGVyKSwgV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKSk7CisgICAgICAgICAgICBh
dXRvIGl0ZXIgPSBtX3N0b3JhZ2VRdW90YU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFtxdW90YSwg
dXNhZ2VHZXR0ZXIgPSBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgcXVvdGFJbmNyZWFzZVJlcXVlc3Rl
ciA9IFdURk1vdmUocXVvdGFJbmNyZWFzZVJlcXVlc3RlciksIHF1ZXVlID0gbV93b3JrUXVldWUu
Y29weVJlZigpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBX
VEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpLCBXVEZNb3ZlKHF1ZXVlKSk7CiAgICAgICAg
ICAgICB9KS5pdGVyYXRvcjsKICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmKCppdGVyLT52YWx1
ZSk7CiAgICAgICAgIH0KQEAgLTUyMCwxMiArNTIyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHZv
aWQgc2V0SURCUm9vdFBhdGgoY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCkgeyBtX2lkYlJvb3RQ
YXRoID0gaWRiUm9vdFBhdGg7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCgp
IGNvbnN0IHsgcmV0dXJuIG1faWRiUm9vdFBhdGg7IH0KIAorICAgICAgICBXb3JrUXVldWUmIHdv
cmtRdWV1ZSgpIHsgcmV0dXJuIG1fd29ya1F1ZXVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAg
ICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRoOwogICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsK
ICAgICAgICAgdWludDY0X3QgbV9kZWZhdWx0UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFN
YW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9OwogICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRUaGly
ZFBhcnR5UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQ
YXJ0eVF1b3RhKCkgfTsKICAgICAgICAgSGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIFJl
ZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyPj4gbV9zdG9yYWdlUXVvdGFNYW5hZ2Vy
czsKKyAgICAgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAgICAgfTsKICAgICB2b2lk
IGFkZFNlc3Npb25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBk
ZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmlu
ZyYgY2FjaGVSb290UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCBy
ZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CkBAIC01ODcs
NyArNTkyLDYgQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlcnNMb2NrOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxT
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJz
IFdURl9HVUFSREVEX0JZX0xPQ0sobV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsK
LSAgICBib29sIG1fcXVvdGFMb2dnaW5nRW5hYmxlZCB7IGZhbHNlIH07CiAKICAgICBPcHRpb25T
ZXQ8TmV0d29ya0NhY2hlOjpDYWNoZU9wdGlvbj4gbV9jYWNoZU9wdGlvbnM7CiAgICAgV2ViQ29y
ZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVnaXN0cnkgbV9tZXNzYWdlUG9ydENoYW5uZWxSZWdpc3Ry
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lLmNwcAppbmRleCAyYWNlNTFjNjEwOGUyMzVmODA2MWRjMmU4ODk5YmQ1
NmJkNzgyMzgyLi5mZjIwNTUyYjk3ZmM2ZGM2ZWYzZWFhYzA3ZTM2MmQyZGRiY2VhMjU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmUuY3BwCkBAIC0yNDYsMTYgKzI0NiwyNSBAQCB1aW50NjRfdCBFbmdpbmU6OmRp
c2tVc2FnZShjb25zdCBTdHJpbmcmIHJvb3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mCiAKIHZvaWQgRW5naW5lOjpyZXF1ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJiBvcmlnaW4sIHVpbnQ2NF90IHNwYWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykK
IHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKLSAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgaWYgKCFtX2lvUXVldWUg
fHwgIW1fbmV0d29ya1Byb2Nlc3MpIHsKICAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFn
ZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246OkRlbnkpOworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1h
bmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklE
LCBvcmlnaW4pOwotICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICBhdXRvIHN0b3Jh
Z2VRdW90YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1f
c2Vzc2lvbklELCBvcmlnaW4pOworICAgIGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikgewogICAg
ICAgICBjYWxsYmFjayhXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVu
eSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5y
ZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQoc3BhY2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyAgICBtX2lvUXVldWUtPmRpc3BhdGNoKFtzdG9yYWdlUXVvdGFNYW5hZ2VyLCBzcGFjZVJl
cXVlc3RlZCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VPbkJhY2tn
cm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0ZWQpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3Jlc3VsdCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgIH0pOworICAgIH0pOwogfQog
CiBFbmdpbmU6OkVuZ2luZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNz
JiBwcm9jZXNzLCBTdHJpbmcmJiByb290UGF0aCkKQEAgLTI2Myw4ICsyNzIsNyBAQCBFbmdpbmU6
OkVuZ2luZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNz
LCBTdHJpbmcmJiByb290UAogICAgICwgbV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihwcm9j
ZXNzKSkKICAgICAsIG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0aCkpCiB7Ci0gICAgaWYgKCFt
X3Jvb3RQYXRoLmlzTnVsbCgpKQotICAgICAgICBtX2lvUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0
ZSgiY29tLmFwcGxlLldlYktpdC5DYWNoZVN0b3JhZ2VFbmdpbmUuc2VyaWFsLmRlZmF1bHQiLCBX
b3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OkRlZmF1bHQpOworICAgIG1f
aW9RdWV1ZSA9IG1fbmV0d29ya1Byb2Nlc3MtPnN0b3JhZ2VTZXNzaW9uUXVldWUobV9zZXNzaW9u
SUQpOwogfQogCiB2b2lkIEVuZ2luZTo6b3Blbihjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4m
IG9yaWdpbiwgY29uc3QgU3RyaW5nJiBjYWNoZU5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNr
JiYgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaAppbmRleCA0NDA5ZTdiNDk2YWI4Y2Y2NDZjOWEwZmZh
ZWRmNTczNGMwZmYxZTg4Li4wMjFjYTFmNjJkNjcxZDhkMDg1MWY2NDBhMDJlOGRlZTI2ZjIxMjQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lLmgKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB1
aW50NjRfdCBkaXNrVXNhZ2UoY29uc3QgU3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6
Q2xpZW50T3JpZ2luJik7CiAgICAgdm9pZCByZXF1ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xp
ZW50T3JpZ2luJiwgdWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKIAotICAgIGJv
b2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9pb1F1ZXVlO30KKyAgICBib29s
IHNob3VsZFBlcnNpc3QoKSBjb25zdCB7IHJldHVybiAhbV9yb290UGF0aC5pc051bGwoKTsgfQog
CiAgICAgdm9pZCB3cml0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgTmV0d29ya0NhY2hl
OjpEYXRhJiYsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7
CiAgICAgdm9pZCByZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0YSYsIGludCBlcnJvcik+JiYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL0luUHJvY2Vzc0lEQlNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApp
bmRleCBhYjBlOTA5ODhiNDlkMDM5NTJiMWU3ZTU4MjI2N2NhMTFhNmU5MTgxLi43MjI1MmU3NTdj
YTA1ZGQ4MjIxOWFmMWVjMGU1NTk3Zjg5NTFkMzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtNzEsMTIgKzcxLDEyIEBA
IEluUHJvY2Vzc0lEQlNlcnZlcjo6fkluUHJvY2Vzc0lEQlNlcnZlcigpCiAKIFN0b3JhZ2VRdW90
YU1hbmFnZXIqIEluUHJvY2Vzc0lEQlNlcnZlcjo6cXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9y
aWdpbiYgb3JpZ2luKQogewotICAgIHJldHVybiBtX3F1b3RhTWFuYWdlcnMuZW5zdXJlKG9yaWdp
biwgW10geworICAgIHJldHVybiBtX3F1b3RhTWFuYWdlcnMuZW5zdXJlKG9yaWdpbiwgW3dvcmtR
dWV1ZSA9IG1fd29ya1F1ZXVlXSB7CiAgICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2Vy
OjpjcmVhdGUoU3RvcmFnZVF1b3RhTWFuYWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdIHsKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9LCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3Qg
Y3VycmVudFNwYWNlLCB1aW50NjRfdCBzcGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CiAg
ICAgICAgICAgICBjYWxsYmFjayhxdW90YSArIGN1cnJlbnRTcGFjZSArIHNwYWNlSW5jcmVhc2Up
OwotICAgICAgICB9KTsKKyAgICAgICAgfSwgd29ya1F1ZXVlLmNvcHlSZWYoKSk7CiAgICAgfSku
aXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCkBAIC05MCw2ICs5MCw3IEBAIHN0YXRpYyBpbmxp
bmUgSURCU2VydmVyOjpJREJTZXJ2ZXI6OlN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3Rl
ciBzdG9yYWdlUXVvCiAKIEluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBh
dGgpCiAgICAgOiBtX3RocmVhZChtYWtlVW5pcXVlPFN0b3JhZ2VUaHJlYWQ+KFN0b3JhZ2VUaHJl
YWQ6OlR5cGU6OkluZGV4ZWREQikpCisgICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0
ZSgiSW5Qcm9jZXNzSURCU2VydmVyIFF1ZXVlIikpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlv
blRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL0luUHJvY2Vzc0lEQlNlcnZlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9y
YWdlL0luUHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IDZjYjhmN2VmOWFmZTU5YmY0ZWU2NGE4NGI0
MTEwNjhhODZmYWUwYWMuLjY3YmRhM2E2NDYwNDE5ZjRmYzBlMzY2MDExMjljZTRhMjlhYWUzZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVy
LmgKQEAgLTEzMyw0ICsxMzMsNSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTdG9yYWdlVGhyZWFkPiBtX3RocmVhZDsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xp
ZW50T3JpZ2luLCBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFN
YW5hZ2VyczsKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430022</attachid>
            <date>2021-05-28 10:10:26 -0700</date>
            <delta_ts>2021-05-28 10:10:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226277-20210528101025.patch</filename>
            <type>text/plain</type>
            <size>19867</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI4ZmIwMmEyYjRhNzIy
OTk2ZmE0ZDAxNDZiMDk3N2I5MzQxNzk5My4uODM0YTViMTdkOTk2ZjgyMjU3MGZlZmMxNjIwNGY5
ZjJjNGI0ODQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTI4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQ2FjaGVTdG9yYWdl
RW5naW5lIHVzZSB0aGUgc2FtZSBXb3JrUXVldWUgYXMgU3RvcmFnZVF1b3RhTWFuYWdlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2Mjc3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0IFN0b3JhZ2VR
dW90YU1hbmFnZXIgdGFrZSBhIFdvcmtRdWV1ZSBpbiBjb25zdHJ1Y3Rvci4KKworICAgICAgICAq
IHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
UXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oOgorCiAyMDIxLTA1LTI3ICBTaWh1aSBM
aXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFiYW5kb24gcGVuZGluZyB0YXNr
cyBvbiBiYWNrZ3JvdW5kIHRocmVhZCB3aGVuIFdlYklEQlNlcnZlciBpcyBjbG9zZWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggODM4ZGM0NzI0YzlhYThmNDYwM2Q4ZjNkNjBmMDU5YzE4MzI4YTNmYi4uMTg1YzI3YzYy
NTNhOWYxNWI1OGEzYmVhMGEyMWE4MmEwMzQ1YzIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBA
QAorMjAyMS0wNS0yOCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIENhY2hlU3RvcmFnZUVuZ2luZSB1c2UgdGhlIHNhbWUgV29ya1F1ZXVlIGFzIFN0b3Jh
Z2VRdW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNjI3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1ha2Ugb25lIFdvcmtRdWV1ZSBwZXIgU2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXIg
YW5kIHVzZSBpdCBmb3IgYm90aCBTdG9yYWdlUXVvdGFNYW5hZ2FyIGFuZCBDYWNoZVN0b3JhZ2VF
bmdpbmUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzdG9yYWdlU2Vzc2lvblF1ZXVlKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6U2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXI6OlNlc3Npb25TdG9y
YWdlUXVvdGFNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyOjplbnN1cmVPcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OlNlc3Npb25TdG9yYWdlUXVvdGFNYW5h
Z2VyOjp3b3JrUXVldWUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6RW5naW5lOjpy
ZXF1ZXN0U3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkVuZ2luZTo6RW5n
aW5lKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUu
aDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpFbmdpbmU6OnNob3VsZFBlcnNpc3Qg
Y29uc3QpOgorCiAyMDIxLTA1LTI3ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgog
CiAgICAgICAgIEFiYW5kb24gcGVuZGluZyB0YXNrcyBvbiBiYWNrZ3JvdW5kIHRocmVhZCB3aGVu
IFdlYklEQlNlcnZlciBpcyBjbG9zZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggN2E1YTFjYWU0
YzExYjg2NTAzZGY2MWMwYTg5MzRmOTkwZjE1MGM0Mi4uOWYyMzhlNmFhYmZkY2Y5MjIzMzE1NjYz
YWYwZThlYTA3MjBlYTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAyMS0wNS0yOCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIENhY2hlU3RvcmFnZUVuZ2luZSB1c2UgdGhlIHNhbWUgV29ya1F1ZXVlIGFzIFN0b3JhZ2VR
dW90YU1hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNjI3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAoSW5Qcm9jZXNz
SURCU2VydmVyOjpxdW90YU1hbmFnZXIpOgorICAgICAgICAoSW5Qcm9jZXNzSURCU2VydmVyOjpJ
blByb2Nlc3NJREJTZXJ2ZXIpOgorICAgICAgICAqIFN0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVy
Lmg6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRMaXRlcmFsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmNwcAppbmRleCAzNzFkMzNiNmYxNTY3N2I3
MWNiOTUwMGU5MmVlMjA5MzIzZTIzNmI0Li4zYjRiM2FjNDI4N2U1ZmQyY2ZjODBmYTEwMTNhY2Fh
Y2QwNGYxNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90
YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5jcHAKQEAgLTMzLDQyICszMywyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
ZjxTdG9yYWdlUXVvdGFNYW5hZ2VyPiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUodWludDY0
X3QgcXVvdGEsIFVzYWdlR2V0dGVyJiYgdXNhZ2VHZXR0ZXIsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXImJiBxdW90YUluY3JlYXNlUmVxdWVzdGVyKQorUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IFN0
b3JhZ2VRdW90YU1hbmFnZXI6OmNyZWF0ZSh1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXImJiB1
c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0
ZXIsIFJlZjxXb3JrUXVldWU+JiYgcXVldWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3RvcmFnZVF1b3RhTWFuYWdlcihxdW90YSwgV1RGTW92ZSh1c2FnZUdldHRlciksIFdURk1vdmUo
cXVvdGFJbmNyZWFzZVJlcXVlc3RlcikpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdG9y
YWdlUXVvdGFNYW5hZ2VyKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90
YUluY3JlYXNlUmVxdWVzdGVyKSwgV1RGTW92ZShxdWV1ZSkpKTsKIH0KIAotU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6U3RvcmFnZVF1b3RhTWFuYWdlcih1aW50NjRfdCBxdW90YSwgVXNhZ2VHZXR0ZXIm
JiB1c2FnZUdldHRlciwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXIpCitTdG9yYWdlUXVvdGFNYW5hZ2VyOjpTdG9yYWdlUXVvdGFNYW5hZ2VyKHVpbnQ2NF90
IHF1b3RhLCBVc2FnZUdldHRlciYmIHVzYWdlR2V0dGVyLCBRdW90YUluY3JlYXNlUmVxdWVzdGVy
JiYgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciwgUmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSkKICAgICA6
IG1fcXVvdGEocXVvdGEpCiAgICAgLCBtX3VzYWdlR2V0dGVyKFdURk1vdmUodXNhZ2VHZXR0ZXIp
KQogICAgICwgbV9xdW90YUluY3JlYXNlUmVxdWVzdGVyKFdURk1vdmUocXVvdGFJbmNyZWFzZVJl
cXVlc3RlcikpCi0gICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiU3RvcmFnZVF1
b3RhTWFuYWdlciBCYWNrZ3JvdW5kIFF1ZXVlIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwpKQor
ICAgICwgbV93b3JrUXVldWUocXVldWUpCiAgICAgLCBtX2luaXRpYWxRdW90YShxdW90YSkKIHsK
IH0KIAotdm9pZCBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpyZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQo
dWludDY0X3Qgc3BhY2VSZXF1ZXN0ZWQsIFJlcXVlc3RDYWxsYmFjayYmIGNhbGxiYWNrKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBGYXN0IHBhdGguCi0gICAgaWYg
KG1fcXVvdGFDb3VudERvd25Mb2NrLnRyeUxvY2soKSkgewotICAgICAgICBpZiAodHJ5R3JhbnRS
ZXF1ZXN0KHNwYWNlUmVxdWVzdGVkKSkgewotICAgICAgICAgICAgbV9xdW90YUNvdW50RG93bkxv
Y2sudW5sb2NrKCk7Ci0gICAgICAgICAgICBjYWxsYmFjayhEZWNpc2lvbjo6R3JhbnQpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fcXVvdGFDb3VudERvd25Mb2Nr
LnVubG9jaygpOwotICAgIH0KLQotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBzcGFjZVJlcXVlc3RlZCwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byBkZWNpc2lvbiA9IHJl
cXVlc3RTcGFjZU9uQmFja2dyb3VuZFRocmVhZChzcGFjZVJlcXVlc3RlZCk7Ci0gICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIGRlY2lzaW9uXSgp
IG11dGFibGUgewotICAgICAgICAgICAgY2FsbGJhY2soZGVjaXNpb24pOwotICAgICAgICB9KTsK
LSAgICB9KTsKLX0KLQogU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24gU3RvcmFnZVF1b3Rh
TWFuYWdlcjo6cmVxdWVzdFNwYWNlT25CYWNrZ3JvdW5kVGhyZWFkKHVpbnQ2NF90IHNwYWNlUmVx
dWVzdGVkKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaAppbmRleCA1YjM1NjU3MmQ0OGJiNDI3NTlj
YTFlZjVhNDU5MGM4YzAyMzY0ZTc4Li5mMjMzYjNhMDgzZmIxMTUzZDI4OTAzODU0MGM5OGE5Yjhl
ZjFjYjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1h
bmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIu
aApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBTdG9yYWdlUXVvdGFNYW5hZ2VyIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFN0b3JhZ2VRdW90YU1hbmFnZXI+LCBwdQogcHVibGljOgogICAg
IHVzaW5nIFVzYWdlR2V0dGVyID0gRnVuY3Rpb248dWludDY0X3QoKT47CiAgICAgdXNpbmcgUXVv
dGFJbmNyZWFzZVJlcXVlc3RlciA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3QgY3VycmVudFF1b3Rh
LCB1aW50NjRfdCBjdXJyZW50VXNhZ2UsIHVpbnQ2NF90IHJlcXVlc3RlZEluY3JlYXNlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPHVpbnQ2NF90Pik+JiYpPjsKLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRfdCBx
dW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPFN0b3JhZ2VRdW90YU1hbmFnZXI+IGNyZWF0ZSh1aW50NjRf
dCBxdW90YSwgVXNhZ2VHZXR0ZXImJiwgUXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmLCBSZWY8V29y
a1F1ZXVlPiYmKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFRoaXJk
UGFydHlRdW90YUZyb21QZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gcXVv
dGEgLyAxMDsgfQogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZGVmYXVsdFF1b3RhKCkg
eyByZXR1cm4gMTAwMCAqIE1COyB9CkBAIC00NiwxMyArNDYsMTIgQEAgcHVibGljOgogCiAgICAg
ZW51bSBjbGFzcyBEZWNpc2lvbiB7IERlbnksIEdyYW50IH07CiAgICAgdXNpbmcgUmVxdWVzdENh
bGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNpc2lvbik+OwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVxdWVzdFNwYWNlT25NYWluVGhyZWFkKHVpbnQ2NF90LCBSZXF1ZXN0Q2Fs
bGJhY2smJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRGVjaXNpb24gcmVxdWVzdFNwYWNlT25CYWNr
Z3JvdW5kVGhyZWFkKHVpbnQ2NF90KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRR
dW90YVVwZGF0ZWRCYXNlZE9uVXNhZ2VGb3JUZXN0aW5nKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXNldFF1b3RhRm9yVGVzdGluZygpOwogcHJpdmF0ZToKLSAgICBTdG9yYWdlUXVvdGFN
YW5hZ2VyKHVpbnQ2NF90IHF1b3RhLCBVc2FnZUdldHRlciYmLCBRdW90YUluY3JlYXNlUmVxdWVz
dGVyJiYpOworICAgIFN0b3JhZ2VRdW90YU1hbmFnZXIodWludDY0X3QgcXVvdGEsIFVzYWdlR2V0
dGVyJiYsIFF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXImJiwgUmVmPFdvcmtRdWV1ZT4mJik7CiAgICAg
Ym9vbCB0cnlHcmFudFJlcXVlc3QodWludDY0X3QpIFdURl9SRVFVSVJFU19MT0NLKG1fcXVvdGFD
b3VudERvd25Mb2NrKTsKIAogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uVXNhZ2UoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXgg
MzY0YzIzNjE4YjNjZTI1ZTBjNDNiNTRiZjUzODU4MmFkYWI4MzE5Mi4uMWM5MGNlNjY2N2FkZGYw
NGY4ZDRjZWU2NmZhMTEwNThiYTkxZDZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTI1MTYsNiArMjUxNiwxNiBAQCBSZWZQdHI8
U3RvcmFnZVF1b3RhTWFuYWdlcj4gTmV0d29ya1Byb2Nlc3M6OnN0b3JhZ2VRdW90YU1hbmFnZXIo
UEFMOjpTZXNzaW9uSUQgcwogICAgIHJldHVybiBvcmlnaW5TdG9yYWdlUXVvdGFNYW5hZ2VyOwog
fQogCitSZWZQdHI8V29ya1F1ZXVlPiBOZXR3b3JrUHJvY2Vzczo6c3RvcmFnZVNlc3Npb25RdWV1
ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fc2Vz
c2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayB9OworICAgIGF1dG8qIHNlc3Npb25TdG9yYWdl
UXVvdGFNYW5hZ2VyID0gbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnMuZ2V0KHNlc3Npb25J
RCk7CisgICAgaWYgKCFzZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gbWFrZVJlZlB0cihzZXNzaW9uU3RvcmFnZVF1b3RhTWFu
YWdlci0+d29ya1F1ZXVlKCkpOworfQorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogdm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQXV4aWxpYXJ5UHJvY2Vzc0luaXRp
YWxpemF0aW9uUGFyYW1ldGVycyYpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmgKaW5kZXggMDgzMzgyYzk5YTA3YjI2ZmQ1ODkyMWM1Yzg3ZTJhNjFi
MjEwNzYxYy4uYzZkMWNiMzllOWU4ZjliZDRmMzBmNjg1NjRiMDQwOWIxMDMxM2ExMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMzQ2LDYg
KzM0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBDTUZyYXVkUHJldmVudGlvblZhbHVlc0Zv
clRlc3RpbmcoUEFMOjpTZXNzaW9uSUQsIFN0cmluZyYmIHVubGlua2FibGVUb2tlbiwgU3RyaW5n
JiYgc2VjcmV0VG9rZW4sIFN0cmluZyYmIHNpZ25hdHVyZSwgU3RyaW5nJiYga2V5SUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZVF1
b3RhTWFuYWdlcj4gc3RvcmFnZVF1b3RhTWFuYWdlcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJik7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gc3RvcmFnZVNlc3Np
b25RdWV1ZShQQUw6OlNlc3Npb25JRCk7CiAKICAgICB2b2lkIGFkZEtlcHRBbGl2ZUxvYWQoUmVm
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mJik7CiAgICAgdm9pZCByZW1vdmVLZXB0QWxpdmVMb2Fk
KE5ldHdvcmtSZXNvdXJjZUxvYWRlciYpOwpAQCAtNTAxLDE0ICs1MDIsMTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIDogbV9jYWNoZVJvb3RQYXRoKGNhY2hlUm9vdFBhdGgpCiAgICAgICAgICAg
ICAsIG1fZGVmYXVsdFF1b3RhKGRlZmF1bHRRdW90YSkKICAgICAgICAgICAgICwgbV9kZWZhdWx0
VGhpcmRQYXJ0eVF1b3RhKGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEpCisgICAgICAgICAgICAsIG1f
d29ya1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJTdG9yYWdlIFNlc3Npb24gUXVldWUiKSkKICAg
ICAgICAgewogICAgICAgICB9CiAgICAgICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YShjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbikgY29uc3QgeyByZXR1cm4gb3JpZ2luLnRvcE9y
aWdpbiA9PSBvcmlnaW4uY2xpZW50T3JpZ2luID8gbV9kZWZhdWx0UXVvdGEgOiBtX2RlZmF1bHRU
aGlyZFBhcnR5UXVvdGE7IH0KIAogICAgICAgICBSZWY8V2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcj4gZW5zdXJlT3JpZ2luU3RvcmFnZVF1b3RhTWFuYWdlcihXZWJDb3JlOjpDbGllbnRPcmln
aW4gb3JpZ2luLCB1aW50NjRfdCBxdW90YSwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
VXNhZ2VHZXR0ZXImJiB1c2FnZUdldHRlciwgV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6
UXVvdGFJbmNyZWFzZVJlcXVlc3RlciYmIHF1b3RhSW5jcmVhc2VSZXF1ZXN0ZXIpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fc3RvcmFnZVF1b3RhTWFuYWdlcnMuZW5zdXJl
KG9yaWdpbiwgW3F1b3RhLCB1c2FnZUdldHRlciA9IFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBxdW90
YUluY3JlYXNlUmVxdWVzdGVyID0gV1RGTW92ZShxdW90YUluY3JlYXNlUmVxdWVzdGVyKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFu
YWdlcjo6Y3JlYXRlKHF1b3RhLCBXVEZNb3ZlKHVzYWdlR2V0dGVyKSwgV1RGTW92ZShxdW90YUlu
Y3JlYXNlUmVxdWVzdGVyKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0b3JhZ2VRdW90
YU1hbmFnZXJzLmVuc3VyZShvcmlnaW4sIFtxdW90YSwgdXNhZ2VHZXR0ZXIgPSBXVEZNb3ZlKHVz
YWdlR2V0dGVyKSwgcXVvdGFJbmNyZWFzZVJlcXVlc3RlciA9IFdURk1vdmUocXVvdGFJbmNyZWFz
ZVJlcXVlc3RlciksIHF1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVh
dGUocXVvdGEsIFdURk1vdmUodXNhZ2VHZXR0ZXIpLCBXVEZNb3ZlKHF1b3RhSW5jcmVhc2VSZXF1
ZXN0ZXIpLCBXVEZNb3ZlKHF1ZXVlKSk7CiAgICAgICAgICAgICB9KS5pdGVyYXRvcjsKICAgICAg
ICAgICAgIHJldHVybiBtYWtlUmVmKCppdGVyLT52YWx1ZSk7CiAgICAgICAgIH0KQEAgLTUyMCwx
MiArNTIyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0SURCUm9vdFBhdGgoY29uc3Qg
U3RyaW5nJiBpZGJSb290UGF0aCkgeyBtX2lkYlJvb3RQYXRoID0gaWRiUm9vdFBhdGg7IH0KICAg
ICAgICAgY29uc3QgU3RyaW5nJiBpZGJSb290UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1faWRiUm9v
dFBhdGg7IH0KIAorICAgICAgICBXb3JrUXVldWUmIHdvcmtRdWV1ZSgpIHsgcmV0dXJuIG1fd29y
a1F1ZXVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmcgbV9jYWNoZVJvb3RQYXRo
OwogICAgICAgICBTdHJpbmcgbV9pZGJSb290UGF0aDsKICAgICAgICAgdWludDY0X3QgbV9kZWZh
dWx0UXVvdGEgeyBXZWJDb3JlOjpTdG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0UXVvdGEoKSB9
OwogICAgICAgICB1aW50NjRfdCBtX2RlZmF1bHRUaGlyZFBhcnR5UXVvdGEgeyBXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhKCkgfTsKICAgICAgICAg
SGFzaE1hcDxXZWJDb3JlOjpDbGllbnRPcmlnaW4sIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlUXVv
dGFNYW5hZ2VyPj4gbV9zdG9yYWdlUXVvdGFNYW5hZ2VyczsKKyAgICAgICAgUmVmPFdvcmtRdWV1
ZT4gbV93b3JrUXVldWU7CiAgICAgfTsKICAgICB2b2lkIGFkZFNlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2VyKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEsIHVpbnQ2NF90IGRl
ZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290UGF0aCwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVTZXNzaW9uU3RvcmFnZVF1b3Rh
TWFuYWdlcihQQUw6OlNlc3Npb25JRCk7CkBAIC01ODcsNyArNTkyLDYgQEAgcHJpdmF0ZToKIAog
ICAgIExvY2sgbV9zZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrOwogICAgIEhhc2hNYXA8
UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxTZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdl
cj4+IG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9z
ZXNzaW9uU3RvcmFnZVF1b3RhTWFuYWdlcnNMb2NrKTsKLSAgICBib29sIG1fcXVvdGFMb2dnaW5n
RW5hYmxlZCB7IGZhbHNlIH07CiAKICAgICBPcHRpb25TZXQ8TmV0d29ya0NhY2hlOjpDYWNoZU9w
dGlvbj4gbV9jYWNoZU9wdGlvbnM7CiAgICAgV2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsUmVn
aXN0cnkgbV9tZXNzYWdlUG9ydENoYW5uZWxSZWdpc3RyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcAppbmRl
eCAyYWNlNTFjNjEwOGUyMzVmODA2MWRjMmU4ODk5YmQ1NmJkNzgyMzgyLi5mZjIwNTUyYjk3ZmM2
ZGM2ZWYzZWFhYzA3ZTM2MmQyZGRiY2VhMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCkBAIC0yNDYs
MTYgKzI0NiwyNSBAQCB1aW50NjRfdCBFbmdpbmU6OmRpc2tVc2FnZShjb25zdCBTdHJpbmcmIHJv
b3RQYXRoLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mCiAKIHZvaWQgRW5naW5lOjpyZXF1
ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiBvcmlnaW4sIHVpbnQ2NF90IHNw
YWNlUmVxdWVzdGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VRdW90
YU1hbmFnZXI6OkRlY2lzaW9uKT4mJiBjYWxsYmFjaykKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoIW1fbmV0
d29ya1Byb2Nlc3MpCisgICAgaWYgKCFtX2lvUXVldWUgfHwgIW1fbmV0d29ya1Byb2Nlc3MpIHsK
ICAgICAgICAgY2FsbGJhY2soV2ViQ29yZTo6U3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb246
OkRlbnkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlN0
b3JhZ2VRdW90YU1hbmFnZXI+IHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25ldHdvcmtQcm9jZXNz
LT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOwotICAgIGlmICghc3Rv
cmFnZVF1b3RhTWFuYWdlcikKKyAgICBhdXRvIHN0b3JhZ2VRdW90YU1hbmFnZXIgPSBtX25ldHdv
cmtQcm9jZXNzLT5zdG9yYWdlUXVvdGFNYW5hZ2VyKG1fc2Vzc2lvbklELCBvcmlnaW4pOworICAg
IGlmICghc3RvcmFnZVF1b3RhTWFuYWdlcikgewogICAgICAgICBjYWxsYmFjayhXZWJDb3JlOjpT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbjo6RGVueSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBzdG9yYWdlUXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VPbk1haW5UaHJlYWQo
c3BhY2VSZXF1ZXN0ZWQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBtX2lvUXVldWUtPmRpc3Bh
dGNoKFtzdG9yYWdlUXVvdGFNYW5hZ2VyLCBzcGFjZVJlcXVlc3RlZCwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzdG9yYWdl
UXVvdGFNYW5hZ2VyLT5yZXF1ZXN0U3BhY2VPbkJhY2tncm91bmRUaHJlYWQoc3BhY2VSZXF1ZXN0
ZWQpOworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Jlc3VsdCwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHJl
c3VsdCk7CisgICAgICAgIH0pOworICAgIH0pOwogfQogCiBFbmdpbmU6OkVuZ2luZShQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBTdHJpbmcmJiByb290
UGF0aCkKQEAgLTI2Myw4ICsyNzIsNyBAQCBFbmdpbmU6OkVuZ2luZShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzJiBwcm9jZXNzLCBTdHJpbmcmJiByb290UAogICAgICwg
bV9uZXR3b3JrUHJvY2VzcyhtYWtlV2Vha1B0cihwcm9jZXNzKSkKICAgICAsIG1fcm9vdFBhdGgo
V1RGTW92ZShyb290UGF0aCkpCiB7Ci0gICAgaWYgKCFtX3Jvb3RQYXRoLmlzTnVsbCgpKQotICAg
ICAgICBtX2lvUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5DYWNo
ZVN0b3JhZ2VFbmdpbmUuc2VyaWFsLmRlZmF1bHQiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwg
V29ya1F1ZXVlOjpRT1M6OkRlZmF1bHQpOworICAgIG1faW9RdWV1ZSA9IG1fbmV0d29ya1Byb2Nl
c3MtPnN0b3JhZ2VTZXNzaW9uUXVldWUobV9zZXNzaW9uSUQpOwogfQogCiB2b2lkIEVuZ2luZTo6
b3Blbihjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBj
YWNoZU5hbWUsIENhY2hlSWRlbnRpZmllckNhbGxiYWNrJiYgY2FsbGJhY2spCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUu
aAppbmRleCA0NDA5ZTdiNDk2YWI4Y2Y2NDZjOWEwZmZhZWRmNTczNGMwZmYxZTg4Li4wMjFjYTFm
NjJkNjcxZDhkMDg1MWY2NDBhMDJlOGRlZTI2ZjIxMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKQEAgLTg3
LDcgKzg3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB1aW50NjRfdCBkaXNrVXNhZ2UoY29uc3Qg
U3RyaW5nJiByb290UGF0aCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAgICAgdm9p
ZCByZXF1ZXN0U3BhY2UoY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJiwgdWludDY0X3Qgc3Bh
Y2VSZXF1ZXN0ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZVF1b3Rh
TWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKIAotICAgIGJvb2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0
IHsgcmV0dXJuICEhbV9pb1F1ZXVlO30KKyAgICBib29sIHNob3VsZFBlcnNpc3QoKSBjb25zdCB7
IHJldHVybiAhbV9yb290UGF0aC5pc051bGwoKTsgfQogCiAgICAgdm9pZCB3cml0ZUZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgTmV0d29ya0NhY2hlOjpEYXRhJiYsIFdlYkNvcmU6OkRPTUNh
Y2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAgdm9pZCByZWFkRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE5ldHdvcmtD
YWNoZTo6RGF0YSYsIGludCBlcnJvcik+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9TdG9yYWdlL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCBhYjBlOTA5ODhiNDlkMDM5NTJi
MWU3ZTU4MjI2N2NhMTFhNmU5MTgxLi43MjI1MmU3NTdjYTA1ZGQ4MjIxOWFmMWVjMGU1NTk3Zjg5
NTFkMzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNz
SURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNz
SURCU2VydmVyLmNwcApAQCAtNzEsMTIgKzcxLDEyIEBAIEluUHJvY2Vzc0lEQlNlcnZlcjo6fklu
UHJvY2Vzc0lEQlNlcnZlcigpCiAKIFN0b3JhZ2VRdW90YU1hbmFnZXIqIEluUHJvY2Vzc0lEQlNl
cnZlcjo6cXVvdGFNYW5hZ2VyKGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2luKQogewotICAgIHJl
dHVybiBtX3F1b3RhTWFuYWdlcnMuZW5zdXJlKG9yaWdpbiwgW10geworICAgIHJldHVybiBtX3F1
b3RhTWFuYWdlcnMuZW5zdXJlKG9yaWdpbiwgW3dvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlXSB7CiAg
ICAgICAgIHJldHVybiBTdG9yYWdlUXVvdGFNYW5hZ2VyOjpjcmVhdGUoU3RvcmFnZVF1b3RhTWFu
YWdlcjo6ZGVmYXVsdFF1b3RhKCksIFtdIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICB9LCBbXSh1aW50NjRfdCBxdW90YSwgdWludDY0X3QgY3VycmVudFNwYWNlLCB1aW50NjRfdCBz
cGFjZUluY3JlYXNlLCBhdXRvIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICBjYWxsYmFjayhxdW90
YSArIGN1cnJlbnRTcGFjZSArIHNwYWNlSW5jcmVhc2UpOwotICAgICAgICB9KTsKKyAgICAgICAg
fSwgd29ya1F1ZXVlLmNvcHlSZWYoKSk7CiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwog
fQogCkBAIC05MCw2ICs5MCw3IEBAIHN0YXRpYyBpbmxpbmUgSURCU2VydmVyOjpJREJTZXJ2ZXI6
OlN0b3JhZ2VRdW90YU1hbmFnZXJTcGFjZVJlcXVlc3RlciBzdG9yYWdlUXVvCiAKIEluUHJvY2Vz
c0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCiAgICAgOiBtX3RocmVhZChtYWtl
VW5pcXVlPFN0b3JhZ2VUaHJlYWQ+KFN0b3JhZ2VUaHJlYWQ6OlR5cGU6OkluZGV4ZWREQikpCisg
ICAgLCBtX3dvcmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiSW5Qcm9jZXNzSURCU2VydmVyIFF1
ZXVlIikpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX2Nvbm5lY3Rpb25U
b1NlcnZlciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL0luUHJvY2Vzc0lEQlNl
cnZlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL0luUHJvY2Vzc0lEQlNlcnZlci5o
CmluZGV4IDZjYjhmN2VmOWFmZTU5YmY0ZWU2NGE4NGI0MTEwNjhhODZmYWUwYWMuLjY3YmRhM2E2
NDYwNDE5ZjRmYzBlMzY2MDExMjljZTRhMjlhYWUzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvU3RvcmFnZS9JblByb2Nlc3NJREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L1N0b3JhZ2UvSW5Qcm9jZXNzSURCU2VydmVyLmgKQEAgLTEzMyw0ICsxMzMsNSBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTdG9yYWdlVGhyZWFkPiBtX3Ro
cmVhZDsKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6Q2xpZW50T3JpZ2luLCBSZWZQdHI8V2ViQ29y
ZTo6U3RvcmFnZVF1b3RhTWFuYWdlcj4+IG1fcXVvdGFNYW5hZ2VyczsKKyAgICBSZWY8V29ya1F1
ZXVlPiBtX3dvcmtRdWV1ZTsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNDcyZDMxMWY5YWQzZDJkZmViNmFmY2RhNGQzOTIzZjQzMjRjYjQ5
ZC4uZTVkYzEzMzE5ZmIxY2RhZWUxMjcxNjZjNGRmMGZkNGU1MmVmYjkzOCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDIxLTA1LTI4ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIE1h
a2UgQ2FjaGVTdG9yYWdlRW5naW5lIHVzZSB0aGUgc2FtZSBXb3JrUXVldWUgYXMgU3RvcmFnZVF1
b3RhTWFuYWdlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2Mjc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlIHRoZSB0ZXN0IGV4cGVjdGF0aW9uIGFzIHdpdGggdGhpcyBjaGFuZ2UgY2FjaGUg
cmVxdWVzdCBmcm9tIG9uZSBvcmlnaW4gbWF5IGJsb2NrIHRoYXQgZnJvbSBhbm90aGVyLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TdG9yYWdlUXVvdGEubW06
CisgICAgICAgICgtW1F1b3RhRGVsZWdhdGUgX3dlYlZpZXc6ZGVjaWRlRGF0YWJhc2VRdW90YUZv
clNlY3VyaXR5T3JpZ2luOmN1cnJlbnRRdW90YTpjdXJyZW50T3JpZ2luVXNhZ2U6Y3VycmVudERh
dGFiYXNlVXNhZ2U6ZXhwZWN0ZWRVc2FnZTpkZWNpc2lvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W1F1b3RhRGVsZWdhdGUgZ3JhbnRRdW90YV0pOgorICAgICAgICAoLVtRdW90YURlbGVnYXRlIGRl
bnlRdW90YV0pOgorCiAyMDIxLTA1LTI3ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlp
QHNvbnkuY29tPgogCiAgICAgICAgIFtydW4td2Via2l0LXRlc3RzXVtXaW5dIFN0cmlwIFBIUCBz
dXBwb3J0IGZyb20gd2Vic2VydmVyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1N0b3JhZ2VRdW90YS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU3RvcmFnZVF1b3RhLm1tCmluZGV4IGYxYWI2ODM5ZGVjM2QyYTQxZTc0
YTI4NzUzNDMzZGJiNDE2NmRkODMuLmVkNjkyODA0YzI1MTY5Zjk3MmJkMWIzNDhhNmE4MzFhN2Jl
Njg3N2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
U3RvcmFnZVF1b3RhLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvU3RvcmFnZVF1b3RhLm1tCkBAIC04MCw2ICs4MCw3IEBAIHN0YXRpYyBib29sIHJlY2VpdmVk
UXVvdGFEZWxlZ2F0ZUNhbGxlZDsKIAogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46KFdLU2VjdXJpdHlPcmln
aW4gKilzZWN1cml0eU9yaWdpbiBjdXJyZW50UXVvdGE6KHVuc2lnbmVkIGxvbmcgbG9uZyljdXJy
ZW50UXVvdGEgY3VycmVudE9yaWdpblVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudE9y
aWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOih1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVu
dFVzYWdlIGV4cGVjdGVkVXNhZ2U6KHVuc2lnbmVkIGxvbmcgbG9uZylleHBlY3RlZFVzYWdlIGRl
Y2lzaW9uSGFuZGxlcjoodm9pZCAoXikodW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSlkZWNp
c2lvbkhhbmRsZXIKIHsKKyAgICBOU0xvZyhAInNpaHVpbDogZGVjaWRlRGF0YWJhc2VRdW90YUZv
clNlY3VyaXR5T3JpZ2luIHNldHMgcmVjZWl2ZWRRdW90YURlbGVnYXRlQ2FsbGVkIHRydWUiKTsK
ICAgICByZWNlaXZlZFF1b3RhRGVsZWdhdGVDYWxsZWQgPSB0cnVlOwogICAgIF9xdW90YURlbGVn
YXRlQ2FsbGVkID0gdHJ1ZTsKICAgICBfY3VycmVudFF1b3RhID0gY3VycmVudFF1b3RhOwpAQCAt
OTIsMTIgKzkzLDE0IEBAIHN0YXRpYyBib29sIHJlY2VpdmVkUXVvdGFEZWxlZ2F0ZUNhbGxlZDsK
IH0KIAogLSh2b2lkKWdyYW50UXVvdGEgeworICAgIE5TTG9nKEAic2lodWlsOiBncmFudFF1b3Rh
Iik7CiAgICAgaWYgKF9xdW90YURlbGVnYXRlQ2FsbGVkKQogICAgICAgICBfZGVjaXNpb25IYW5k
bGVyKF9leHBlY3RlZFVzYWdlKTsKICAgICBfcXVvdGFEZWxlZ2F0ZUNhbGxlZCA9IGZhbHNlOwog
fQogCiAtKHZvaWQpZGVueVF1b3RhIHsKKyAgICBOU0xvZyhAInNpaHVpbDogZGVueVF1b3RhIik7
CiAgICAgaWYgKF9xdW90YURlbGVnYXRlQ2FsbGVkKQogICAgICAgICBfZGVjaXNpb25IYW5kbGVy
KF9jdXJyZW50UXVvdGEpOwogICAgIF9xdW90YURlbGVnYXRlQ2FsbGVkID0gZmFsc2U7CkBAIC0z
NDYsOCArMzQ5LDYgQEAgVEVTVChXZWJLaXQsIFF1b3RhRGVsZWdhdGUpCiAKICAgICByZWNlaXZl
ZE1lc3NhZ2UgPSBmYWxzZTsKICAgICBbd2ViVmlldzIgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVl
c3RXaXRoTG9jYWxob3N0KCldOwotICAgIFttZXNzYWdlSGFuZGxlciBzZXRFeHBlY3RlZE1lc3Nh
Z2U6IEAic3RhcnQiXTsKLSAgICBVdGlsOjpydW4oJnJlY2VpdmVkTWVzc2FnZSk7CiAKICAgICBF
WFBFQ1RfRkFMU0UoZGVsZWdhdGUyLmdldCgpLnF1b3RhRGVsZWdhdGVDYWxsZWQpOwogICAgIFtk
ZWxlZ2F0ZTEgZ3JhbnRRdW90YV07CkBAIC0zNjQsOCArMzY1LDYgQEAgVEVTVChXZWJLaXQsIFF1
b3RhRGVsZWdhdGUpCiAgICAgW21lc3NhZ2VIYW5kbGVyIHNldEV4cGVjdGVkTWVzc2FnZTogQCJm
YWlsIl07CiAgICAgcmVjZWl2ZWRNZXNzYWdlID0gZmFsc2U7CiAgICAgVXRpbDo6cnVuKCZyZWNl
aXZlZE1lc3NhZ2UpOwotCi0gICAgTlNMb2coQCJRdW90YURlbGVnYXRlIDYiKTsKIH0KIAogVEVT
VChXZWJLaXQsIFF1b3RhRGVsZWdhdGVSZWxvYWQpCg==
</data>
<flag name="review"
          id="451342"
          type_id="1"
          status="?"
          setter="sihui_liu"
    />
          </attachment>
      

    </bug>

</bugzilla>