<?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>209253</bug_id>
          
          <creation_ts>2020-03-18 15:54:54 -0700</creation_ts>
          <short_desc>Handle failed ITP Database insert attempts</short_desc>
          <delta_ts>2020-03-19 15:55:19 -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>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kate Cheney">katherine_cheney</reporter>
          <assigned_to name="Kate Cheney">katherine_cheney</assigned_to>
          <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1631399</commentid>
    <comment_count>0</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-18 15:54:54 -0700</bug_when>
    <thetext>Failure to successfully insert observed domains into the ITP Database should not cause crashes, and should be handled gracefully in case future code relies on the domain&apos;s presence in the database.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631410</commentid>
    <comment_count>1</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-18 16:28:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/58886756&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631417</commentid>
    <comment_count>2</comment_count>
      <attachid>393915</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-18 16:47:54 -0700</bug_when>
    <thetext>Created attachment 393915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631818</commentid>
    <comment_count>3</comment_count>
      <attachid>393915</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-03-19 14:06:58 -0700</bug_when>
    <thetext>Comment on attachment 393915
Patch

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

r=me

This seems fine, but you should probably update release logging so methods that have more than one release log statement have a (slightly) different log message.

Also, I&apos;d suggest adding WARN_UNUSED_RETURN for the two methods I noted, and recompile (to make sure you&apos;re not missing a return value check anywhere).

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1481
&gt; +            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal was not completed due to failed insert attempt&quot;, this);

Might want to make this logging different so you know which statement failed in ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal().

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1511
&gt; +    for (auto&amp; registrableDomain : domains) {
&gt; +        auto result = ensureResourceStatisticsForRegistrableDomain(registrableDomain);
&gt; +        if (!result.second) {
&gt; +            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains was not completed due to failed insert attempt&quot;, this);
&gt; +            return;
&gt; +        }
&gt; +    }

Let&apos;s say the first domain fails.  Is it okay to assume all the other domains will fail, or do you want to continue to iterate through all of them, and only return early if some failed?

    bool insertionFailure = false;
    for (auto&amp; registrableDomain : domains) {
        auto result = ensureResourceStatisticsForRegistrableDomain(registrableDomain);
        if (!result.second) {
            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains was not completed due to failed insert attempt&quot;, this);
            insertionFailure = true;
        }
    }
    if (insertionFailure)
        return;

Or maybe you only want to return early if no insertions succeeded?

    bool atLeastOneInsertionSucceeded = false;
    for (auto&amp; registrableDomain : domains) {
        auto result = ensureResourceStatisticsForRegistrableDomain(registrableDomain);
        if (!result.second) {
            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains was not completed due to failed insert attempt&quot;, this);
        } else
            atLeastOneInsertionSucceeded = true;
    }
    if (!atLeastOneInsertionSucceeded)
        return;

Or is this the cause of the crash later, which is why you return early here?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1543
&gt; +            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode was not completed due to failed insert attempt&quot;, this);

Might want to make this logging different so you know which statement failed in ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode().

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1580
&gt; +                    RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::logFrameNavigation was not completed due to failed insert attempt&quot;, this);

Might want to make this logging different so you know which statement failed in ResourceLoadStatisticsDatabaseStore::logFrameNavigation().

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1591
&gt; +                RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::logFrameNavigation was not completed due to failed insert attempt&quot;, this);

Might want to make this logging different so you know which statement failed in ResourceLoadStatisticsDatabaseStore::logFrameNavigation().

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1974
&gt; +        RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameDomain was not completed due to failed insert attempt&quot;, this);

Might want to make this logging different so you know which statement failed in ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameDomain().

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2055
&gt; -    insertObservedDomain(newObservation);
&gt; +    auto result = insertObservedDomain(newObservation);

May want to add WARN_UNUSED_RETURN in the header declaration for ResourceLoadStatisticsDatabaseStore::insertObservedDomain() as well.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:215
&gt; -    std::pair&lt;AddedRecord, unsigned&gt; ensureResourceStatisticsForRegistrableDomain(const RegistrableDomain&amp;);
&gt; +    std::pair&lt;AddedRecord, Optional&lt;unsigned&gt;&gt; ensureResourceStatisticsForRegistrableDomain(const RegistrableDomain&amp;);

You may want to add WARN_UNUSED_RETURN here (and recompile) to make sure return values are checked:

    std::pair&lt;AddedRecord, Optional&lt;unsigned&gt;&gt; ensureResourceStatisticsForRegistrableDomain(const RegistrableDomain&amp;) WARN_UNUSED_RETURN;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631829</commentid>
    <comment_count>4</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-19 14:25:19 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #3)
&gt; Comment on attachment 393915 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=393915&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; This seems fine, but you should probably update release logging so methods
&gt; that have more than one release log statement have a (slightly) different
&gt; log message.

Good idea
&gt; 
&gt; Also, I&apos;d suggest adding WARN_UNUSED_RETURN for the two methods I noted, and
&gt; recompile (to make sure you&apos;re not missing a return value check anywhere).
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1481
&gt; &gt; +            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal was not completed due to failed insert attempt&quot;, this);
&gt; 
&gt; Might want to make this logging different so you know which statement failed
&gt; in ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal().
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1511
&gt; &gt; +    for (auto&amp; registrableDomain : domains) {
&gt; &gt; +        auto result = ensureResourceStatisticsForRegistrableDomain(registrableDomain);
&gt; &gt; +        if (!result.second) {
&gt; &gt; +            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains was not completed due to failed insert attempt&quot;, this);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Let&apos;s say the first domain fails.  Is it okay to assume all the other
&gt; domains will fail, or do you want to continue to iterate through all of
&gt; them, and only return early if some failed?
&gt; 
&gt;     bool insertionFailure = false;
&gt;     for (auto&amp; registrableDomain : domains) {
&gt;         auto result =
&gt; ensureResourceStatisticsForRegistrableDomain(registrableDomain);
&gt;         if (!result.second) {
&gt;             RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p -
&gt; ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains was not
&gt; completed due to failed insert attempt&quot;, this);
&gt;             insertionFailure = true;
&gt;         }
&gt;     }
&gt;     if (insertionFailure)
&gt;         return;
&gt; 
&gt; Or maybe you only want to return early if no insertions succeeded?
&gt; 
&gt;     bool atLeastOneInsertionSucceeded = false;
&gt;     for (auto&amp; registrableDomain : domains) {
&gt;         auto result =
&gt; ensureResourceStatisticsForRegistrableDomain(registrableDomain);
&gt;         if (!result.second) {
&gt;             RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p -
&gt; ResourceLoadStatisticsDatabaseStore::grandfatherDataForDomains was not
&gt; completed due to failed insert attempt&quot;, this);
&gt;         } else
&gt;             atLeastOneInsertionSucceeded = true;
&gt;     }
&gt;     if (!atLeastOneInsertionSucceeded)
&gt;         return;
&gt; 
&gt; Or is this the cause of the crash later, which is why you return early here?

Actually, I don&apos;t even think we need an early return here. We should definitely check the result, but then we can do a best effort insert (even if it&apos;s no domains).
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1543
&gt; &gt; +            RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode was not completed due to failed insert attempt&quot;, this);
&gt; 
&gt; Might want to make this logging different so you know which statement failed
&gt; in
&gt; ResourceLoadStatisticsDatabaseStore::ensurePrevalentResourcesForDebugMode().
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1580
&gt; &gt; +                    RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::logFrameNavigation was not completed due to failed insert attempt&quot;, this);
&gt; 
&gt; Might want to make this logging different so you know which statement failed
&gt; in ResourceLoadStatisticsDatabaseStore::logFrameNavigation().
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1591
&gt; &gt; +                RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::logFrameNavigation was not completed due to failed insert attempt&quot;, this);
&gt; 
&gt; Might want to make this logging different so you know which statement failed
&gt; in ResourceLoadStatisticsDatabaseStore::logFrameNavigation().
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1974
&gt; &gt; +        RELEASE_LOG_ERROR_IF_ALLOWED(m_sessionID, &quot;%p - ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameDomain was not completed due to failed insert attempt&quot;, this);
&gt; 
&gt; Might want to make this logging different so you know which statement failed
&gt; in ResourceLoadStatisticsDatabaseStore::setSubresourceUnderTopFrameDomain().
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2055
&gt; &gt; -    insertObservedDomain(newObservation);
&gt; &gt; +    auto result = insertObservedDomain(newObservation);
&gt; 
&gt; May want to add WARN_UNUSED_RETURN in the header declaration for
&gt; ResourceLoadStatisticsDatabaseStore::insertObservedDomain() as well.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:215
&gt; &gt; -    std::pair&lt;AddedRecord, unsigned&gt; ensureResourceStatisticsForRegistrableDomain(const RegistrableDomain&amp;);
&gt; &gt; +    std::pair&lt;AddedRecord, Optional&lt;unsigned&gt;&gt; ensureResourceStatisticsForRegistrableDomain(const RegistrableDomain&amp;);
&gt; 
&gt; You may want to add WARN_UNUSED_RETURN here (and recompile) to make sure
&gt; return values are checked:
&gt; 
&gt;     std::pair&lt;AddedRecord, Optional&lt;unsigned&gt;&gt;
&gt; ensureResourceStatisticsForRegistrableDomain(const RegistrableDomain&amp;)
&gt; WARN_UNUSED_RETURN;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631858</commentid>
    <comment_count>5</comment_count>
      <attachid>394031</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-19 15:05:31 -0700</bug_when>
    <thetext>Created attachment 394031
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631898</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-03-19 15:55:18 -0700</bug_when>
    <thetext>Committed r258738: &lt;https://trac.webkit.org/changeset/258738&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 394031.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393915</attachid>
            <date>2020-03-18 16:47:54 -0700</date>
            <delta_ts>2020-03-19 15:05:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209253-20200318164754.patch</filename>
            <type>text/plain</type>
            <size>31204</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk4Mzk2NGY3NzIxNWY1N2Zk
OWIwMzJmY2I0MjhhYmVkMjZlNDU5NzIuLjQ1ZTg5N2IyMzE1N2I3OTczNWEzOTYwZDQyYTk5Yzdk
ODAzZTQyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMjAtMDMtMTggIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIGZhaWxl
ZCBJVFAgRGF0YWJhc2UgaW5zZXJ0IGF0dGVtcHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyNTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4
ODg2NzU2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEEgZmlyc3Qgc3RlcCB0b3dhcmQgaGFuZGxpbmcgSS9PIGVycm9ycyBpbiB0aGUgZGF0YWJhc2Uu
IEFkZHMgY2hlY2tzCisgICAgICAgIHNvIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBkb21haW4g
aW5zZXJ0IGZhaWxzLCB3ZSBkb24ndCBleGVjdXRlCisgICAgICAgIGNvZGUgd2hpY2ggcmVsaWVz
IG9uIHRoaXMgZG9tYWluIGJlaW5nIGluIHRoZSBkYXRhYmFzZS4KKworICAgICAgICBGdXR1cmUg
c3RlcHMgd2lsbCBiZSBmaWd1cmluZyBvdXQgYSB3YXkgdG8gc2NoZWR1bGUgZmFpbGVkIHF1ZXJp
ZXMKKyAgICAgICAgdG8gZXhlY3V0ZSB3aGVuIHRoZSBkYXRhYmFzZSBpcyBhY2NlcHRpbmcgaW5w
dXRzIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAgQ2hlY2sgaWYgdGhlIHF1ZXJ5
IHRvIGluc2VydCBhIGRvbWFpbiBmYWlsZWQuIElmIHNvLCByZXR1cm4KKyAgICAgICAgV1RGOjpu
dWxsb3B0IGluIHBsYWNlIG9mIHRoZSBkb21haW4gSUQgdG8gaW5kaWNhdGUgdGhlIGZhaWx1cmUu
CisKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KToKKyAgICAgICAgVGhlIHNpbXBsZXN0IHNvbHV0aW9u
IGhlcmUgd2FzIHRvIG9ubHkgYXBwZW5kIHN0cmluZ3MgdG8gdGhpcyBsaXN0CisgICAgICAgIGlm
IHRoZXkgYXJlIGFscmVhZHkgaW4gdGhlIGRhdGFiYXNlLCBvciBhcmUgc3VjY2Vzc2Z1bGx5IGlu
c2VydGVkLAorICAgICAgICBiZWNhdXNlIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QoKSBy
ZWxpZXMgb24gdGhlc2UgYmVpbmcgaW4gdGhlIGRhdGFiYXNlLgorCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJl
cXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0
Q29va2llRGF0YVJlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIEV2ZXJ5IGNhbGwg
dG8gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4gc2hvdWxkCisg
ICAgICAgIGNoZWNrIHRoZSByZXN1bHQgdG8gbWFrZSBzdXJlIHRoZSBkb21haW4gd2FzIGluc2Vy
dGVkIGJlZm9yZQorICAgICAgICBjb250aW51aW5nLCBhbmQgcmV0dXJuIGVhcmx5IChvciByZXR1
cm4gYSB2YWx1ZSB0aGF0IGRvZXMgbm90IGZ1cnRoZXIKKyAgICAgICAgcmVseSBvbiB0aGUgZGF0
YWJhc2UgaW5mb3JtYXRpb24sIGxpa2UgYW4gZW1wdHkgdmVjdG9yKS4gTG9nIHRoZXNlCisgICAg
ICAgIGVycm9ycyBidXQgZG9uJ3QgYWRkIGEgZGVidWcgYXNzZXJ0IGJlY2F1c2UgdGhlcmUgYWxy
ZWFkeSBpcyBvbmUgaW4KKyAgICAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6CisgICAgICAgIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIHNob3VsZCByZXR1cm4gYW4KKyAgICAgICAg
T3B0aW9uYWwgZG9tYWluIElEIHRvIGFjY291bnQgZm9yIGZhaWxlZCBpbnNlcnRzLgorCiAyMDIw
LTAzLTE4ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJQ
YWdlIHNob3VsZCBvd24gYSBSZWY8V2ViRnJhbWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAppbmRleCA5OGU2OTRiOWFhMjBhNGJi
YzRhMTM1ZTUxNDdiMTVlZmIxZTFmNjU5Li4yYjIwZmJhMDkyZDM5ZmFmYTg1MjYyMjNkODg0NzQw
ZGY5YzhhMTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZS5jcHAKQEAgLTY0MywxMyArNjQzLDE0IEBAIFN0cmluZyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3Qg
SGFzaFNlCiAgICAgZm9yIChhdXRvJiB0b3BGcmFtZVJlc291cmNlIDogZG9tYWluTGlzdCkgewog
ICAgICAgICAKICAgICAgICAgLy8gSW5zZXJ0IHF1ZXJ5IHdpbGwgZmFpbCBpZiB0b3AgZnJhbWUg
ZG9tYWluIGlzIG5vdCBhbHJlYWR5IGluIHRoZSBkYXRhYmFzZQotICAgICAgICBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZVJlc291cmNlKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRvcEZyYW1lUmVzb3VyY2Uuc3RyaW5nKCkpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lUmVzb3VyY2UpOworICAg
ICAgICBpZiAocmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
dG9wRnJhbWVSZXNvdXJjZS5zdHJpbmcoKSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
IicpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
QEAgLTEzNTMsNyArMTM1NCwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJgogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21h
aW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2VzcyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFp
bGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICBzd2l0Y2ggKGNvb2tpZUFjY2VzcyhzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pKSB7
CiAgICAgY2FzZSBDb29raWVBY2Nlc3M6OkNhbm5vdFJlcXVlc3Q6CkBAIC0xMzg3LDYgKzEzOTIs
MTAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0
b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJgogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXN1YkZyYW1l
U3RhdHVzLnNlY29uZCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVx
dWVzdFN0b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQg
YXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIHN3aXRj
aCAoY29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpIHsKICAgICBj
YXNlIENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKQEAgLTE0MDIsNyArMTQxMSw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNj
ZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB1
c2VyV2FzUHJvbXB0ZWRFYXJsaWVyID0gaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3Vn
aFByb21wdChzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICBhdXRv
IHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJv
dWdoUHJvbXB0KCpzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKICAgICBp
ZiAodXNlcldhc1Byb21wdGVkRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246
Ok5vKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgp
LCBJVFBEZWJ1ZywgIkFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBn
cmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3ByaXZhdGV9cyB1bmRlciAle3ByaXZhdGV9cyBvciBu
b3QuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21h
aW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0
b3JhZ2VBY2Nlc3NTdGF0dXM6OlJlcXVpcmVzVXNlclByb21wdCk7CkBAIC0xNDE0LDcgKzE0MjMs
NyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmCiAKICAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVt
ZW50U3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNlLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
dGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNj
ZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklE
ID0gPyIpOwogICAgIGlmIChpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5iaW5kSW50KDEsIHN1YkZy
YW1lU3RhdHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluY3JlbWVudFN0b3Jh
Z2VBY2Nlc3MuYmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
ICAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNj
ZXNzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwcml2YXRlfXMiLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDQ0
LDkgKzE0NTMsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3UKIAogICAgIGlmIChwcm9tcHRX
YXNTaG93biA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgewogICAgICAgICBh
dXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oc3ViRnJhbWVEb21haW4pOworICAgICAgICBpZiAoIXN1YkZyYW1lU3RhdHVzLnNl
Y29uZCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3Rv
cmFnZUFjY2VzcyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IiwgdGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgQVNTRVJU
KHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09IEFkZGVkUmVjb3JkOjpObyk7CiAgICAgICAgIEFTU0VS
VChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIE9wZXJhdGluZ0RhdGVzV2lu
ZG93OjpMb25nKSk7Ci0gICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+KHsgdG9wRnJhbWVEb21haW4gfSksIHN1YkZyYW1lU3RhdHVzLnNlY29uZCk7CisgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVE
b21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4g
fSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOwogICAgIH0KIAogICAgIGdyYW50U3RvcmFnZUFj
Y2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9t
YWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwpAQCAtMTQ2NCw5ICsxNDc3LDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9t
CiAgICAgaWYgKHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9t
cHRXYXNTaG93bjo6WWVzKSB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBhdXRvIHN1YkZyYW1l
U3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3Vi
RnJhbWVEb21haW4pOworICAgICAgICBpZiAoIXN1YkZyYW1lU3RhdHVzLnNlY29uZCkgeworICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0lu
dGVybmFsIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBBU1NFUlQoc3Vi
RnJhbWVTdGF0dXMuZmlyc3QgPT0gQWRkZWRSZWNvcmQ6Ok5vKTsKICAgICAgICAgQVNTRVJUKGhh
c0hhZFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6
OkxvbmcpKTsKLSAgICAgICAgQVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQoc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikgPT0gU3RvcmFn
ZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMpOworICAgICAgICBBU1NFUlQoaGFzVXNlckdyYW50
ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCgqc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BG
cmFtZURvbWFpbikgPT0gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMpOwogI2VuZGlm
CiAgICAgICAgIHNldFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdHJ1ZSwgV2FsbFRp
bWU6Om5vdygpKTsKICAgICB9CkBAIC0xNDg1LDggKzE1MDIsMTMgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25z
dCBIYXNoU2UKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGZvciAo
YXV0byYgcmVnaXN0cmFibGVEb21haW4gOiBkb21haW5zKQotICAgICAgICBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CisgICAg
Zm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdp
c3RyYWJsZURvbWFpbik7CisgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMg
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCiAgICAgU1FMaXRlU3RhdGVt
ZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKICAgICBpZiAo
ZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKQEAgLTE1MDYs
MTIgKzE1MjgsMjEgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmUKICAgICBWZWN0b3I8UmVnaXN0
cmFibGVEb21haW4+IHByaW1hcnlEb21haW5zVG9CbG9jazsKICAgICBwcmltYXJ5RG9tYWluc1Rv
QmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKIAotICAgIGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2Uo
KSk7CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOworICAgIGlmICghcmVz
dWx0LnNlY29uZCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJl
UHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBm
YWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNl
KCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwogICAgIHByaW1hcnlEb21haW5zVG9C
bG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKIAog
ICAgIGlmICghZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlKCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFsUHJldmFsZW50
UmVzb3VyY2UoKSk7CisgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRl
YnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CiAgICAgICAgIHNldFBy
ZXZhbGVudFJlc291cmNlKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VM
b2FkUHJldmFsZW5jZTo6SGlnaCk7CiAgICAgICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNo
ZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKICAgICAgICAgUkVM
RUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJXtwcml2YXRlfXMgYXMgcHJldmFsZW50
IHJlc291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTUzMCw4
ICsxNTYxLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omxv
Z0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvCiAgICAgYm9vbCBzdGF0aXN0aWNz
V2VyZVVwZGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzTWFpbkZyYW1lICYmICEoYXJlVGFyZ2V0
QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1Nh
bWVTaXRlKSkgewogICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgICAgIGlmICgh
dGFyZ2V0UmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVk
IGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
ICAgICAgICAgdXBkYXRlTGFzdFNlZW4odGFyZ2V0RG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpKTsKLSAgICAgICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVl
cnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksIHRhcmdl
dFJlc3VsdC5zZWNvbmQpOworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOwogICAgICAgICBz
dGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAgIH0KIApAQCAtMTU0MSwxNSArMTU3Niwy
MyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5h
dmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwogICAgICAgICAgICAgaWYgKGlzUmVkaXJlY3Qg
fHwgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERlbGF5V2l0aG91dFVzZXJJbnRlcmFjdGlvbikgewog
ICAgICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOwogICAgICAg
ICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksIHJlZGlyZWN0aW5nRG9t
YWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksIHRhcmdldFJlc3VsdC5zZWNvbmQpOworICAg
ICAgICAgICAgICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21h
aW5SZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
X0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNl
Y29uZCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKICAgICAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21h
aW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
b3VyY2VEb21haW4pOwogICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAg
ICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0p
LCByZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOwotICAgICAgICAgICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwg
SGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksIHRhcmdldFJlc3Vs
dC5zZWNvbmQpOworICAgICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRp
cmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1
ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNv
bmQpOworICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBz
b3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKICAgICAgICAgICAgIHN0YXRp
c3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTY0LDcgKzE2
MDcsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jv
c3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihjb24KICAgICBBU1NFUlQoZnJvbURvbWFpbiAh
PSB0b0RvbWFpbik7CiAKICAgICBhdXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9Eb21haW4pOwotICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgZnJvbURvbWFpbiB9KSwgdG9Eb21haW5SZXN1bHQuc2Vj
b25kKTsKKyAgICBpZiAoIXRvRG9tYWluUmVzdWx0LnNlY29uZCkgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiB3
YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0
b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4oeyBmcm9tRG9tYWluIH0pLCAqdG9Eb21haW5SZXN1bHQuc2Vjb25kKTsKICAgICAKICAgICBp
ZiAoaXNQcmV2YWxlbnRSZXNvdXJjZShmcm9tRG9tYWluKSkKICAgICAgICAgc2V0SXNTY2hlZHVs
ZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCh0b0RvbWFpbiwgdHJ1ZSk7CkBAIC0xNTkyLDcg
KzE2MzksMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWkKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAogICAgIGJvb2wgZGlkSGF2ZVByZXZpb3VzVXNlckludGVyYWN0aW9uID0g
aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6Okxvbmcp
OwotICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFp
bik7CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29t
cGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0cnVlLCBXYWxsVGlt
ZTo6bm93KCkpOwogICAgIGlmIChkaWRIYXZlUHJldmlvdXNVc2VySW50ZXJhY3Rpb24pIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTE2MDYsMTEgKzE2NTcsMTUgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24o
Y29uc3QgUmVnaXN0cmFibGUKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uIHdhcyBu
b3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwg
eyB9KTsKIAogICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJh
c2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUg
ZG9tYWluSUQgPSA/Iik7CiAgICAgaWYgKHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9
IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLmJpbmRJbnQoMSwgdGFy
Z2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VB
Y2Nlc3MuYmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCiAgICAg
ICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24gZmFpbGVk
IHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHJpdmF0ZX1zIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTgwMyw4
ICsxODU4LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiB7CiAgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CiAKLSAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOwotICAgIAorICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChtX2NsZWFyUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBT
UUxJVEVfT0sKICAgICAgICAgfHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSwgZXJyb3IgbWVzc2FnZTogJXtwcml2YXRlfXMiLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTE4MjAsOCArMTg3OCwxMSBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVk
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9t
YWluKTsKLSAgICAKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIHdhcyBu
b3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBpZiAobV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50
LmJpbmRJbnQoMSwgdmFsdWUpICE9IFNRTElURV9PSwogICAgICAgICB8fCBtX3VwZGF0ZUdyYW5k
ZmF0aGVyZWRTdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVf
T0sKICAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewpAQCAtMTgzOCw4ICsxODk5LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJl
bW92CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwotICAgIAorICAgIGF1
dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
ZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwg
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWxTdGF0ZW1lbnQuYmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRF
X09LCiAgICAgICAgIHx8IG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbFN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwog
ICAgICAgICB8fCBtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxT
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CkBAIC0xODkzLDkgKzE5NTcsMTIgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFMKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
IAogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oc3ViRnJhbWVEb21haW4pOwotCisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIs
IHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwg
bWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJh
bWUgZG9tYWluLgotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZy
YW1lRG9tYWluIH0pLCByZXN1bHQuc2Vjb25kKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwogfQogCiB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9t
YWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCkBAIC0xOTAzLDkgKzE5
NzAsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnMKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotCisgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIC8vIEZv
ciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkg
Zm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExp
c3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCByZXN1bHQuc2Vjb25kKTsKKyAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJl
c3VsdC5zZWNvbmQpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21h
aW4pCkBAIC0xOTEzLDkgKzE5ODMsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFMKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwot
CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQg
ZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0
YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksIHJlc3VsdC5zZWNvbmQp
OworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWlu
IH0pLCAqcmVzdWx0LnNlY29uZCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQpAQCAtMTkyMyw5ICsxOTk2LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBhdXRvIHJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNl
RG9tYWluKTsKLQorICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20gd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAg
ICByZXR1cm47CisgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFs
c28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCi0gICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwg
cmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwogfQogCiB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8o
Y29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFp
biYgcmVkaXJlY3REb21haW4pCkBAIC0xOTMzLDkgKzIwMDksMTIgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEYKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJh
bWVEb21haW4pOwotCisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28g
aGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCi0gICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksIHJlc3VsdC5z
ZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9t
YWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZy
YW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0
RG9tYWluKQpAQCAtMTk0MywxMiArMjAyMiwxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUbwog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byByZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7
Ci0KKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVk
IGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBz
dGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksIHJlc3VsdC5zZWNvbmQp
OworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4g
fSksICpyZXN1bHQuc2Vjb25kKTsKIH0KIAotc3RkOjpwYWlyPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgdW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQorc3RkOjpwYWlyPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgT3B0aW9uYWw8dW5z
aWduZWQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTk3MCw3
ICsyMDUyLDEzIEBAIHN0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6QWRkZWRSZWNvcmQsIHVuc2lnbmVkPiBSZXNvdXJjZUxvCiAgICAgQVNTRVJUX1VOVVNFRChy
ZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKIAogICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9tYWluKTsKLSAgICBpbnNlcnRPYnNlcnZlZERv
bWFpbihuZXdPYnNlcnZhdGlvbik7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRPYnNlcnZlZERv
bWFpbihuZXdPYnNlcnZhdGlvbik7CisKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4gaW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRvIGNvbXBsZXRlLCBlcnJv
ciBtZXNzYWdlOiAle3ByaXZhdGV9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgQWRkZWRS
ZWNvcmQ6Ok5vLCBXVEY6Om51bGxvcHQgfTsKKyAgICB9CiAKICAgICByZXR1cm4geyBBZGRlZFJl
Y29yZDo6WWVzLCBkb21haW5JRChkb21haW4pLnZhbHVlKCkgfTsKIH0KQEAgLTIzNjAsNyArMjQ0
OCwxMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0
U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oZG9tYWluKTsKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2VlbiB3YXMgbm90
IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCiAgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWluLCBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKIH0KIApAQCAtMjM3MCw4ICsy
NDYzLDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlCiAKICAgICBpZiAoc2hvdWxkU2tpcChk
b21haW4pKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICgh
cmVzdWx0LnNlY29uZCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQg
YXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBzZXRQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwogfQog
CkBAIC0yMzgyLDcgKzI0ODAsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHIKICAgICBpZiAo
c2hvdWxkU2tpcChkb21haW4pKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFp
bik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
X0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpWZXJ5SGlnaCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmgKaW5kZXggODU3MzA5ODgxZTRiNDNhOWI5MmMwN2IwYTZlNDIz
OGZlNTc0ODNiNS4uOTllMWJlNjQ5N2QzMDg1MWU2ZGY4YTFjM2I0ZDQxNTU4NWVjZDE1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgK
QEAgLTIxMiw3ICsyMTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lm
TmVlZGVkKCkgb3ZlcnJpZGU7CiAgICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7IE5vLCBZZXMg
fTsKLSAgICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHVuc2lnbmVkPiBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwor
ICAgIHN0ZDo6cGFpcjxBZGRlZFJlY29yZCwgT3B0aW9uYWw8dW5zaWduZWQ+PiBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpOwogICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsV2Vic2l0ZURhdGFGb3IoY29uc3QgRG9tYWlu
RGF0YSYsIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyk7CiAgICAgYm9vbCBzaG91
bGRSZW1vdmVBbGxCdXRDb29raWVzRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENo
ZWNrRm9yR3JhbmRmYXRoZXJpbmcpOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVnaXN0cmFibGVE
b21haW4sIFdlYnNpdGVEYXRhVG9SZW1vdmU+PiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdl
YnNpdGVEYXRhRm9yKCkgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394031</attachid>
            <date>2020-03-19 15:05:31 -0700</date>
            <delta_ts>2020-03-19 15:55:19 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-209253-20200319150531.patch</filename>
            <type>text/plain</type>
            <size>34093</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk4Mzk2NGY3NzIxNWY1N2Zk
OWIwMzJmY2I0MjhhYmVkMjZlNDU5NzIuLmQxMTJmMTc5ZGMxYTAxYTdhNjgzZTUyYzgzNjA3NjMz
MTkwMzY5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMjAtMDMtMTggIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgSGFuZGxlIGZhaWxl
ZCBJVFAgRGF0YWJhc2UgaW5zZXJ0IGF0dGVtcHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyNTMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4
ODg2NzU2PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEtpbHplci4KKworICAgICAgICBB
IGZpcnN0IHN0ZXAgdG93YXJkIGhhbmRsaW5nIEkvTyBlcnJvcnMgaW4gdGhlIGRhdGFiYXNlLiBB
ZGRzIGNoZWNrcworICAgICAgICBzbyB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIGEgZG9tYWluIGlu
c2VydCBmYWlscywgd2UgZG9uJ3QgZXhlY3V0ZQorICAgICAgICBjb2RlIHdoaWNoIHJlbGllcyBv
biB0aGlzIGRvbWFpbiBiZWluZyBpbiB0aGUgZGF0YWJhc2UuCisKKyAgICAgICAgRnV0dXJlIHN0
ZXBzIHdpbGwgYmUgZmlndXJpbmcgb3V0IGEgd2F5IHRvIHNjaGVkdWxlIGZhaWxlZCBxdWVyaWVz
CisgICAgICAgIHRvIGV4ZWN1dGUgd2hlbiB0aGUgZGF0YWJhc2UgaXMgYWNjZXB0aW5nIGlucHV0
cyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbik6CisgICAgICAgIENoZWNrIGlmIHRoZSBxdWVyeSB0
byBpbnNlcnQgYSBkb21haW4gZmFpbGVkLiBJZiBzbywgcmV0dXJuCisgICAgICAgIFdURjo6bnVs
bG9wdCBpbiBwbGFjZSBvZiB0aGUgZG9tYWluIElEIHRvIGluZGljYXRlIHRoZSBmYWlsdXJlLgor
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpl
bnN1cmVBbmRNYWtlRG9tYWluTGlzdCk6CisgICAgICAgIFRoZSBzaW1wbGVzdCBzb2x1dGlvbiBo
ZXJlIHdhcyB0byBvbmx5IGFwcGVuZCBzdHJpbmdzIHRvIHRoaXMgbGlzdAorICAgICAgICBpZiB0
aGV5IGFyZSBhbHJlYWR5IGluIHRoZSBkYXRhYmFzZSwgb3IgYXJlIHN1Y2Nlc3NmdWxseSBpbnNl
cnRlZCwKKyAgICAgICAgYmVjYXVzZSBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KCkgcmVs
aWVzIG9uIHRoZXNlIGJlaW5nIGluIHRoZSBkYXRhYmFzZS4KKworICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50
ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNG
b3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICBFdmVyeSBjYWxsIHRv
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIHNob3VsZAorICAg
ICAgICBjaGVjayB0aGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSB0aGUgZG9tYWluIHdhcyBpbnNlcnRl
ZCBiZWZvcmUKKyAgICAgICAgY29udGludWluZywgYW5kIHJldHVybiBlYXJseSAob3IgcmV0dXJu
IGEgdmFsdWUgdGhhdCBkb2VzIG5vdCBmdXJ0aGVyCisgICAgICAgIHJlbHkgb24gdGhlIGRhdGFi
YXNlIGluZm9ybWF0aW9uLCBsaWtlIGFuIGVtcHR5IHZlY3RvcikuIExvZyB0aGVzZQorICAgICAg
ICBlcnJvcnMgYnV0IGRvbid0IGFkZCBhIGRlYnVnIGFzc2VydCBiZWNhdXNlIHRoZXJlIGFscmVh
ZHkgaXMgb25lIGluCisgICAgICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluLgorCisgICAgICAgICogKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKToKKyAgICAgICAgKiAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzKToK
KyAgICAgICAgVGhlIHNpbXBsZXN0IHRoaW5nIHRvIGRvIGluIHRoaXMgY2FzZSBpcyB0byByZXR1
cm4gZWFybHkgaWYgYW55IGRvbWFpbgorICAgICAgICBpbnNlcnRzIGZhaWwgYmVmb3JlIGluc2Vy
dGluZyBkb21haW4gcmVsYXRpb25zaGlwcyBhcyBhIGJlc3QtZWZmb3J0CisgICAgICAgIGFwcHJv
YWNoLiBBIGZ1dHVyZSBzdGVwIGNvdWxkIGJlIG1haW50YWluaW5nIGEgdmVjdG9yIG9mIHN0YXRp
c3RpY3MKKyAgICAgICAgd2hpY2ggc3VjY2Vzc2Z1bGx5IGluc2VydGVkLCBhbmQgb25seSBhZGRp
bmcgdGhvc2UgcmVsYXRpb25zaGlwcy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDoKKyAgICAgICAgZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4gc2hvdWxkIHJldHVybiBh
bgorICAgICAgICBPcHRpb25hbCBkb21haW4gSUQgdG8gYWNjb3VudCBmb3IgZmFpbGVkIGluc2Vy
dHMuCisKIDIwMjAtMDMtMTggIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYlBhZ2Ugc2hvdWxkIG93biBhIFJlZjxXZWJGcmFtZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDk4ZTY5
NGI5YWEyMGE0YmJjNGExMzVlNTE0N2IxNWVmYjFlMWY2NTkuLmRlNzBmYzE2Njk0MTc1ZDFhOTM1
NjMyMTk4ZTI2ZTA1OGZhOGJjZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtNjQzLDEzICs2NDMsMTQgQEAgU3RyaW5n
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWlu
TGlzdChjb25zdCBIYXNoU2UKICAgICBmb3IgKGF1dG8mIHRvcEZyYW1lUmVzb3VyY2UgOiBkb21h
aW5MaXN0KSB7CiAgICAgICAgIAogICAgICAgICAvLyBJbnNlcnQgcXVlcnkgd2lsbCBmYWlsIGlm
IHRvcCBmcmFtZSBkb21haW4gaXMgbm90IGFscmVhZHkgaW4gdGhlIGRhdGFiYXNlCi0gICAgICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lUmVz
b3VyY2UpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyInKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodG9wRnJhbWVSZXNvdXJjZS5zdHJpbmco
KSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVSZXNv
dXJjZSk7CisgICAgICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICBpZiAoIWJ1
aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
LCAiKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZCh0b3BGcmFtZVJlc291cmNlLnN0cmluZygpKTsKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCciJyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOwpAQCAtNzA3LDggKzcwOCwxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZShjb25zdCBSZXNvdXJjZQog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBzdGF0aXN0aWNzTWFwID0gbWVtb3J5U3RvcmUu
ZGF0YSgpOwotICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcCkK
LSAgICAgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljLnZhbHVlKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXApIHsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBpbnNlcnRPYnNlcnZlZERvbWFpbihzdGF0aXN0aWMudmFsdWUpOworICAgICAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBv
cHVsYXRlRnJvbU1lbW9yeVN0b3JlIGluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21w
bGV0ZSwgZXJyb3IgbWVzc2FnZTogJXtwcml2YXRlfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gTWFrZSBhIHNlcGFyYXRlIHBh
c3MgZm9yIGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdlCiAgICAgLy8gY2FuIHJlZmVy
IHRvIHRoZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCkBAIC03NzMsOSArNzgwLDE0IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGlj
cyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpIHsKLSAgICAgICAgaWYg
KCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQotICAgICAgICAgICAgaW5z
ZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAo
IWRvbWFpbklEKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikpIHsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1lcmdlU3RhdGlzdGljcyBpbnNlcnRPYnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tcGxl
dGUsIGVycm9yIG1lc3NhZ2U6ICV7cHJpdmF0ZX1zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIG1lcmdlU3RhdGlzdGljKHN0YXRpc3RpYyk7CiAgICAgfQogCkBAIC0xMzUzLDcgKzEzNjUs
MTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFn
ZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAotICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXJl
c3VsdC5zZWNvbmQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0
b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgc3dpdGNoIChjb29raWVB
Y2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKSkgewogICAgIGNhc2UgQ29va2ll
QWNjZXNzOjpDYW5ub3RSZXF1ZXN0OgpAQCAtMTM4Nyw2ICsxNDAzLDEwIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZy
YW1lRG9tYWluJiYKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8g
c3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBzd2l0Y2ggKGNvb2tpZUFjY2Vzcyhz
dWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pKSB7CiAgICAgY2FzZSBDb29raWVBY2Nlc3M6
OkNhbm5vdFJlcXVlc3Q6CkBAIC0xNDAyLDcgKzE0MjIsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFp
biYmCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8gdXNlcldhc1Byb21wdGVkRWFy
bGllciA9IGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVT
dGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRF
YXJsaWVyID0gaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCgqc3ViRnJh
bWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CiAgICAgaWYgKHVzZXJXYXNQcm9tcHRl
ZEVhcmxpZXIgPT0gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObykgewogICAgICAgICBS
RUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgSVRQRGVidWcsICJBYm91
dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nl
c3MgdG8gJXtwcml2YXRlfXMgdW5kZXIgJXtwcml2YXRlfXMgb3Igbm90LiIsIHN1YkZyYW1lRG9t
YWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVz
OjpSZXF1aXJlc1VzZXJQcm9tcHQpOwpAQCAtMTQxNCw3ICsxNDM0LDcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJh
bWVEb21haW4mJgogCiAgICAgU1FMaXRlU3RhdGVtZW50IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3Mo
bV9kYXRhYmFzZSwgIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iKTsKICAgICBpZiAo
aW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MuYmluZEludCgxLCBzdWJGcmFtZVN0YXR1cy5zZWNvbmQp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLmJpbmRJbnQo
MSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCkgIT0gU1FMSVRFX09LCiAgICAgICAgIHx8IGluY3Jl
bWVudFN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICV7cHJpdmF0ZX1zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQ0NCw5ICsxNDY0LDEzIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vz
cyhTdWJGcmFtZURvbWFpbiYmIHN1CiAKICAgICBpZiAocHJvbXB0V2FzU2hvd24gPT0gU3RvcmFn
ZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMpIHsKICAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1
cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1l
RG9tYWluKTsKKyAgICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3Mgd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5m
aXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOwogICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVy
YWN0aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotICAg
ICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9t
YWluIH0pLCBzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOworICAgICAgICBpbnNlcnREb21haW5SZWxh
dGlvbnNoaXBMaXN0KHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNo
U2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqc3ViRnJhbWVTdGF0
dXMuc2Vjb25kKTsKICAgICB9CiAKICAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZN
b3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBh
Z2VJRCwgcHJvbXB0V2FzU2hvd24sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE0
NjQsOSArMTQ4OCwxMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbQogICAgIGlmIChwcm9tcHRX
YXNTaG93bk5vd09yRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Olllcykg
ewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAg
ICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdHVzLmZpcnN0
ID09IEFkZGVkUmVjb3JkOjpObyk7CiAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rp
b24oc3ViRnJhbWVEb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSk7Ci0gICAgICAg
IEFTU0VSVChoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHN1YkZyYW1l
U3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93bjo6WWVzKTsKKyAgICAgICAgQVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Ro
cm91Z2hQcm9tcHQoKnN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pID09IFN0
b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKTsKICNlbmRpZgogICAgICAgICBzZXRVc2Vy
SW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CiAgICAg
fQpAQCAtMTQ4NSw4ICsxNTEzLDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNlCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxl
RG9tYWluIDogZG9tYWlucykKLSAgICAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pOworICAgIGZvciAoYXV0byYgcmVnaXN0
cmFibGVEb21haW4gOiBkb21haW5zKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pOwor
ICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgfQogCiAgICAgU1FMaXRl
U3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5n
KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKICAg
ICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKQEAg
LTE1MDYsMTIgKzE1MzcsMjEgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmUKICAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21haW5zVG9CbG9jazsKICAgICBwcmltYXJ5RG9t
YWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKIAotICAgIGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVz
b3VyY2UoKSk7CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOworICAgIGlm
ICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1
ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgZm9yIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3Vy
Y2UiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICBzZXRQcmV2YWxl
bnRSZXNvdXJjZShkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2U6OkhpZ2gpOwogICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBl
bmQoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKIAogICAgIGlmICghZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlKCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSk7CisgICAg
ICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlIiwgdGhpcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9
CiAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiAgICAgICAgIHByaW1hcnlEb21h
aW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgp
KTsKICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJXtwcml2YXRl
fXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1v
ZGUuIiwgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtMTUzMCw4ICsxNTcwLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvCiAgICAg
Ym9vbCBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzTWFpbkZyYW1l
ICYmICEoYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5k
U291cmNlRG9tYWluc1NhbWVTaXRlKSkgewogICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7
CisgICAgICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRl
ZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IG9mIHRhcmdldCBkb21haW4iLCB0aGlzKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICB1cGRhdGVMYXN0U2Vlbih0
YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9u
KFdhbGxUaW1lOjpub3coKSkpOwotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgdGFyZ2V0UmVzdWx0LnNlY29uZCk7CisgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAq
dGFyZ2V0UmVzdWx0LnNlY29uZCk7CiAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRy
dWU7CiAgICAgfQogCkBAIC0xNTQxLDE1ICsxNTg1LDIzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJs
ZURvCiAgICAgICAgICAgICBpZiAoaXNSZWRpcmVjdCB8fCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0
RGVsYXlXaXRob3V0VXNlckludGVyYWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgYXV0byByZWRp
cmVjdGluZ0RvbWFpblJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHNvdXJjZURvbWFpbik7CiAgICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXRE
b21haW4pOwotICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7
IHRhcmdldERvbWFpbiB9KSwgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKLSAgICAg
ICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHNvdXJjZURvbWFp
biB9KSwgdGFyZ2V0UmVzdWx0LnNlY29uZCk7CisgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRS
ZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdh
dGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IG9mIHRh
cmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFpbkZyYW1lKSIsIHRoaXMpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1
ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGly
ZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNl
dDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vj
b25kKTsKICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKICAgICAgICAgICAg
IGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOwogICAgICAgICAgICAgYXV0byB0YXJn
ZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
YXJnZXREb21haW4pOwotICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+KHsgdGFyZ2V0RG9tYWluIH0pLCByZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOwot
ICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VE
b21haW4gfSksIHRhcmdldFJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgaWYgKCF0YXJnZXRS
ZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9u
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgb2YgdGFyZ2V0
IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNSZWRpcmVjdCkiLCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxh
dGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpyZWRpcmVjdGluZ0RvbWFpblJl
c3VsdC5zZWNvbmQpOworICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKICAgICAgICAg
ICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
NTY0LDcgKzE2MTYsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihjb24KICAgICBBU1NFUlQoZnJv
bURvbWFpbiAhPSB0b0RvbWFpbik7CiAKICAgICBhdXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9Eb21haW4pOwotICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVl
cnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgZnJvbURvbWFpbiB9KSwgdG9Eb21haW5S
ZXN1bHQuc2Vjb25kKTsKKyAgICBpZiAoIXRvRG9tYWluUmVzdWx0LnNlY29uZCkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVj
b3JhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdCh0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyBmcm9tRG9tYWluIH0pLCAqdG9Eb21haW5SZXN1bHQuc2Vjb25kKTsKICAg
ICAKICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJjZShmcm9tRG9tYWluKSkKICAgICAgICAgc2V0
SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCh0b0RvbWFpbiwgdHJ1ZSk7CkBA
IC0xNTkyLDcgKzE2NDgsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWkKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGJvb2wgZGlkSGF2ZVByZXZpb3VzVXNlckludGVy
YWN0aW9uID0gaGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5k
b3c6OkxvbmcpOwotICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIHdh
cyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0cnVl
LCBXYWxsVGltZTo6bm93KCkpOwogICAgIGlmIChkaWRIYXZlUHJldmlvdXNVc2VySW50ZXJhY3Rp
b24pIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTE2MDYsMTEgKzE2NjYsMTUg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKIAogICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWlu
LCBmYWxzZSwgeyB9KTsKIAogICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNz
KG1fZGF0YWJhc2UsICJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgZG9tYWluSUQgPSA/Iik7CiAgICAgaWYgKHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJl
cGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLmJpbmRJ
bnQoMSwgdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHJlbW92
ZVN0b3JhZ2VBY2Nlc3MuYmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRF
X09LCiAgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rp
b24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHJpdmF0ZX1zIiwgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtMTgwMyw4ICsxODY3LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwotICAgIAorICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmNsZWFyUHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmICht
X2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmlu
ZygpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgfHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSwgZXJyb3IgbWVzc2FnZTogJXtwcml2
YXRlfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTE4MjAsOCArMTg4
NywxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFu
ZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oZG9tYWluKTsKLSAgICAKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vj
b25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhl
cmVkIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAobV91cGRhdGVHcmFuZGZhdGhlcmVk
U3RhdGVtZW50LmJpbmRJbnQoMSwgdmFsdWUpICE9IFNRTElURV9PSwogICAgICAgICB8fCBtX3Vw
ZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAh
PSBTUUxJVEVfT0sKICAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewpAQCAtMTgzOCw4ICsxOTA4LDExIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwotICAg
IAorICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIs
IHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChtX3VwZGF0ZUlzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxTdGF0ZW1lbnQuYmluZEludCgxLCB2YWx1ZSkg
IT0gU1FMSVRFX09LCiAgICAgICAgIHx8IG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29r
aWVEYXRhUmVtb3ZhbFN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNR
TElURV9PSwogICAgICAgICB8fCBtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWxTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CkBAIC0xODkzLDkgKzE5
NjYsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFMKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOwotCisgICAgaWYgKCFyZXN1bHQuc2Vj
b25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQg
YXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIC8vIEZvciBjb25z
aXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRo
ZSB0b3AgZnJhbWUgZG9tYWluLgotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHRvcEZyYW1lRG9tYWluIH0pLCByZXN1bHQuc2Vjb25kKTsKKyAgICBpbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNl
dDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQp
OwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJl
c291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCkBAIC0x
OTAzLDkgKzE5NzksMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnMKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotCisgICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3Rp
Y3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgotICAgIGluc2VydERvbWFpblJlbGF0
aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCByZXN1bHQuc2Vjb25kKTsK
KyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFp
biB9KSwgKnJlc3VsdC5zZWNvbmQpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVz
b3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVk
aXJlY3REb21haW4pCkBAIC0xOTEzLDkgKzE5OTIsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFMKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VE
b21haW4pOwotCisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28g
aGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCi0gICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVl
cnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksIHJlc3Vs
dC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGly
ZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3RE
b21haW4mIHJlZGlyZWN0RG9tYWluKQpAQCAtMTkyMyw5ICsyMDA1LDEyIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKGNvbnN0CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1
YnJlc291cmNlRG9tYWluKTsKLQorICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMp
OworICAgICAgICByZXR1cm47CisgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBz
dXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21h
aW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERv
bWFpbiB9KSwgcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlz
dChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCkBAIC0xOTMzLDkgKzIwMTgsMTIgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFRvcEYKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4odG9wRnJhbWVEb21haW4pOwotCisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4u
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSks
IHJlc3VsdC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJl
ZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQpAQCAtMTk0MywxMiArMjAzMSwxNSBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBUbwogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byByZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFt
ZURvbWFpbik7Ci0KKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3Qg
Y29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNv
IGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVl
cnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksIHJlc3Vs
dC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJl
Y3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKIH0KIAotc3RkOjpwYWlyPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgdW5zaWduZWQ+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQorc3RkOjpw
YWlyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgT3B0
aW9uYWw8dW5zaWduZWQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApA
QCAtMTk3MCw3ICsyMDYxLDEzIEBAIHN0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6QWRkZWRSZWNvcmQsIHVuc2lnbmVkPiBSZXNvdXJjZUxvCiAgICAgQVNTRVJU
X1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKIAogICAgIFJl
c291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9tYWluKTsKLSAgICBpbnNlcnRP
YnNlcnZlZERvbWFpbihuZXdPYnNlcnZhdGlvbik7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRP
YnNlcnZlZERvbWFpbihuZXdPYnNlcnZhdGlvbik7CisKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4gaW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRvIGNvbXBs
ZXRlLCBlcnJvciBtZXNzYWdlOiAle3ByaXZhdGV9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IHsgQWRkZWRSZWNvcmQ6Ok5vLCBXVEY6Om51bGxvcHQgfTsKKyAgICB9CiAKICAgICByZXR1cm4g
eyBBZGRlZFJlY29yZDo6WWVzLCBkb21haW5JRChkb21haW4pLnZhbHVlKCkgfTsKIH0KQEAgLTIz
NjAsNyArMjQ1NywxMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vl
biB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWlu
LCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKIH0KIApAQCAt
MjM3MCw4ICsyNDcyLDEzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlCiAKICAgICBpZiAoc2hv
dWxkU2tpcChkb21haW4pKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwor
ICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9B
TExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxl
ZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAg
ICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6Okhp
Z2gpOwogfQogCkBAIC0yMzgyLDcgKzI0ODksMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHIK
ICAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21w
bGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKaW5kZXggODU3MzA5ODgxZTRiNDNhOWI5MmMw
N2IwYTZlNDIzOGZlNTc0ODNiNS4uNWJhMDBlYmM5OGUwNmExYjlhOTYyMTRmM2UxMzA1MGY2ZmU0
MmY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRUZWxl
bWV0cnlQcmVwYXJlZFN0YXRlbWVudHMoKSBjb25zdDsKICAgICB2b2lkIHJlc2V0VGVsZW1ldHJ5
U3RhdGVtZW50cygpIGNvbnN0OwogICAgIHZvaWQgY2FsY3VsYXRlVGVsZW1ldHJ5RGF0YShQcmV2
YWxlbnRSZXNvdXJjZURhdGFiYXNlVGVsZW1ldHJ5JikgY29uc3Q7Ci0gICAgYm9vbCBpbnNlcnRP
YnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBp
bnNlcnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9V
TlVTRURfUkVUVVJOOwogICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jiwg
dW5zaWduZWQpOwogICAgIGJvb2wgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCYsIHVuc2lnbmVkIGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdG9wRnJhbWVEb21haW4pOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICBlbnVtIGNsYXNzIEFk
ZGVkUmVjb3JkIHsgTm8sIFllcyB9OwotICAgIHN0ZDo6cGFpcjxBZGRlZFJlY29yZCwgdW5zaWdu
ZWQ+IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7CisgICAgc3RkOjpwYWlyPEFkZGVkUmVjb3JkLCBPcHRpb25hbDx1
bnNpZ25lZD4+IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIGJvb2wgc2hv
dWxkUmVtb3ZlQWxsV2Vic2l0ZURhdGFGb3IoY29uc3QgRG9tYWluRGF0YSYsIGJvb2wgc2hvdWxk
Q2hlY2tGb3JHcmFuZGZhdGhlcmluZyk7CiAgICAgYm9vbCBzaG91bGRSZW1vdmVBbGxCdXRDb29r
aWVzRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJp
bmcpOwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVnaXN0cmFibGVEb21haW4sIFdlYnNpdGVEYXRh
VG9SZW1vdmU+PiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkgb3Zl
cnJpZGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>