<?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>185410</bug_id>
          
          <creation_ts>2018-05-07 19:22:43 -0700</creation_ts>
          <short_desc>Check X-Frame-Options and CSP frame-ancestors in network process</short_desc>
          <delta_ts>2018-06-25 16:22:25 -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 Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=185412</see_also>
          <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>
          <dependson>185393</dependson>
          <blocked>185442</blocked>
    
    <blocked>185443</blocked>
    
    <blocked>185475</blocked>
    
    <blocked>186090</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>japhet</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mkwst</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1421593</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-05-07 19:22:43 -0700</bug_when>
    <thetext>Check X-Frame-Options and CSP frame-ancestors in network process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421594</commentid>
    <comment_count>1</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-05-07 19:23:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/37733934&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421616</commentid>
    <comment_count>2</comment_count>
      <attachid>339795</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-05-07 20:57:32 -0700</bug_when>
    <thetext>Created attachment 339795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421625</commentid>
    <comment_count>3</comment_count>
      <attachid>339795</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-07 21:24:20 -0700</bug_when>
    <thetext>Comment on attachment 339795
Patch

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

&gt; Source/WebCore/loader/DocumentLoader.cpp:770
&gt; +    if (!m_frame-&gt;settings().networkProcessCSPFrameAncestorsCheckingEnabled() || !RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess()) {

I think we should add a new method to PlatformStrategies instead of using settings to behave differently in WK1 and WK2.

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:486
&gt; +    if (ancestorOrigins.size() == 1)
&gt; +        return true; // The top-most frame is always allowed.

Instead of adding a comment like this, why don&apos;t we use a local boolean variable with a descriptive name?
e.g.
bool isNavigatingTopLevelFrame = ancestorOrigins.size() == 1;
if (isNavigatingTopLevelFrame)
    return true;

&gt; Source/WebCore/page/csp/ContentSecurityPolicyDirectiveList.cpp:93
&gt; +        URL origin { URL { }, (*it)-&gt;toString() };

Why are we converting SecurityOrigin &gt; String &gt; URL?
What&apos;s the practical implication of this conversion?
I think we should either add a comment here or add a member function with a descriptive name to SecurityOrigin
referencing https://w3c.github.io/webappsec-csp/#frame-ancestors-navigation-response

&gt; Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:407
&gt; +    XFrameOptionsDisposition disposition = parseXFrameOptionsHeader(xFrameOptions);

Seems like we don&apos;t need this local variable. It&apos;s only used in switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421638</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-05-07 21:48:17 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #3)
&gt; Comment on attachment 339795 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=339795&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/DocumentLoader.cpp:770
&gt; &gt; +    if (!m_frame-&gt;settings().networkProcessCSPFrameAncestorsCheckingEnabled() || !RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess()) {
&gt; 
&gt; I think we should add a new method to PlatformStrategies instead of using
&gt; settings to behave differently in WK1 and WK2.
&gt; 

Filed bug #185412 to address this.

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:486
&gt; &gt; +    if (ancestorOrigins.size() == 1)
&gt; &gt; +        return true; // The top-most frame is always allowed.
&gt; 
&gt; Instead of adding a comment like this, why don&apos;t we use a local boolean
&gt; variable with a descriptive name?
&gt; e.g.
&gt; bool isNavigatingTopLevelFrame = ancestorOrigins.size() == 1;
&gt; if (isNavigatingTopLevelFrame)
&gt;     return true;
&gt; 

I will use your suggestion though I will call the local variable isTopLevelFrame since this algorithm doesn&apos;t know about navigations. It only knows about frames.

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicyDirectiveList.cpp:93
&gt; &gt; +        URL origin { URL { }, (*it)-&gt;toString() };
&gt; 
&gt; Why are we converting SecurityOrigin &gt; String &gt; URL?
&gt; What&apos;s the practical implication of this conversion?
&gt; I think we should either add a comment here or add a member function with a
&gt; descriptive name to SecurityOrigin
&gt; referencing
&gt; https://w3c.github.io/webappsec-csp/#frame-ancestors-navigation-response
&gt; 

Will extract out this conversion into a convenience function and add a comment above it:

// Used to compute the comparison URL when checking frame-ancestors. We do this weird conversion so that child
// frames of a page with a unique origin (e.g. about:blank) are not blocked due to their frame-ancestors policy
// and do not need to add the parent&apos;s URL to their policy. The latter could allow the child page to be framed
// by anyone. See &lt;https://github.com/w3c/webappsec/issues/311&gt; for more details.
static inline URL urlFromOrigin(const SecurityOrigin&amp; origin)
{
    return { URL { }, origin.toString() };
}

&gt; &gt; Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:407
&gt; &gt; +    XFrameOptionsDisposition disposition = parseXFrameOptionsHeader(xFrameOptions);
&gt; 
&gt; Seems like we don&apos;t need this local variable. It&apos;s only used in switch.

Will inline parseXFrameOptionsHeader(xFrameOptions) into the switch and remove the local variable before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421640</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-05-07 22:02:55 -0700</bug_when>
    <thetext>Committed r231479: &lt;https://trac.webkit.org/changeset/231479&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421771</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-05-08 10:21:43 -0700</bug_when>
    <thetext>http/tests/appcache/x-frame-options-prevents-framing.php started to time out after this patch landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421783</commentid>
    <comment_count>7</comment_count>
      <attachid>339795</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-05-08 10:37:52 -0700</bug_when>
    <thetext>Comment on attachment 339795
Patch

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

&gt;&gt;&gt; Source/WebCore/loader/DocumentLoader.cpp:770
&gt;&gt;&gt; +    if (!m_frame-&gt;settings().networkProcessCSPFrameAncestorsCheckingEnabled() || !RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess()) {
&gt;&gt; 
&gt;&gt; I think we should add a new method to PlatformStrategies instead of using settings to behave differently in WK1 and WK2.
&gt; 
&gt; Filed bug #185412 to address this.

LoaderStrategy has isDoingLoadingSecurityChecks for that purpose.

&gt; Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:481
&gt; +    if (error.isNull() &amp;&amp; isMainResource() &amp;&amp; shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions(m_response)) {

In case X-Frame-Options and From-Origin are both set, From-Origin will currently win over X-Frame-Options.
Maybe it should be reverse. Might be worth waiting for the From-Origin spec before changing that.

&gt; Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:1099
&gt; +{

The way it was done for other checks like CORS checks was to send back an error to WebProcess.
The WebProcess was then responsible to do or not do the JS console logging.
If we go the addConsoleMessage road, we should probably use that consistently, which would mean that whenever NetworkResourceLoader receives an error from NetworkLoad/NetworkLoadChecker/itself, NetworkResourceLoader would need to determine whether to log it or not.
I quite like NetworkProcess being simple and just returning either a response or an error but this is probably a matter of taste.

&gt; Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:1103
&gt; +void NetworkResourceLoader::sendCSPViolationReport(URL&amp;&amp; reportURL, Ref&lt;FormData&gt;&amp;&amp; report)

The way it is implemented for DocumentThreadableLoader is to send back an error to WebProcess.
Then, we reuse the existing WebProcess handling to generate and report the CSP violation report.
The idea was to add in the future some CSP specific ResourceError, maybe using the domain of ResourceError.

I am not quite sure what is best there.
Anyway, we should make the CSP violation handling consistent for all loads/loaders.

&gt; Source/WebKit/NetworkProcess/NetworkResourceLoader.h:116
&gt; +    bool isMainFrameLoad() const { return isMainResource() &amp;&amp; m_parameters.frameAncestorOrigins.size() == 1; }

I believe NetworkResourceLoadParameters has an isMainFrameNavigation boolean for that purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421830</commentid>
    <comment_count>8</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-05-08 11:28:09 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #6)
&gt; http/tests/appcache/x-frame-options-prevents-framing.php started to time out
&gt; after this patch landed.

This also caused http/tests/quicklook/csp-header-ignored.html to start failing on iOS:
https://build.webkit.org/results/Apple%20iOS%2011%20Simulator%20Release%20WK2%20(Tests)/r231487%20(4843)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421888</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-05-08 12:35:13 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #8)
&gt; (In reply to youenn fablet from comment #6)
&gt; &gt; http/tests/appcache/x-frame-options-prevents-framing.php started to time out
&gt; &gt; after this patch landed.
&gt; 
&gt; This also caused http/tests/quicklook/csp-header-ignored.html to start
&gt; failing on iOS:
&gt; https://build.webkit.org/results/
&gt; Apple%20iOS%2011%20Simulator%20Release%20WK2%20(Tests)/r231487%20(4843)/
&gt; results.html

For now, marked the test as Failure in &lt;https://trac.webkit.org/changeset/231500&gt;. Will follow up with a change that removes the test from TestExpectations as part of the fix for bug #185442.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421890</commentid>
    <comment_count>10</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-05-08 12:47:22 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #9)
&gt; For now, marked the test as Failure in
&gt; &lt;https://trac.webkit.org/changeset/231500&gt;. Will follow up with a change
&gt; that removes the test from TestExpectations as part of the fix for bug
&gt; #185442.

We will also need to address the timeout Youenn called out (http/tests/appcache/x-frame-options-prevents-framing.php).

https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2Fappcache%2Fx-frame-options-prevents-framing.php</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421909</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-05-08 13:30:44 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #10)
&gt; (In reply to Daniel Bates from comment #9)
&gt; &gt; For now, marked the test as Failure in
&gt; &gt; &lt;https://trac.webkit.org/changeset/231500&gt;. Will follow up with a change
&gt; &gt; that removes the test from TestExpectations as part of the fix for bug
&gt; &gt; #185442.
&gt; 
&gt; We will also need to address the timeout Youenn called out
&gt; (http/tests/appcache/x-frame-options-prevents-framing.php).
&gt; 
&gt; https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.
&gt; html#showAllRuns=true&amp;tests=http%2Ftests%2Fappcache%2Fx-frame-options-
&gt; prevents-framing.php

For now, skipped the test in WebKit2 in &lt;https://trac.webkit.org/changeset/231509&gt;. Will address in bug #185443.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339795</attachid>
            <date>2018-05-07 20:57:32 -0700</date>
            <delta_ts>2018-05-07 21:24:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185410-20180507205731.patch</filename>
            <type>text/plain</type>
            <size>48167</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxNDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YjIxNzZmYTNiNTFkOWY4NjUxYjk3OGQyZmM3OGFlN2JiYTg4Njg3Li42OTUyMDYwYTEwMGEyYTgx
NWU0OGNkY2EwODIyNGJmNzYxZWMwMzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxOC0wNS0wNyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+
CisKKyAgICAgICAgQ2hlY2sgWC1GcmFtZS1PcHRpb25zIGFuZCBDU1AgZnJhbWUtYW5jZXN0b3Jz
IGluIG5ldHdvcmsgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg1NDEwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNzczMzkzND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZW51bSB0
cmFpdHMgZm9yIE1lc3NhZ2VTb3VyY2UgYW5kIE1lc3NhZ2VMZXZlbCBzbyB0aGF0IHdlIGNhbiBl
bmNvZGUgYW5kIGRlY29kZSB0aGVtIGZvciBJUEMuCisKKyAgICAgICAgKiBydW50aW1lL0NvbnNv
bGVUeXBlcy5oOgorCiAyMDE4LTA1LTA2ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIFtKU0NdIFJlbW92ZSAidXNpbmcgbmFtZXNwYWNlIHN0ZDsiIGZy
b20gSlNDLCBibWFsbG9jLCBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MDkyZTE1YzI0NDg1OTdiYTE2ZGU1
MjhmM2Y1NWI0Yjk0OTg1MDY2Li4wN2Y1OWEyNmFjMjE3ZmRmNmYzYjdjMWY0ZjI5MjdmYzRjMTg5
ODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDEgQEAKIDIwMTgtMDUtMDcgIERhbmllbCBCYXRl
cyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCisgICAgICAgIENoZWNrIFgtRnJhbWUtT3B0aW9ucyBh
bmQgQ1NQIGZyYW1lLWFuY2VzdG9ycyBpbiBuZXR3b3JrIHByb2Nlc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTQxMAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzc3MzM5MzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1ha2UgUGlu
Z0xvYWRlci5oIGEgcHJpdmF0ZSBoZWFkZXIgc28gdGhhdCB3ZSBjYW4gaW5jbHVkZSBpdCBpbiBX
ZWJLaXQuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TG9hZGVyOjpyZXNwb25zZVJlY2VpdmVkKTogT25seSBjaGVjayBDU1Ag
ZnJhbWUtYW5jZXN0b3JzIGFuZCBYLUZyYW1lLU9wdGlvbnMgaGVyZSBpZgorICAgICAgICB3ZSBh
cmUgbm90IGNoZWNraW5nIHRoZW0gaW4gdGhlIE5ldHdvcmtQcm9jZXNzIGFuZCBIVFRQIHJlc3Bv
bnNlIGFjY2VzcyBpcyByZXN0cmljdGVkLiBJIGNvZGUgaXMgb3RoZXJ3aXNlIGtlcHQKKyAgICAg
ICAgdW5jaGFuZ2VkLiBUaGVyZSBtYXkgYmUgb3Bwb3J0dW5pdGllcyB0byBjbGVhbiB0aGlzIGNv
ZGUgdXAgbW9yZSBhbmQgc2hhcmUgbW9yZSBvZiBpdC4gV2Ugc2hvdWxkIGxvb2sgaW50byB0aGlz
CisgICAgICAgIGluIHN1YnNlcXVlbnQgYnVncy4KKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaDogQ2hhbmdlIHZpc2liaWxpdHkgb2Ygc3RvcExvYWRpbmdBZnRlclhGcmFtZU9wdGlv
bnNPckNvbnRlbnRTZWN1cml0eVBvbGljeURlbmllZCgpIGZyb20KKyAgICAgICAgcHJpdmF0ZSB0
byBwdWJsaWMgYW5kIGV4cG9ydCBpdCBzbyB0aGF0IHdlIGNhbiBjYWxsIGl0IGZyb20gdGhlIFdl
YktpdC4KKyAgICAgICAgKiBsb2FkZXIvUGluZ0xvYWRlci5oOgorICAgICAgICAqIHBhZ2UvU2V0
dGluZ3MueWFtbDogQWRkIGEgbmV3IHNldHRpbmcgY2FsbGVkIG5ldHdvcmtQcm9jZXNzQ1NQRnJh
bWVBbmNlc3RvcnNDaGVja2luZ0VuYWJsZWQgKGRlZmF1bHRzOiBmYWxzZSkKKyAgICAgICAgYW5k
IGlzIGhhcmRjb2RlZCBpbiBXZWJQYWdlLmNwcCB0byBiZSBlbmFibGVkLiBUaGlzIHNldHRpbmcg
aXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgd2Ugd2lsbCBiZSB1c2luZyB0aGUgTmV0d29ya1Byb2Nl
c3MuCisgICAgICAgIElkZWFsbHkgd2Ugd291bGRuJ3QgaGF2ZSB0aGlzIHNldHRpbmcgYW5kIGp1
c3Qga2V5IG9mZiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc3Ry
aWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoKS4KKyAgICAgICAgSG93ZXZlciBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3Mo
KSBpcyBhbHdheXMgZW5hYmxlZCBpbiBXZWJLaXQgTGVnYWN5CisgICAgICAgIGF0IHRoZSB0aW1l
IG9mIHdyaXRpbmcgKHdoeT8pLiBBbmQsIHN0cmFuZ2VseSwgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5yZXN0cmljdGVkSFRUUFJlc3BvbnNlQWNjZXNzKCkKKyAgICAg
ICAgaXMgY29uZGl0aW9uYWxseSBlbmFibGVkIGluIFdlYktpdC4gRm9yIG5vdywgd2UgYWRkIGEg
bmV3IHNldHRpbmcsIG5ldHdvcmtQcm9jZXNzQ1NQRnJhbWVBbmNlc3RvcnNDaGVja2luZ0VuYWJs
ZWQsCisgICAgICAgIHRvIGRldGVybWluZSBpZiBDU1AgY2hlY2tpbmcgc2hvdWxkIGJlIHBlcmZv
cm1lZCBpbiBOZXR3b3JrUHJvY2Vzcy4gRm9yIGNoZWNraW5nIHRvIGFjdHVhbGx5IGhhcHBlbiBp
biBOZXR3b3JrUHJvY2VzcworICAgICAgICBhbmQgbm90IGluIERvY3VtZW50TG9hZGVyOjpyZXNw
b25zZVJlY2VpdmVkKCkgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5y
ZXN0cmljdGVkSFRUUFJlc3BvbnNlQWNjZXNzKCkKKyAgICAgICAgd2lsbCBhbHNvIG5lZWQgdG8g
YmUgZW5hYmxlZC4KKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0ZyYW1lQW5j
ZXN0b3JzIGNvbnN0KTogQWRkZWQgYSB2YXJpYW50IHRoYXQgdGFrZXMgYSB2ZWN0b3Igb2YgYW5j
ZXN0b3Igb3JpZ2lucy4KKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
aDoKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRnJhbWVBbmNlc3RvcnMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnZpb2xh
dGVkRGlyZWN0aXZlRm9yRnJhbWVBbmNlc3Rvck9yaWdpbnMgY29uc3QpOiBEaXR0by4KKyAgICAg
ICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Lmg6IEV4cG9y
dCBjb25zdHJ1Y3RvciBzbyB0aGF0IHdlIGNhbiBpbnZva2UgaXQgZnJvbSBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JDU1BGcmFtZUFuY2VzdG9yc09yWEZyYW1l
T3B0aW9ucygpLgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3Bv
bnNlSGVhZGVycy5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaDog
RXhwb3J0IFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbigpIHNvIHRoYXQgd2UgY2FuIHVzZSBpbiBX
ZWJLaXQuCisKKzIwMTgtMDUtMDcgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgor
CiAgICAgICAgIEFic3RyYWN0IGxvZ2ljIHRvIGxvZyBjb25zb2xlIG1lc3NhZ2VzIGFuZCBzZW5k
IENTUCB2aW9sYXRpb24gcmVwb3J0cyBpbnRvIGEgY2xpZW50CiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUzOTMKICAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzQwMDM2MDUzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiNjFlMWYzMmIzZTRlNjY0MjhhNzQyZDgyNzliY2Vi
ZmM5M2RhZDU5Li44NDBjNzVkMGI4MjI2NGNiYjhjZGQ1ZmEwMWUwYjgyM2QyMjg4ZjJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDE4LTA1LTA3ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVz
QGFwcGxlLmNvbT4KIAorICAgICAgICBDaGVjayBYLUZyYW1lLU9wdGlvbnMgYW5kIENTUCBmcmFt
ZS1hbmNlc3RvcnMgaW4gbmV0d29yayBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU0MTAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM3
NzMzOTM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY29k
ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaG91bGRJbnRlcnJ1cHRM
b2FkRm9yWEZyYW1lT3B0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6c2hvdWxkSW50ZXJydXB0TG9hZEZvckNTUEZyYW1lQW5jZXN0b3JzT3JYRnJhbWVPcHRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJl
dHJpZXZlQ2FjaGVFbnRyeSk6CisgICAgICAgIChOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFkZENv
bnNvbGVNZXNzYWdlKToKKyAgICAgICAgKE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZENTUFZp
b2xhdGlvblJlcG9ydCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2Up
OgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxvYWRlclN0cmF0ZWd5OjpzY2hlZHVsZUxvYWRGcm9tTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZGVyOjpzdG9wTG9hZGluZ0Fm
dGVyWEZyYW1lT3B0aW9uc09yQ29udGVudFNlY3VyaXR5UG9saWN5RGVuaWVkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW46CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWU6OmFkZENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Om1fY3JlZGVudGlhbHNNZXNzZW5nZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNl
bmRDU1BWaW9sYXRpb25SZXBvcnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46
CisKKzIwMTgtMDUtMDcgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCiAgICAg
ICAgIEFic3RyYWN0IGxvZ2ljIHRvIGxvZyBjb25zb2xlIG1lc3NhZ2VzIGFuZCBzZW5kIENTUCB2
aW9sYXRpb24gcmVwb3J0cyBpbnRvIGEgY2xpZW50CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUzOTMKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQw
MDM2MDUzPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29s
ZVR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlVHlwZXMuaApp
bmRleCA3Y2EyZmU3YzdmY2RmNGNlZTBiODAwNWUxNGIwYjNhZTg5NmM0NjVkLi4zZGZlYzAyYjU1
MGIzZmNmMmU3ZjU2MWJkNTZhM2U2NWYyMzY4MzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zb2xlVHlwZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zb2xlVHlwZXMuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBl
bnVtIGNsYXNzIE1lc3NhZ2VTb3VyY2UgewpAQCAtNjksNiArNzEsNDAgQEAgZW51bSBjbGFzcyBN
ZXNzYWdlTGV2ZWwgewogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8SlNDOjpNZXNzYWdlU291cmNlPiB7CisgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgSlNDOjpNZXNzYWdlU291cmNlLAor
ICAgICAgICBKU0M6Ok1lc3NhZ2VTb3VyY2U6OlhNTCwKKyAgICAgICAgSlNDOjpNZXNzYWdlU291
cmNlOjpKUywKKyAgICAgICAgSlNDOjpNZXNzYWdlU291cmNlOjpOZXR3b3JrLAorICAgICAgICBK
U0M6Ok1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksCisgICAgICAgIEpTQzo6TWVzc2FnZVNvdXJj
ZTo6U3RvcmFnZSwKKyAgICAgICAgSlNDOjpNZXNzYWdlU291cmNlOjpBcHBDYWNoZSwKKyAgICAg
ICAgSlNDOjpNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsCisgICAgICAgIEpTQzo6TWVzc2FnZVNv
dXJjZTo6Q1NTLAorICAgICAgICBKU0M6Ok1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LAorICAgICAg
ICBKU0M6Ok1lc3NhZ2VTb3VyY2U6OkNvbnRlbnRCbG9ja2VyLAorICAgICAgICBKU0M6Ok1lc3Nh
Z2VTb3VyY2U6Ok90aGVyLAorICAgICAgICBKU0M6Ok1lc3NhZ2VTb3VyY2U6Ok1lZGlhLAorICAg
ICAgICBKU0M6Ok1lc3NhZ2VTb3VyY2U6OldlYlJUQworICAgID47Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPEpTQzo6TWVzc2FnZUxldmVsPiB7CisgICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKKyAgICAgICAgSlNDOjpNZXNzYWdlTGV2ZWwsCisgICAgICAgIEpTQzo6
TWVzc2FnZUxldmVsOjpMb2csCisgICAgICAgIEpTQzo6TWVzc2FnZUxldmVsOjpXYXJuaW5nLAor
ICAgICAgICBKU0M6Ok1lc3NhZ2VMZXZlbDo6RXJyb3IsCisgICAgICAgIEpTQzo6TWVzc2FnZUxl
dmVsOjpEZWJ1ZywKKyAgICAgICAgSlNDOjpNZXNzYWdlTGV2ZWw6OkluZm8KKyAgICA+OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKIHVzaW5nIEpTQzo6TWVzc2FnZVNvdXJjZTsKIHVzaW5n
IEpTQzo6TWVzc2FnZVR5cGU7CiB1c2luZyBKU0M6Ok1lc3NhZ2VMZXZlbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmOWJkYjhm
OWMzOGU0MzU5MTgyNTQ2NTUzZWJmZjIxOGM4MTJiY2E0Li44NTExMDRhOGM3M2VjMzk1MmQzYjY1
ZDhmMmIwZDIwMzU4OTQ5YjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MTExLDcgKzQxMTEsNyBAQAogCQlEMEJDNTQ0OTE0
NDNBQzRBMDBFMTA1REEgLyogQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBCQzU0NDgxNDQzQUM0QTAwRTEwNURB
IC8qIENhY2hlZFN0eWxlU2hlZXRDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlEMEJENEY1RDE0MDg4NTBGMDA2ODM5QjYgLyogRGljdGF0
aW9uQ29tbWFuZElPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDBCRDRGNUIxNDA4ODUwRjAwNjgzOUI2IC8qIERpY3RhdGlvbkNvbW1hbmRJT1MuaCAq
LzsgfTsKIAkJRDBFREE3NzUxNDNFMzAzQzAwMjhFMzgzIC8qIENhY2hlZFJhd1Jlc291cmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEVEQTc3MzE0
M0UzMDNDMDAyOEUzODMgLyogQ2FjaGVkUmF3UmVzb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlEMEZGMkE1RTExRjhDNDVBMDA3RTc0RTAg
LyogUGluZ0xvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDBGRjJBNUMxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCAqLzsgfTsKKwkJ
RDBGRjJBNUUxMUY4QzQ1QTAwN0U3NEUwIC8qIFBpbmdMb2FkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwRkYyQTVDMTFGOEM0NUEwMDdFNzRFMCAv
KiBQaW5nTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRDMwMjc1NEExMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRldGFpbHNNYXJrZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzMDI3NTQ2
MTJBNUZFODQwMDRCRDgyOCAvKiBSZW5kZXJEZXRhaWxzTWFya2VyLmggKi87IH07CiAJCUQzNTlE
NzhBMTI5Q0EyNzEwMDA2RTVEMiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzNTlENzg3MTI5Q0EyNzEwMDA2RTVE
MiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuaCAqLzsgfTsKIAkJRDM1OUQ4QkYxMjlDQTU1QzAwMDZF
NUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBEMzU5RDhCRDEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0
YWlsc0VsZW1lbnQuaCAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIu
Y3BwCmluZGV4IDk1NGJhNzc3MzQ2YTA0YmU2NmM0MGE5NGM2NzAxZWQwMzEyMjFmM2QuLjA0YjM0
ZTU1MDM5MDFjYmEzYTA1NDQwMjU5NTA5ZjFhNTFhZDUyYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50TG9hZGVyLmNwcApAQCAtNzY2LDI2ICs3NjYsMjcgQEAgdm9pZCBEb2N1bWVu
dExvYWRlcjo6cmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgQ29tcGxldGkKICAgICBBU1NFUlQobV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJj
ZUxvYWRlciB8fCBtX21haW5SZXNvdXJjZSk7CiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
ID0gbV9pZGVudGlmaWVyRm9yTG9hZFdpdGhvdXRSZXNvdXJjZUxvYWRlciA/IG1faWRlbnRpZmll
ckZvckxvYWRXaXRob3V0UmVzb3VyY2VMb2FkZXIgOiBtX21haW5SZXNvdXJjZS0+aWRlbnRpZmll
cigpOwogICAgIEFTU0VSVChpZGVudGlmaWVyKTsKLSAgICAKLSAgICBhdXRvIHVybCA9IHJlc3Bv
bnNlLnVybCgpOwotCi0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5IGNvbnRlbnRTZWN1cml0eVBv
bGljeShVUkwgeyB1cmwgfSwgdGhpcyk7Ci0gICAgY29udGVudFNlY3VyaXR5UG9saWN5LmRpZFJl
Y2VpdmVIZWFkZXJzKENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyB7IHJlc3Bv
bnNlIH0sIG1fcmVxdWVzdC5odHRwUmVmZXJyZXIoKSk7Ci0gICAgaWYgKCFjb250ZW50U2VjdXJp
dHlQb2xpY3kuYWxsb3dGcmFtZUFuY2VzdG9ycygqbV9mcmFtZSwgdXJsKSkgewotICAgICAgICBz
dG9wTG9hZGluZ0FmdGVyWEZyYW1lT3B0aW9uc09yQ29udGVudFNlY3VyaXR5UG9saWN5RGVuaWVk
KGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGNv
bnN0IGF1dG8mIGNvbW1vbkhlYWRlcnMgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuY29t
bW9uSGVhZGVycygpOwotICAgIGF1dG8gaXQgPSBjb21tb25IZWFkZXJzLmZpbmQoSFRUUEhlYWRl
ck5hbWU6OlhGcmFtZU9wdGlvbnMpOwotICAgIGlmIChpdCAhPSBjb21tb25IZWFkZXJzLmVuZCgp
KSB7Ci0gICAgICAgIFN0cmluZyBjb250ZW50ID0gaXQtPnZhbHVlOwotICAgICAgICBpZiAoZnJh
bWVMb2FkZXIoKS0+c2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlvbnMoY29udGVudCwg
dXJsLCBpZGVudGlmaWVyKSkgewotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiUmVmdXNl
ZCB0byBkaXNwbGF5ICciICsgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsg
IicgaW4gYSBmcmFtZSBiZWNhdXNlIGl0IHNldCAnWC1GcmFtZS1PcHRpb25zJyB0byAnIiArIGNv
bnRlbnQgKyAiJy4iOwotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YWRkQ29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1l
c3NhZ2UsIGlkZW50aWZpZXIpOworICAgIGlmICghbV9mcmFtZS0+c2V0dGluZ3MoKS5uZXR3b3Jr
UHJvY2Vzc0NTUEZyYW1lQW5jZXN0b3JzQ2hlY2tpbmdFbmFibGVkKCkgfHwgIVJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkucmVzdHJpY3RlZEhUVFBSZXNwb25zZUFjY2Vz
cygpKSB7CisgICAgICAgIGF1dG8gdXJsID0gcmVzcG9uc2UudXJsKCk7CisgICAgICAgIENvbnRl
bnRTZWN1cml0eVBvbGljeSBjb250ZW50U2VjdXJpdHlQb2xpY3koVVJMIHsgdXJsIH0sIHRoaXMp
OworICAgICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3kuZGlkUmVjZWl2ZUhlYWRlcnMoQ29udGVu
dFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIHsgcmVzcG9uc2UgfSwgbV9yZXF1ZXN0Lmh0
dHBSZWZlcnJlcigpKTsKKyAgICAgICAgaWYgKCFjb250ZW50U2VjdXJpdHlQb2xpY3kuYWxsb3dG
cmFtZUFuY2VzdG9ycygqbV9mcmFtZSwgdXJsKSkgewogICAgICAgICAgICAgc3RvcExvYWRpbmdB
ZnRlclhGcmFtZU9wdGlvbnNPckNvbnRlbnRTZWN1cml0eVBvbGljeURlbmllZChpZGVudGlmaWVy
LCByZXNwb25zZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBj
b25zdCBhdXRvJiBjb21tb25IZWFkZXJzID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmNv
bW1vbkhlYWRlcnMoKTsKKyAgICAgICAgYXV0byBpdCA9IGNvbW1vbkhlYWRlcnMuZmluZChIVFRQ
SGVhZGVyTmFtZTo6WEZyYW1lT3B0aW9ucyk7CisgICAgICAgIGlmIChpdCAhPSBjb21tb25IZWFk
ZXJzLmVuZCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgY29udGVudCA9IGl0LT52YWx1ZTsKKyAg
ICAgICAgICAgIGlmIChmcmFtZUxvYWRlcigpLT5zaG91bGRJbnRlcnJ1cHRMb2FkRm9yWEZyYW1l
T3B0aW9ucyhjb250ZW50LCB1cmwsIGlkZW50aWZpZXIpKSB7CisgICAgICAgICAgICAgICAgU3Ry
aW5nIG1lc3NhZ2UgPSAiUmVmdXNlZCB0byBkaXNwbGF5ICciICsgdXJsLnN0cmluZ0NlbnRlckVs
bGlwc2l6ZWRUb0xlbmd0aCgpICsgIicgaW4gYSBmcmFtZSBiZWNhdXNlIGl0IHNldCAnWC1GcmFt
ZS1PcHRpb25zJyB0byAnIiArIGNvbnRlbnQgKyAiJy4iOworICAgICAgICAgICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNzYWdlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAg
ICAgICBzdG9wTG9hZGluZ0FmdGVyWEZyYW1lT3B0aW9uc09yQ29udGVudFNlY3VyaXR5UG9saWN5
RGVuaWVkKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBUaGVyZSBpcyBhIGJ1ZyBp
biBDRk5ldHdvcmsgd2hlcmUgY2FsbGJhY2tzIGNhbiBiZSBkaXNwYXRjaGVkIGV2ZW4gd2hlbiBs
b2FkcyBhcmUgZGVmZXJyZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCmlu
ZGV4IDAwZjZkY2EzNTVlM2QxOWM0YWU4YTZhOGI2NjZmYzdjM2I1OWNmNGQuLjA3MWVmNjRhY2E5
M2VhNDQ0MzY5ZjA5ODZmOGFkNGNhZjc4ZWQwYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudExvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5oCkBAIC0yNTMsNiArMjUzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdG9w
TG9hZGluZ1BsdWdJbnMoKTsKICAgICB2b2lkIHN0b3BMb2FkaW5nU3VicmVzb3VyY2VzKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdG9wTG9hZGluZ0FmdGVyWEZyYW1lT3B0aW9uc09yQ29u
dGVudFNlY3VyaXR5UG9saWN5RGVuaWVkKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAgYm9vbCB1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkOyB9CiAg
ICAgdm9pZCBzZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBt
X3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQgPSBlbmFibGVkOyB9CkBAIC0zODQsOCArMzg1
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BMb2FkaW5nRm9yUG9saWN5Q2hhbmdlKCk7CiAg
ICAgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKCkgY29uc3Q7
CiAKLSAgICB2b2lkIHN0b3BMb2FkaW5nQWZ0ZXJYRnJhbWVPcHRpb25zT3JDb250ZW50U2VjdXJp
dHlQb2xpY3lEZW5pZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7Ci0KICNpZiBIQVZFKFJVTkxPT1BfVElNRVIpCiAgICAgdHlwZWRlZiBSdW5Mb29w
VGltZXI8RG9jdW1lbnRMb2FkZXI+IERvY3VtZW50TG9hZGVyVGltZXI7CiAjZWxzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9QaW5nTG9hZGVyLmgKaW5kZXggMTc1YTQ3MGE1OTA0YTVmZWI3MDgwNGE1ZDZhMGNl
ZDAzNDJiN2VjMS4uMTU0ODlkY2YwNGJmMWRlZDc4ODZlZjhjMDg2MTdkZGJjMTNkOWExOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1BpbmdMb2FkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUGluZ0xvYWRlci5oCkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIFBpbmdM
b2FkZXIgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGxvYWRJbWFnZShGcmFtZSYsIGNvbnN0
IFVSTCYpOwogICAgIHN0YXRpYyB2b2lkIHNlbmRQaW5nKEZyYW1lJiwgY29uc3QgVVJMJiBwaW5n
VVJMLCBjb25zdCBVUkwmIGRlc3RpbmF0aW9uVVJMKTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kVmlv
bGF0aW9uUmVwb3J0KEZyYW1lJiwgY29uc3QgVVJMJiByZXBvcnRVUkwsIFJlZjxGb3JtRGF0YT4m
JiByZXBvcnQsIFZpb2xhdGlvblJlcG9ydFR5cGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNlbmRWaW9sYXRpb25SZXBvcnQoRnJhbWUmLCBjb25zdCBVUkwmIHJlcG9ydFVSTCwg
UmVmPEZvcm1EYXRhPiYmIHJlcG9ydCwgVmlvbGF0aW9uUmVwb3J0VHlwZSk7CiAKIHByaXZhdGU6
CiAgICAgZW51bSBjbGFzcyBTaG91bGRGb2xsb3dSZWRpcmVjdHMgeyBObywgWWVzIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLnlhbWwKaW5kZXggZTJlNGM3Y2Y5MmY0MjhkN2M4MDg2NmI4YzY0Zjk3
YTc2MTJlMTEwNy4uNWEyY2E3MGU3NTU4ZTg3NjhlZDhkMzliZWFkMTAwYTRlYzNmZTFkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbApAQCAtMzEzLDYgKzMxMyw4IEBAIGZvcmNlVXBkYXRl
U2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZzoKICAgaW5pdGlhbDog
ZmFsc2UKIG5vdGlmaWNhdGlvbnNFbmFibGVkOgogICBpbml0aWFsOiB0cnVlCituZXR3b3JrUHJv
Y2Vzc0NTUEZyYW1lQW5jZXN0b3JzQ2hlY2tpbmdFbmFibGVkOgorICBpbml0aWFsOiBmYWxzZQog
CiAjIFNvbWUgYXBwcyBuZWVkcyBpc0xvYWRpbmdJbkFQSVNlbnNlIHRvIGFjY291bnQgZm9yIGFj
dGl2ZSBzdWJyZXNvdXJjZSBsb2FkZXJzLgogbmVlZHNJc0xvYWRpbmdJbkFQSVNlbnNlUXVpcms6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNw
cAppbmRleCBjNzhjNWZiOThkYmNhZGQyNjQ2MjA5YmQ3YzFlOWZjZGRiZTg0YmZkLi5iZDI3ZjIx
M2QzNDMzNWExOWQzODhhN2JlNGY1MDJmMTU5OTg3OGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTQ3Nyw2ICs0NzcsMjIg
QEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93RnJhbWVBbmNlc3RvcnMoY29uc3Qg
RnJhbWUmIGZyYW1lLCBjb25zdCBVUkwmIHUKICAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdyhX
VEZNb3ZlKGhhbmRsZVZpb2xhdGVkRGlyZWN0aXZlKSwgJkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OnZpb2xhdGVkRGlyZWN0aXZlRm9yRnJhbWVBbmNlc3RvciwgZnJhbWUpOwog
fQogCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dGcmFtZUFuY2VzdG9ycyhjb25z
dCBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIGFuY2VzdG9yT3JpZ2lucywgY29uc3Qg
VVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNvbnN0Cit7Cisg
ICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFhbmNlc3Rv
ck9yaWdpbnMuaXNFbXB0eSgpKTsKKyAgICBpZiAoYW5jZXN0b3JPcmlnaW5zLnNpemUoKSA9PSAx
KQorICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVGhlIHRvcC1tb3N0IGZyYW1lIGlzIGFsd2F5cyBh
bGxvd2VkLgorICAgIFN0cmluZyBzb3VyY2VVUkw7CisgICAgVGV4dFBvc2l0aW9uIHNvdXJjZVBv
c2l0aW9uKFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgV1RGOjpPcmRpbmFsTnVt
YmVyKCkpOworICAgIGF1dG8gaGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUgPSBbJl0gKGNvbnN0IENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZSYgdmlvbGF0ZWREaXJlY3RpdmUpIHsKKyAgICAg
ICAgU3RyaW5nIGNvbnNvbGVNZXNzYWdlID0gY29uc29sZU1lc3NhZ2VGb3JWaW9sYXRpb24oQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTmFtZXM6OmZyYW1lQW5jZXN0b3JzLCB2aW9sYXRl
ZERpcmVjdGl2ZSwgdXJsLCAiUmVmdXNlZCB0byBsb2FkIik7CisgICAgICAgIHJlcG9ydFZpb2xh
dGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVOYW1lczo6ZnJhbWVBbmNlc3RvcnMs
IHZpb2xhdGVkRGlyZWN0aXZlLCB1cmwsIGNvbnNvbGVNZXNzYWdlLCBzb3VyY2VVUkwsIHNvdXJj
ZVBvc2l0aW9uKTsKKyAgICB9OworICAgIHJldHVybiBhbGxQb2xpY2llc0FsbG93KFdURk1vdmUo
aGFuZGxlVmlvbGF0ZWREaXJlY3RpdmUpLCAmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JGcmFtZUFuY2VzdG9yT3JpZ2lucywgYW5jZXN0b3JP
cmlnaW5zKTsKK30KKwogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93UGx1Z2luVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdHlwZUF0dHJpYnV0ZSwgY29uc3Qg
VVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNvbnN0CiB7CiAg
ICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAppbmRleCA1NDNlYzA5M2M0NzA1MmNj
YjE4YTcxNDY5YjZmODZjMzhkMzQxYjFiLi45MTI1MDgwODg4Yzk5MzVkYjcyNjJiNWU4ZmVlYjE4
ZmY4MDlkMDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuaApAQCAtOTcsNiArOTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd1BsdWdp
blR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHR5cGVBdHRyaWJ1dGUsIGNv
bnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSkgY29u
c3Q7CiAKICAgICBib29sIGFsbG93RnJhbWVBbmNlc3RvcnMoY29uc3QgRnJhbWUmLCBjb25zdCBV
UkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWxsb3dGcmFtZUFuY2VzdG9ycyhjb25zdCBWZWN0b3I8
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIGFuY2VzdG9yT3JpZ2lucywgY29uc3QgVVJMJiwgYm9v
bCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlKSBjb25zdDsKIAogICAgIGVu
dW0gY2xhc3MgUmVkaXJlY3RSZXNwb25zZVJlY2VpdmVkIHsgTm8sIFllcyB9OwogICAgIGJvb2wg
YWxsb3dTY3JpcHRGcm9tU291cmNlKGNvbnN0IFVSTCYsIFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZl
ZCA9IFJlZGlyZWN0UmVzcG9uc2VSZWNlaXZlZDo6Tm8pIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0LmNwcAppbmRleCA1Nzc2Mzk1NzI5M2E0M2IyYjMzZjVjZDBmNzIxODc3NDc0ODNiYjdh
Li5mN2IyZjkwZDc0NjAwM2ZkYWE0NDliZDk3Y2M4N2YxYWVjZDgyY2U2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0LmNwcApAQCAtODMsNiArODMsMjAgQEAgc3RhdGljIGlubGluZSBib29sIGNo
ZWNrRnJhbWVBbmNlc3RvcnMoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2
ZSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGNoZWNrRnJhbWVB
bmNlc3RvcnMoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0
aXZlLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIGFuY2VzdG9yT3JpZ2lu
cykKK3sKKyAgICBpZiAoIWRpcmVjdGl2ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgYm9v
bCBkaWRSZWNlaXZlUmVkaXJlY3RSZXNwb25zZSA9IGZhbHNlOworICAgIGF1dG8gZW5kID0gYW5j
ZXN0b3JPcmlnaW5zLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGFuY2VzdG9yT3JpZ2lucy5i
ZWdpbigpICsgMTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFVSTCBvcmlnaW4geyBVUkwg
eyB9LCAoKml0KS0+dG9TdHJpbmcoKSB9OworICAgICAgICBpZiAoIW9yaWdpbi5pc1ZhbGlkKCkg
fHwgIWRpcmVjdGl2ZS0+YWxsb3dzKG9yaWdpbiwgZGlkUmVjZWl2ZVJlZGlyZWN0UmVzcG9uc2Us
IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU6OlNob3VsZEFsbG93RW1w
dHlVUkxJZlNvdXJjZUxpc3RJc05vdE5vbmU6Ok5vKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVj
a01lZGlhVHlwZShDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUqIGRpcmVj
dGl2ZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHR5cGVBdHRyaWJ1dGUpCiB7
CiAgICAgaWYgKCFkaXJlY3RpdmUpCkBAIC0yMzYsNiArMjUwLDEzIEBAIGNvbnN0IENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZSogQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6dmlvbGF0CiAgICAgcmV0dXJuIG1fZnJhbWVBbmNlc3RvcnMuZ2V0KCk7CiB9CiAKK2NvbnN0
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZSogQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdDo6dmlvbGF0ZWREaXJlY3RpdmVGb3JGcmFtZUFuY2VzdG9yT3JpZ2lucyhjb25z
dCBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIGFuY2VzdG9yT3JpZ2lucykgY29uc3QK
K3sKKyAgICBpZiAoY2hlY2tGcmFtZUFuY2VzdG9ycyhtX2ZyYW1lQW5jZXN0b3JzLmdldCgpLCBh
bmNlc3Rvck9yaWdpbnMpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9m
cmFtZUFuY2VzdG9ycy5nZXQoKTsKK30KKwogY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojp2aW9sYXRlZERpcmVj
dGl2ZUZvckltYWdlKGNvbnN0IFVSTCYgdXJsLCBib29sIGRpZFJlY2VpdmVSZWRpcmVjdFJlc3Bv
bnNlKSBjb25zdAogewogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmUqIG9wZXJhdGl2ZURpcmVjdGl2ZSA9IHRoaXMtPm9wZXJhdGl2ZURpcmVjdGl2ZShtX2ltZ1Ny
Yy5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgKaW5kZXggOTEyNjFmYTE3N2ZlZTNlNWFi
ZDgyYjcwOWE5ZTQ4ZTUzZDE0YmNjYS4uMjkwNzI1MGYwZWIxZGM0ZmQwOGZiMjA3MmM2ODMzN2Iy
OGQ3YjAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaApAQCAtNjIsNiArNjIsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlKiB2aW9sYXRlZERp
cmVjdGl2ZUZvckZvcm1BY3Rpb24oY29uc3QgVVJMJiwgYm9vbCBkaWRSZWNlaXZlUmVkaXJlY3RS
ZXNwb25zZSkgY29uc3Q7CiAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
KiB2aW9sYXRlZERpcmVjdGl2ZUZvckZyYW1lKGNvbnN0IFVSTCYsIGJvb2wgZGlkUmVjZWl2ZVJl
ZGlyZWN0UmVzcG9uc2UpIGNvbnN0OwogICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZSogdmlvbGF0ZWREaXJlY3RpdmVGb3JGcmFtZUFuY2VzdG9yKGNvbnN0IEZyYW1lJikg
Y29uc3Q7CisgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlKiB2aW9sYXRl
ZERpcmVjdGl2ZUZvckZyYW1lQW5jZXN0b3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+PiYpIGNvbnN0OwogICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZSogdmlvbGF0ZWREaXJlY3RpdmVGb3JJbWFnZShjb25zdCBVUkwmLCBib29sIGRpZFJl
Y2VpdmVSZWRpcmVjdFJlc3BvbnNlKSBjb25zdDsKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFO
SUZFU1QpCiAgICAgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlKiB2aW9sYXRl
ZERpcmVjdGl2ZUZvck1hbmlmZXN0KGNvbnN0IFVSTCYsIGJvb2wgZGlkUmVjZWl2ZVJlZGlyZWN0
UmVzcG9uc2UpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaAppbmRleCA0MzIzZmU2
NjhiNmQ1YzQ5ZjQ1ZmRiYTQ2ZDI1ODFjYTFlOTU1NzJhLi43ZDRlZWE3ZjVlYmU1M2UxYzk1YTg1
MTRiZTNiMzY5NDAzYmFjNDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaApAQCAtNDMs
NyArNDMsNyBAQCBlbnVtIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgewog
Y2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIHsKIHB1YmxpYzoKICAg
ICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMoKSA9IGRlZmF1bHQ7Ci0gICAg
ZXhwbGljaXQgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBDb250ZW50U2VjdXJp
dHlQb2xpY3lSZXNwb25zZUhlYWRlcnMoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCiAgICAg
Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIGlzb2xhdGVkQ29weSgpIGNvbnN0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJz
ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKaW5k
ZXggOTBiY2QxOGEwZWUwOTJjZGY2Y2ZlOGEyMmI5Yjg5ZDViMDI3MTNlYy4uZTE0ZmMwNDBjNjll
NDI3NTkyNTkyNjZkNDY5NTEzMmIyNWVhNmYwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaApAQCAtODQsNyArODQsNyBAQCBTdHJpbmcgZXh0cmFj
dENoYXJzZXRGcm9tTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYpOwogdm9pZCBmaW5kQ2hhcnNldElu
TWVkaWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCB1bnNpZ25lZCBpbnQmIGNoYXJzZXRQ
b3MsIHVuc2lnbmVkIGludCYgY2hhcnNldExlbiwgdW5zaWduZWQgaW50IHN0YXJ0ID0gMCk7CiBY
U1NQcm90ZWN0aW9uRGlzcG9zaXRpb24gcGFyc2VYU1NQcm90ZWN0aW9uSGVhZGVyKGNvbnN0IFN0
cmluZyYgaGVhZGVyLCBTdHJpbmcmIGZhaWx1cmVSZWFzb24sIHVuc2lnbmVkJiBmYWlsdXJlUG9z
aXRpb24sIFN0cmluZyYgcmVwb3J0VVJMKTsKIEF0b21pY1N0cmluZyBleHRyYWN0UmVhc29uUGhy
YXNlRnJvbUhUVFBTdGF0dXNMaW5lKGNvbnN0IFN0cmluZyYpOwotWEZyYW1lT3B0aW9uc0Rpc3Bv
c2l0aW9uIHBhcnNlWEZyYW1lT3B0aW9uc0hlYWRlcihjb25zdCBTdHJpbmcmKTsKK1dFQkNPUkVf
RVhQT1JUIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbiBwYXJzZVhGcmFtZU9wdGlvbnNIZWFkZXIo
Y29uc3QgU3RyaW5nJik7CiAKIC8vIC0xIGNvdWxkIGJlIHNldCB0byBvbmUgb2YgdGhlIHJldHVy
biBwYXJhbWV0ZXJzIHRvIGluZGljYXRlIHRoZSB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkLgogV0VC
Q09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmFu
Z2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5n
dGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAppbmRleCAwN2U4ZTcxZGMzZWI4Zjc1NTVk
YzA2YzBkZjQyZmY2ZDZmMGFhZTBmLi44NmI3YjUwNzg4ZDEyNWMyMDY3MmJlYjhhMWJmMzkyZDI2
NDA3Njg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcApAQCAtOTgsOCArOTgsOCBAQCB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIuZW5jb2RlRW51bShwcmVmbGlnaHRQb2xpY3kpOwog
CiAgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVGcm9tT3JpZ2luUmVzcG9uc2VIZWFkZXI7Ci0g
ICAgaWYgKHNob3VsZEVuYWJsZUZyb21PcmlnaW5SZXNwb25zZUhlYWRlcikKLSAgICAgICAgZW5j
b2RlciA8PCBmcmFtZUFuY2VzdG9yT3JpZ2luczsKKworICAgIGVuY29kZXIgPDwgZnJhbWVBbmNl
c3Rvck9yaWdpbnM7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGVuY29k
ZXIgPDwgbWFpbkRvY3VtZW50VVJMOwpAQCAtMjEwLDEwICsyMTAsOSBAQCBib29sIE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3
b3JrUmVzb3VyYwogICAgIGlmICghc2hvdWxkRW5hYmxlRnJvbU9yaWdpblJlc3BvbnNlSGVhZGVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0LnNob3VsZEVuYWJsZUZyb21Pcmln
aW5SZXNwb25zZUhlYWRlciA9ICpzaG91bGRFbmFibGVGcm9tT3JpZ2luUmVzcG9uc2VIZWFkZXI7
Ci0gICAgaWYgKHJlc3VsdC5zaG91bGRFbmFibGVGcm9tT3JpZ2luUmVzcG9uc2VIZWFkZXIpIHsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZnJhbWVBbmNlc3Rvck9yaWdpbnMp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmZyYW1lQW5jZXN0b3JPcmlnaW5zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubWFpbkRvY3VtZW50VVJMKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCAxZjc4NDAz
NzJlOWE2ZTNiMTA2N2JjMDU0ZDA0OGMxYjZjMjU0YWRiLi4xNGEwMTMxMTBlMmQ4NjFjM2IyZTFk
OWU3OTI2MDQ4M2M1ZWQ5ZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSAiRm9ybURhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0Jsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZS5oIgpAQCAtMzgsMTAgKzM5LDEzIEBACiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIK
KyNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0Jsb2JEYXRhRmlsZVJlZmVyZW5jZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJ
bmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50U2VjdXJpdHlQb2xpY3kuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SFRUUEhlYWRlck5hbWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgpAQCAt
Mzk1LDYgKzM5OSw1MyBAQCBzdGF0aWMgUmVzb3VyY2VFcnJvciBmcm9tT3JpZ2luUmVzb3VyY2VF
cnJvcihjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4geyBlcnJvckRvbWFpbldlYktpdEludGVy
bmFsLCAwLCB1cmwsIEFTQ0lJTGl0ZXJhbCB7ICJDYW5jZWxsZWQgbG9hZCBiZWNhdXNlIGl0IHZp
b2xhdGVzIHRoZSByZXNvdXJjZSdzIEZyb20tT3JpZ2luIHJlc3BvbnNlIGhlYWRlci4iIH0sIFJl
c291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wgfTsKIH0KIAorYm9vbCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRpb25zKGNvbnN0IFN0
cmluZyYgeEZyYW1lT3B0aW9ucywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKGlzTWFpbkZy
YW1lTG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBYRnJhbWVPcHRpb25zRGlz
cG9zaXRpb24gZGlzcG9zaXRpb24gPSBwYXJzZVhGcmFtZU9wdGlvbnNIZWFkZXIoeEZyYW1lT3B0
aW9ucyk7CisKKyAgICBzd2l0Y2ggKGRpc3Bvc2l0aW9uKSB7CisgICAgY2FzZSBYRnJhbWVPcHRp
b25zTm9uZToKKyAgICBjYXNlIFhGcmFtZU9wdGlvbnNBbGxvd0FsbDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgWEZyYW1lT3B0aW9uc0Rlbnk6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgWEZyYW1lT3B0aW9uc1NhbWVPcmlnaW46CisgICAgICAgIHJldHVybiAhU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpLT5pc1NhbWVTY2hlbWVIb3N0UG9ydCgqbV9wYXJhbWV0
ZXJzLnNvdXJjZU9yaWdpbik7CisgICAgY2FzZSBYRnJhbWVPcHRpb25zQ29uZmxpY3Q6IHsKKyAg
ICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICJNdWx0aXBsZSAnWC1GcmFtZS1PcHRpb25zJyBo
ZWFkZXJzIHdpdGggY29uZmxpY3RpbmcgdmFsdWVzICgnIiArIHhGcmFtZU9wdGlvbnMgKyAiJykg
ZW5jb3VudGVyZWQgd2hlbiBsb2FkaW5nICciICsgdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRU
b0xlbmd0aCgpICsgIicuIEZhbGxpbmcgYmFjayB0byAnREVOWScuIjsKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6QWRkQ29uc29sZU1lc3NhZ2UgeyBtX3BhcmFtZXRlcnMud2ViRnJh
bWVJRCwgIE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBlcnJvck1lc3Nh
Z2UsIGlkZW50aWZpZXIoKSB9LCBtX3BhcmFtZXRlcnMud2ViUGFnZUlEKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgWEZyYW1lT3B0aW9uc0ludmFsaWQ6IHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICJJbnZhbGlkICdYLUZyYW1lLU9wdGlvbnMnIGhlYWRl
ciBlbmNvdW50ZXJlZCB3aGVuIGxvYWRpbmcgJyIgKyB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXpl
ZFRvTGVuZ3RoKCkgKyAiJzogJyIgKyB4RnJhbWVPcHRpb25zICsgIicgaXMgbm90IGEgcmVjb2du
aXplZCBkaXJlY3RpdmUuIFRoZSBoZWFkZXIgd2lsbCBiZSBpZ25vcmVkLiI7CisgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkZENvbnNvbGVNZXNzYWdlIHsgbV9wYXJhbWV0ZXJzLndl
YkZyYW1lSUQsICBNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgZXJyb3JN
ZXNzYWdlLCBpZGVudGlmaWVyKCkgfSwgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNob3Vs
ZEludGVycnVwdExvYWRGb3JDU1BGcmFtZUFuY2VzdG9yc09yWEZyYW1lT3B0aW9ucyhjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluUmVzb3VyY2Uo
KSk7CisgICAgYXV0byB1cmwgPSByZXNwb25zZS51cmwoKTsKKyAgICBDb250ZW50U2VjdXJpdHlQ
b2xpY3kgY29udGVudFNlY3VyaXR5UG9saWN5IHsgVVJMIHsgdXJsIH0sIHRoaXMgfTsKKyAgICBj
b250ZW50U2VjdXJpdHlQb2xpY3kuZGlkUmVjZWl2ZUhlYWRlcnMoQ29udGVudFNlY3VyaXR5UG9s
aWN5UmVzcG9uc2VIZWFkZXJzIHsgcmVzcG9uc2UgfSwgb3JpZ2luYWxSZXF1ZXN0KCkuaHR0cFJl
ZmVycmVyKCkpOworICAgIGlmICghY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93RnJhbWVBbmNl
c3RvcnMobV9wYXJhbWV0ZXJzLmZyYW1lQW5jZXN0b3JPcmlnaW5zLCB1cmwpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBTdHJpbmcgeEZyYW1lT3B0aW9ucyA9IG1fcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpYRnJhbWVPcHRpb25zKTsKKyAgICBpZiAoIXhGcmFt
ZU9wdGlvbnMuaXNOdWxsKCkgJiYgc2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlvbnMo
eEZyYW1lT3B0aW9ucywgcmVzcG9uc2UudXJsKCkpKSB7CisgICAgICAgIFN0cmluZyBlcnJvck1l
c3NhZ2UgPSAiUmVmdXNlZCB0byBkaXNwbGF5ICciICsgcmVzcG9uc2UudXJsKCkuc3RyaW5nQ2Vu
dGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAiJyBpbiBhIGZyYW1lIGJlY2F1c2UgaXQgc2V0ICdY
LUZyYW1lLU9wdGlvbnMnIHRvICciICsgeEZyYW1lT3B0aW9ucyArICInLiI7CisgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkZENvbnNvbGVNZXNzYWdlIHsgbV9wYXJhbWV0ZXJzLndl
YkZyYW1lSUQsICBNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwg
ZXJyb3JNZXNzYWdlLCBpZGVudGlmaWVyKCkgfSwgbV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGF1dG8g
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25z
ZSYmIHJlY2VpdmVkUmVzcG9uc2UpIC0+IFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
CiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiZGlkUmVjZWl2ZVJlc3BvbnNlOiAocGFn
ZUlEID0gJSIgUFJJdTY0ICIsIGZyYW1lSUQgPSAlIiBQUkl1NjQgIiwgcmVzb3VyY2VJRCA9ICUi
IFBSSXU2NCAiLCBodHRwU3RhdHVzQ29kZSA9ICVkLCBsZW5ndGggPSAlIiBQUklkNjQgIikiLCBt
X3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgbV9wYXJhbWV0
ZXJzLmlkZW50aWZpZXIsIHJlY2VpdmVkUmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSwgcmVjZWl2
ZWRSZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSk7CkBAIC00MjcsMTYgKzQ3OCwxNyBA
QCBhdXRvIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNl
UmVzcG9uc2UmJiByZWNlaXZlZFJlc3BvbgogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAg
aWYgKG1fcGFyYW1ldGVycy5zaG91bGRFbmFibGVGcm9tT3JpZ2luUmVzcG9uc2VIZWFkZXIgJiYg
c2hvdWxkQ2FuY2VsQ3Jvc3NPcmlnaW5Mb2FkKG1fcmVzcG9uc2UsIG1fcGFyYW1ldGVycy5mcmFt
ZUFuY2VzdG9yT3JpZ2lucykpCiAgICAgICAgIGVycm9yID0gZnJvbU9yaWdpblJlc291cmNlRXJy
b3IobV9yZXNwb25zZS51cmwoKSk7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpICYmIGlzTWFpblJl
c291cmNlKCkgJiYgc2hvdWxkSW50ZXJydXB0TG9hZEZvckNTUEZyYW1lQW5jZXN0b3JzT3JYRnJh
bWVPcHRpb25zKG1fcmVzcG9uc2UpKSB7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291
cmNlTG9hZGVyOjpTdG9wTG9hZGluZ0FmdGVyWEZyYW1lT3B0aW9uc09yQ29udGVudFNlY3VyaXR5
UG9saWN5RGVuaWVkIHsgfSk7CisgICAgICAgIHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2Vp
dmVSZXNwb25zZTo6Tm87CisgICAgfQogICAgIGlmIChlcnJvci5pc051bGwoKSAmJiBtX25ldHdv
cmtMb2FkQ2hlY2tlcikKICAgICAgICAgZXJyb3IgPSBtX25ldHdvcmtMb2FkQ2hlY2tlci0+dmFs
aWRhdGVSZXNwb25zZShtX3Jlc3BvbnNlKTsKICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIG1ha2UgYSBtYWluIHJlc291cmNlIGxvYWQgbG9v
ayBzdWNjZXNzZnVsIHRvIHByZXZlbnQgbGVha2luZyBpdHMgZXhpc3RlbmNlLiBTZWUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUxMjA+LgogICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZXJy
b3IgPSBXVEZNb3ZlKGVycm9yKV0gewogICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1f
bmV0d29ya0xvYWQpCiAgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlkRmFpbExvYWRp
bmcoZXJyb3IpOwogICAgICAgICB9KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGtub3cgdGhhdCB3
ZSBhcmUgbm90IGdvaW5nIHRvIGNvbnRpbnVlIHRoaXMgbG9hZC4gU2hvdWxkQ29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2U6Ok5vIHNob3VsZCBvbmx5IGJlIHJldHVybmVkIHdoZW4KLSAgICAgICAg
Ly8gdGhlIG5ldHdvcmsgcHJvY2VzcyBpcyB3YWl0aW5nIHRvIHJlY2VpdmUgbWVzc2FnZSBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OkNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIHRvIGNvbnRpbnVl
IGEgbG9hZC4KICAgICAgICAgcmV0dXJuIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
OjpObzsKICAgICB9CiAKQEAgLTcyNiw3ICs3NzgsMTAgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hl
OjoKICAgICBSZXNvdXJjZUVycm9yIGVycm9yOwogICAgIGlmIChtX3BhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlRnJvbU9yaWdpblJlc3BvbnNlSGVhZGVyICYmIHNob3VsZENhbmNlbENyb3NzT3JpZ2lu
TG9hZChyZXNwb25zZSwgbV9wYXJhbWV0ZXJzLmZyYW1lQW5jZXN0b3JPcmlnaW5zKSkKICAgICAg
ICAgZXJyb3IgPSBmcm9tT3JpZ2luUmVzb3VyY2VFcnJvcihyZXNwb25zZS51cmwoKSk7Ci0KKyAg
ICBpZiAoZXJyb3IuaXNOdWxsKCkgJiYgaXNNYWluUmVzb3VyY2UoKSAmJiBzaG91bGRJbnRlcnJ1
cHRMb2FkRm9yQ1NQRnJhbWVBbmNlc3RvcnNPclhGcmFtZU9wdGlvbnMocmVzcG9uc2UpKSB7Cisg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpTdG9wTG9hZGluZ0FmdGVy
WEZyYW1lT3B0aW9uc09yQ29udGVudFNlY3VyaXR5UG9saWN5RGVuaWVkIHsgfSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpICYmIG1fbmV0d29ya0xvYWRD
aGVja2VyKQogICAgICAgICBlcnJvciA9IG1fbmV0d29ya0xvYWRDaGVja2VyLT52YWxpZGF0ZVJl
c3BvbnNlKHJlc3BvbnNlKTsKIApAQCAtMTA0MCw0ICsxMDk1LDE0IEBAIHZvaWQgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpsb2dDb29raWVJbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIGxhYmVsLCBj
b25zdCB2b2lkCiB9CiAjZW5kaWYKIAordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgbWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsIG1l
c3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsb25nKQoreworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkZENvbnNvbGVNZXNzYWdlIHsgbV9wYXJhbWV0ZXJz
LndlYkZyYW1lSUQsICBtZXNzYWdlU291cmNlLCBtZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGlkZW50
aWZpZXIoKSB9LCBtX3BhcmFtZXRlcnMud2ViUGFnZUlEKTsKK30KKwordm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNlbmRDU1BWaW9sYXRpb25SZXBvcnQoVVJMJiYgcmVwb3J0VVJMLCBSZWY8
Rm9ybURhdGE+JiYgcmVwb3J0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbmRD
U1BWaW9sYXRpb25SZXBvcnQgeyBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgV1RGTW92ZShyZXBv
cnRVUkwpLCBJUEM6OkZvcm1EYXRhUmVmZXJlbmNlIHsgV1RGTW92ZShyZXBvcnQpIH0gfSwgbV9w
YXJhbWV0ZXJzLndlYlBhZ2VJRCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgK
aW5kZXggNTdjNTQwZDc3NzdmYWNjZGYzZTgxNWU4NzMxYTQzMGJmNjE4M2RkMC4uYjZhNTg1ZWFm
MWQ4YTBjNTZhZjlmYjgwMmJjMzNiYjJkNjZjYjJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zMiwxMyArMzIs
MTcgQEAKICNpbmNsdWRlICJOZXR3b3JrTG9hZENsaWVudC5oIgogI2luY2x1ZGUgIk5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0NvbnRlbnRTZWN1cml0eVBvbGljeUNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQmxvYkRhdGFGaWxlUmVmZXJlbmNlOworY2xhc3MgRm9ybURhdGE7
CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Citj
bGFzcyBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKQEAgLTUyLDcgKzU2LDExIEBAIG5hbWVzcGFjZSBOZXR3b3JrQ2FjaGUgewogY2xhc3MgRW50
cnk7CiB9CiAKLWNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4sIHB1YmxpYyBOZXR3b3JrTG9hZENsaWVudCwg
cHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CitjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkZXIg
ZmluYWwKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4KKyAg
ICAsIHB1YmxpYyBOZXR3b3JrTG9hZENsaWVudAorICAgICwgcHVibGljIElQQzo6TWVzc2FnZVNl
bmRlcgorICAgICwgcHVibGljIFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeUNsaWVudCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBjb25uZWN0aW9uLCBSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+
JiYgcmVwbHkgPSBudWxscHRyKQogICAgIHsKQEAgLTEwNSw2ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjb252ZXJ0VG9Eb3dubG9hZChEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAKICAgICBi
b29sIGlzTWFpblJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLnJlcXVlc3Qu
cmVxdWVzdGVyKCkgPT0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW47
IH0KKyAgICBib29sIGlzTWFpbkZyYW1lTG9hZCgpIGNvbnN0IHsgcmV0dXJuIGlzTWFpblJlc291
cmNlKCkgJiYgbV9wYXJhbWV0ZXJzLmZyYW1lQW5jZXN0b3JPcmlnaW5zLnNpemUoKSA9PSAxOyB9
CisKICAgICBib29sIGlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpIGNvbnN0OwogCiAjaWYgSEFW
RShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpICYmICFSRUxFQVNFX0xPR19ESVNBQkxF
RApAQCAtMTMwLDYgKzE0MCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaFdpbGxTZW5k
UmVxdWVzdEZvckNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+
KTsKICAgICB2b2lkIGNvbnRpbnVlUHJvY2Vzc2luZ0NhY2hlZEVudHJ5QWZ0ZXJEaWRSZWNlaXZl
UmVzcG9uc2Uoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+KTsKIAorICAgIGJv
b2wgc2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlvbnMoY29uc3QgU3RyaW5nJiwgY29u
c3QgV2ViQ29yZTo6VVJMJik7CisgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRMb2FkRm9yQ1NQRnJh
bWVBbmNlc3RvcnNPclhGcmFtZU9wdGlvbnMoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYpOworCiAgICAgZW51bSBjbGFzcyBGaXJzdExvYWQgeyBObywgWWVzIH07CiAgICAgdm9pZCBz
dGFydE5ldHdvcmtMb2FkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBGaXJzdExvYWQpOwog
ICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKQEAgLTE1OSw2ICsxNzIsMTEg
QEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ugc2FuaXRpemVSZXNw
b25zZUlmUG9zc2libGUoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlOjpTYW5pdGl6YXRpb25UeXBlKTsKIAorICAgIC8vIENvbnRlbnRTZWN1cml0
eVBvbGljeUNsaWVudAorICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsb25nKSBmaW5hbDsKKyAgICB2
b2lkIHNlbmRDU1BWaW9sYXRpb25SZXBvcnQoV2ViQ29yZTo6VVJMJiYsIFJlZjxXZWJDb3JlOjpG
b3JtRGF0YT4mJikgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaFNlY3VyaXR5UG9saWN5VmlvbGF0
aW9uRXZlbnQoUmVmPFdlYkNvcmU6OlNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQ+JiYpIGZp
bmFsIHsgfTsgLy8gTm8gb2JzZXJ2YWJsZSBlZmZlY3QgZm9yIGZyYW1lLWFuY2VzdG9ycyB2aW9s
YXRpb24uCisKICAgICBjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyBtX3BhcmFt
ZXRlcnM7CiAKICAgICBSZWY8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fY29ubmVj
dGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDNjYTFm
ZjczZjVmNTdlNmE3ODc5NzdjNjI3ZjU0ZDE4MTQyNjcwNzQuLjZlZDQ2ZTkyNWI1ZTU5MWVhYWEy
OTM1ZGRmMDU5YmVjZmMxMWI2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weQpAQCAtMTg3LDYgKzE4Nyw4IEBAIGRlZiBmb3J3YXJkX2RlY2xhcmF0aW9uc19hbmRf
aGVhZGVycyhyZWNlaXZlcik6CiAKICAgICBub19mb3J3YXJkX2RlY2xhcmF0aW9uX3R5cGVzID0g
ZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAorICAgICAgICAnTWVzc2FnZUxl
dmVsJywKKyAgICAgICAgJ01lc3NhZ2VTb3VyY2UnLAogICAgICAgICAnU3RyaW5nJywKICAgICAg
ICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2
aWNlV29ya2VySWRlbnRpZmllcicsCkBAIC0zNjgsNiArMzcwLDggQEAgZGVmIGhlYWRlcnNfZm9y
X3R5cGUodHlwZSk6CiAKICAgICBzcGVjaWFsX2Nhc2VzID0gewogICAgICAgICAnTWFjaFNlbmRS
aWdodCc6IFsnPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+J10sCisgICAgICAgICdNZXNzYWdlTGV2ZWwn
OiBbJzxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4nXSwKKyAgICAgICAgJ01lc3NhZ2VT
b3VyY2UnOiBbJzxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4nXSwKICAgICAgICAgJ01v
bm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAogICAgICAgICAnU2Vjb25k
cyc6IFsnPHd0Zi9TZWNvbmRzLmg+J10sCiAgICAgICAgICdXYWxsVGltZSc6IFsnPHd0Zi9XYWxs
VGltZS5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggNGI1ZTEwNDE4ZWRhMDA5
ZWMyMWRmZGYxNjFlZjRiM2JkZTFjZWIxNi4uOWEyMzhlY2ZkZWI5M2FjODk4ODE4NDA2NmYxNjY3
Yjk5N2FhNTA1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC0zNSw2ICszNSw4IEBA
CiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViTG9hZGVy
U3RyYXRlZ3kuaCIKICNpbmNsdWRlICJXZWJNRE5TUmVnaXN0ZXJNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViUlRDTW9uaXRvci5oIgogI2luY2x1ZGUgIldlYlJU
Q01vbml0b3JNZXNzYWdlcy5oIgpAQCAtNzUsNiArNzcsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVAKICAgICAgICAgICAgIHN0cmVhbS0+ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQYWdlOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS53ZWJQYWdlKGRlY29kZXIuZGVzdGluYXRpb25JRCgpKSkKKyAgICAgICAgICAgIHdlYlBhZ2Ut
PmRpZFJlY2VpdmVXZWJQYWdlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAogI2lmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRlY29kZXIubWVz
c2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJSVENTb2NrZXQ6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuY3BwCmluZGV4IGI2OTFmZWUyZjA4YjNhNjA4YTQwODZlMTQy
MzZhMmJjNWFiOTc0OWUuLjZjMzI0MDZmMzA2ODc2OTEyYTI2MTYwNDIzNGVkMzYxYmNjOTc1YmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0
cmF0ZWd5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJMb2Fk
ZXJTdHJhdGVneS5jcHAKQEAgLTMyNywxNiArMzI3LDExIEBAIHZvaWQgV2ViTG9hZGVyU3RyYXRl
Z3k6OnNjaGVkdWxlTG9hZEZyb21OZXR3b3JrUHJvY2VzcyhSZXNvdXJjZUxvYWRlciYgcmVzb3Vy
Y2VMCiAgICAgbG9hZFBhcmFtZXRlcnMuaXNNYWluRnJhbWVOYXZpZ2F0aW9uID0gcmVzb3VyY2VM
b2FkZXIuZnJhbWUoKSAmJiByZXNvdXJjZUxvYWRlci5mcmFtZSgpLT5pc01haW5GcmFtZSgpICYm
IHJlc291cmNlTG9hZGVyLm9wdGlvbnMoKS5tb2RlID09IEZldGNoT3B0aW9uczo6TW9kZTo6TmF2
aWdhdGU7CiAKICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRFbmFibGVGcm9tT3JpZ2luUmVzcG9u
c2VIZWFkZXIgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmZyb21P
cmlnaW5SZXNwb25zZUhlYWRlckVuYWJsZWQoKSAmJiAhbG9hZFBhcmFtZXRlcnMuaXNNYWluRnJh
bWVOYXZpZ2F0aW9uOwotICAgIGlmIChsb2FkUGFyYW1ldGVycy5zaG91bGRFbmFibGVGcm9tT3Jp
Z2luUmVzcG9uc2VIZWFkZXIpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbj4+IGZyYW1lQW5jZXN0b3JPcmlnaW5zOwotICAgICAgICBmb3IgKGF1dG8qIGZy
YW1lID0gcmVzb3VyY2VMb2FkZXIuZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAg
ICAgICAgICAgIGZyYW1lQW5jZXN0b3JPcmlnaW5zLmFwcGVuZChtYWtlUmVmUHRyKGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSk7Ci0gICAgICAgICAgICBpZiAoZnJhbWUtPmlz
TWFpbkZyYW1lKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
bG9hZFBhcmFtZXRlcnMuZnJhbWVBbmNlc3Rvck9yaWdpbnMgPSBXVEZNb3ZlKGZyYW1lQW5jZXN0
b3JPcmlnaW5zKTsKLSAgICB9CisKKyAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4g
ZnJhbWVBbmNlc3Rvck9yaWdpbnM7CisgICAgZm9yIChhdXRvKiBmcmFtZSA9IHJlc291cmNlTG9h
ZGVyLmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50KCkpCisgICAg
ICAgIGZyYW1lQW5jZXN0b3JPcmlnaW5zLmFwcGVuZChtYWtlUmVmUHRyKGZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpKSk7CisgICAgbG9hZFBhcmFtZXRlcnMuZnJhbWVBbmNlc3Rv
ck9yaWdpbnMgPSBXVEZNb3ZlKGZyYW1lQW5jZXN0b3JPcmlnaW5zKTsKIAogICAgIEFTU0VSVCgo
bG9hZFBhcmFtZXRlcnMud2ViUGFnZUlEICYmIGxvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQpIHx8
IGxvYWRQYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPT0gQ2xpZW50Q3JlZGVudGlh
bFBvbGljeTo6Q2Fubm90QXNrQ2xpZW50Rm9yQ3JlZGVudGlhbHMpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAKaW5k
ZXggY2E0NjQ4MjA1NjBkM2MxM2MxODYwMGFiMDhkYmVhMWE3ZmQzZGVhMy4uYzk3NGZmOGEwYjU2
YTZhN2I5NmNjZjNjM2FhYWFlOGEwYmEwNDdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcApAQCAtMTgwLDYgKzE4
MCwxNCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZGVyOjpkaWRCbG9ja0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKCkKICAgICBtX2NvcmVMb2FkZXItPmRpZEJsb2NrQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6c3RvcExvYWRpbmdBZnRlclhGcmFt
ZU9wdGlvbnNPckNvbnRlbnRTZWN1cml0eVBvbGljeURlbmllZCgpCit7CisgICAgTE9HKE5ldHdv
cmssICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkZXI6OnN0b3BMb2FkaW5nQWZ0ZXJYRnJh
bWVPcHRpb25zT3JDb250ZW50U2VjdXJpdHlQb2xpY3lEZW5pZWQgZm9yICclcyciLCBtX2NvcmVM
b2FkZXItPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgUkVMRUFTRV9MT0df
SUZfQUxMT1dFRCgic3RvcExvYWRpbmdBZnRlclhGcmFtZU9wdGlvbnNPckNvbnRlbnRTZWN1cml0
eVBvbGljeURlbmllZDogKHBhZ2VJRCA9ICUiIFBSSXU2NCAiLCBmcmFtZUlEID0gJSIgUFJJdTY0
ICIsIHJlc291cmNlSUQgPSAlIiBQUkl1NjQgIikiLCBtX3RyYWNraW5nUGFyYW1ldGVycy5wYWdl
SUQsIG1fdHJhY2tpbmdQYXJhbWV0ZXJzLmZyYW1lSUQsIG1fdHJhY2tpbmdQYXJhbWV0ZXJzLnJl
c291cmNlSUQpOworCisgICAgbV9jb3JlTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5zdG9wTG9h
ZGluZ0FmdGVyWEZyYW1lT3B0aW9uc09yQ29udGVudFNlY3VyaXR5UG9saWN5RGVuaWVkKG1fY29y
ZUxvYWRlci0+aWRlbnRpZmllcigpLCBSZXNvdXJjZVJlc3BvbnNlIHsgfSk7Cit9CisKICNpZiBF
TkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQogdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkUmVj
ZWl2ZVJlc291cmNlKGNvbnN0IFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmIGhhbmRsZSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNl
TG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxv
YWRlci5oCmluZGV4IGQyYWU2YTJiZDY0ZGIxYzJjYjM0NDlhYTM1ZTA5YmJlODA5YzkxNjkuLmU3
YmVkMDIxOTAzODQ0MDlhZGU5MTZlMzE3YzkxZmI0OWYyZTVjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuaApAQCAtODIs
NiArODIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNoUmVzb3VyY2VMb2FkKGNvbnN0
IFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYpOwogICAgIHZvaWQgZGlkRmFpbFJlc291cmNl
TG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CiAgICAgdm9pZCBkaWRCbG9ja0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCk7CisKKyAgICB2b2lkIHN0b3BMb2FkaW5nQWZ0ZXJYRnJh
bWVPcHRpb25zT3JDb250ZW50U2VjdXJpdHlQb2xpY3lEZW5pZWQoKTsKKwogI2lmIEVOQUJMRShT
SEFSRUFCTEVfUkVTT1VSQ0UpCiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzb3VyY2UoY29uc3QgU2hh
cmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2Vz
LmluCmluZGV4IDk1ZjY5Y2JjZWIwNDYyZjQ3OWNmNzNjMzk2OWFiMzM5NzY1OGRlZDguLjQ2NTg0
NTgyYzNlNTY2NDBhNmY2YTI4Y2E5YTMwODA1YzYyMzY4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1l
c3NhZ2VzLmluCkBAIC0zMCw2ICszMCw4IEBAIG1lc3NhZ2VzIC0+IFdlYlJlc291cmNlTG9hZGVy
IExlZ2FjeVJlY2VpdmVyIHsKICAgICBEaWRGYWlsUmVzb3VyY2VMb2FkKFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgZXJyb3IpCiAgICAgRGlkQmxvY2tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpCiAK
KyAgICBTdG9wTG9hZGluZ0FmdGVyWEZyYW1lT3B0aW9uc09yQ29udGVudFNlY3VyaXR5UG9saWN5
RGVuaWVkKCkKKwogI2lmIEVOQUJMRShTSEFSRUFCTEVfUkVTT1VSQ0UpCiAgICAgLy8gRGlkUmVj
ZWl2ZVJlc291cmNlIGlzIGZvciB3aGVuIHdlIGhhdmUgdGhlIGVudGlyZSByZXNvdXJjZSBkYXRh
IGF2YWlsYWJsZSBhdCBvbmNlLCBzdWNoIGFzIHdoZW4gdGhlIHJlc291cmNlIGlzIGNhY2hlZCBp
biBtZW1vcnkKICAgICBEaWRSZWNlaXZlUmVzb3VyY2UoV2ViS2l0OjpTaGFyZWFibGVSZXNvdXJj
ZTo6SGFuZGxlIHJlc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCmluZGV4IDE2YWJlNTU3MWRjODE3Y2JmZjliMWIwNGFkZTEwNzZjNTE3Y2Ez
OGYuLjQzYzFhZTAxMDFhY2IwNDdhY2M4NjljNjEzNWY3ODE5ZGFhNWMzM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTMxNSw2ICszMTUs
MTQgQEAgdm9pZCBXZWJGcmFtZTo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKERv
Y3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciwKICAgICB3ZWJQcm9jZXNzLmVuc3VyZU5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2Fk
KHNlc3Npb25JRCwgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIsIHBvbGljeURvd25sb2FkSUQs
IHJlcXVlc3QsIHJlc3BvbnNlKSwgMCk7CiB9CiAKK3ZvaWQgV2ViRnJhbWU6OmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2UgbWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsIG1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1aW50NjRfdCByZXF1ZXN0SUQpCit7CisgICAg
aWYgKCFtX2NvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvKiBkb2N1bWVu
dCA9IG1fY29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICBkb2N1bWVudC0+YWRkQ29uc29s
ZU1lc3NhZ2UobWVzc2FnZVNvdXJjZSwgbWVzc2FnZUxldmVsLCBtZXNzYWdlLCByZXF1ZXN0SUQp
OworfQorCiBTdHJpbmcgV2ViRnJhbWU6OnNvdXJjZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Nv
cmVGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCmlu
ZGV4IDlmZWY3ZjEzYTJmMDdkYzA3ZWFiOTc0ZjE4NDc2YTIwZTVhMDU0MzAuLmE3M2QyMmRiNzIz
Nzc1MjNiZThiYmUwODlmYTE1Nzc4Mjg5YmRmMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNoYXJl
YWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5cGVzLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZUxvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgpA
QCAtOTQsNiArOTUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydERvd25sb2FkKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSA9IHsg
fSk7CiAgICAgdm9pZCBjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQoV2ViQ29yZTo6
RG9jdW1lbnRMb2FkZXIqLCBQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwogCisgICAgdm9pZCBh
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmlu
ZyYsIHVpbnQ2NF90IHJlcXVlc3RJRCA9IDApOworCiAgICAgU3RyaW5nIHNvdXJjZSgpIGNvbnN0
OwogICAgIFN0cmluZyBjb250ZW50c0FzU3RyaW5nKCkgY29uc3Q7CiAgICAgU3RyaW5nIHNlbGVj
dGlvbkFzU3RyaW5nKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCmluZGV4IGE4Mjg3MWQ1NjkxZmJhNTg4ZGRiNjY1NWM0MzVmYmU3MWExNjM4
YjAuLjEwY2MwNGU1OTA4MjFiZjc5OWQ5NGU2YTU1YzE4NGRlMWEzMjlhMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zOCw2ICszOCw3IEBA
CiAjaW5jbHVkZSAiRWRpdG9yU3RhdGUuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIK
ICNpbmNsdWRlICJGaW5kQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZvcm1EYXRhUmVmZXJlbmNl
LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCIKICNp
bmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlQmFja0Zv
cndhcmRMaXN0LmgiCkBAIC0xNzcsNiArMTc4LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlQ29uZmlndXJhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGluZ0xvYWRlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QbHVnaW5Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+
CkBAIC00NjksNiArNDcxLDggQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIFdl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIFdlYkNvcmU6OnByb3Zp
ZGVVc2VyTWVkaWFUbyhtX3BhZ2UuZ2V0KCksIG5ldyBXZWJVc2VyTWVkaWFDbGllbnQoKnRoaXMp
KTsKICNlbmRpZgogCisgICAgbV9wYWdlLT5zZXR0aW5ncygpLnNldE5ldHdvcmtQcm9jZXNzQ1NQ
RnJhbWVBbmNlc3RvcnNDaGVja2luZ0VuYWJsZWQodHJ1ZSk7CisKICAgICBtX3BhZ2UtPnNldENv
bnRyb2xsZWRCeUF1dG9tYXRpb24ocGFyYW1ldGVycy5jb250cm9sbGVkQnlBdXRvbWF0aW9uKTsK
IAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtMzI5Nyw2ICszMzAxLDIxIEBAIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyKiBXZWJQYWdlOjpmdWxsU2NyZWVuTWFuYWdlcigpCiB9CiAjZW5k
aWYKIAordm9pZCBXZWJQYWdlOjphZGRDb25zb2xlTWVzc2FnZSh1aW50NjRfdCBmcmFtZUlELCBN
ZXNzYWdlU291cmNlIG1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCBtZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAgIGlmIChhdXRv
KiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpKQorICAg
ICAgICBmcmFtZS0+YWRkQ29uc29sZU1lc3NhZ2UobWVzc2FnZVNvdXJjZSwgbWVzc2FnZUxldmVs
LCBtZXNzYWdlLCByZXF1ZXN0SUQpOworfQorCit2b2lkIFdlYlBhZ2U6OnNlbmRDU1BWaW9sYXRp
b25SZXBvcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6VVJMJiByZXBvcnRVUkws
IElQQzo6Rm9ybURhdGFSZWZlcmVuY2UmJiByZXBvcnREYXRhKQoreworICAgIGF1dG8gcmVwb3J0
ID0gcmVwb3J0RGF0YS50YWtlRGF0YSgpOworICAgIGlmICghcmVwb3J0KQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGF1dG8qIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJh
bWUoZnJhbWVJRCkpCisgICAgICAgIFBpbmdMb2FkZXI6OnNlbmRWaW9sYXRpb25SZXBvcnQoKmZy
YW1lLT5jb3JlRnJhbWUoKSwgcmVwb3J0VVJMLCByZXBvcnQucmVsZWFzZU5vbk51bGwoKSwgVmlv
bGF0aW9uUmVwb3J0VHlwZTo6Q29udGVudFNlY3VyaXR5UG9saWN5KTsKK30KKwogTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyKiBXZWJQYWdlOjpub3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIoKQogewogICAgIGlmIChtX25vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAppbmRleCA5NzgwY2ZjNmM1YWY4NDBjYmRhZmIxZDA5M2VjYThlNGUyZWVmMmYxLi5hOGM1ZmI3
OWIyMjJhYzg0Mjc4ZmQ4MGZjODQ2MzRkMmU5NzU4ZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xMTksOCArMTE5LDkgQEAgY2xhc3MgQXJyYXk7
CiB9CiAKIG5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGVjb2RlcjsKIGNsYXNzIENvbm5lY3Rpb247
CitjbGFzcyBEZWNvZGVyOworY2xhc3MgRm9ybURhdGFSZWZlcmVuY2U7CiB9CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTMwNCw2ICszMDUsOSBAQCBwdWJsaWM6CiAgICAgV2ViRnVsbFNjcmVl
bk1hbmFnZXIqIGZ1bGxTY3JlZW5NYW5hZ2VyKCk7CiAjZW5kaWYKIAorICAgIHZvaWQgYWRkQ29u
c29sZU1lc3NhZ2UodWludDY0X3QgZnJhbWVJRCwgTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVs
LCBjb25zdCBTdHJpbmcmLCB1aW50NjRfdCByZXF1ZXN0SUQgPSAwKTsKKyAgICB2b2lkIHNlbmRD
U1BWaW9sYXRpb25SZXBvcnQodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViQ29yZTo6VVJMJiBy
ZXBvcnRVUkwsIElQQzo6Rm9ybURhdGFSZWZlcmVuY2UmJik7CisKICAgICAvLyAtLSBDYWxsZWQg
YnkgdGhlIERyYXdpbmdBcmVhLgogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBnZW5lcmljaXplIHRo
ZXNlIGludG8gYSBEcmF3aW5nQXJlYSBjbGllbnQgaW50ZXJmYWNlLiBXb3VsZCB0aGF0IGJlIGJl
bmVmaWNpYWw/CiAgICAgdm9pZCBkcmF3UmVjdChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CkBAIC0xMDc3LDYgKzEwODEsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1N1c3BlbmRlZDsgfQog
CisgICAgdm9pZCBkaWRSZWNlaXZlV2ViUGFnZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJik7CisKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIFdl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKQEAgLTEwOTksNyArMTEwNSw2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZW5kVG91Y2hCYXJNZW51SXRlbURhdGFSZW1vdmVkVXBkYXRlKFdlYkNv
cmU6OkhUTUxNZW51SXRlbUVsZW1lbnQmKTsKICNlbmRpZgogCi0gICAgdm9pZCBkaWRSZWNlaXZl
V2ViUGFnZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CiAgICAgdm9p
ZCBkaWRSZWNlaXZlU3luY1dlYlBhZ2VNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CiAKICNpZiBQTEFURk9STShJ
T1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgppbmRleCA1ZDFjZjZmMTQyMjdkMzE3OTg2MWQ2ZmRkNDI5N2M4ZDdkMGI3N2Iz
Li44MmIyMDI4MmFhMjZiNWFhOGU4NTVmNzViOGJlNGJmNDI0NTY2NzQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAg
LTI3LDYgKzI3LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAKICAg
ICBTZXREcmF3c0JhY2tncm91bmQoYm9vbCBkcmF3c0JhY2tncm91bmQpCiAKKyAgICBBZGRDb25z
b2xlTWVzc2FnZSh1aW50NjRfdCBmcmFtZUlELCBlbnVtIE1lc3NhZ2VTb3VyY2UgbWVzc2FnZVNv
dXJjZSwgZW51bSBNZXNzYWdlTGV2ZWwgbWVzc2FnZUxldmVsLCBTdHJpbmcgbWVzc2FnZSwgdWlu
dDY0X3QgcmVxdWVzdElEKQorICAgIFNlbmRDU1BWaW9sYXRpb25SZXBvcnQodWludDY0X3QgZnJh
bWVJRCwgV2ViQ29yZTo6VVJMIHJlcG9ydFVSTCwgSVBDOjpGb3JtRGF0YVJlZmVyZW5jZSByZXBv
cnREYXRhKQorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgU2V0VG9wQ29udGVudEluc2V0RmVu
Y2VkKGZsb2F0IGNvbnRlbnRJbnNldCwgSVBDOjpBdHRhY2htZW50IGZlbmNlUG9ydCkKICNlbmRp
Zgo=
</data>
<flag name="review"
          id="358025"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>