<?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>185986</bug_id>
          
          <creation_ts>2018-05-25 11:23:20 -0700</creation_ts>
          <short_desc>URL::host should return a StringView to reduce allocations</short_desc>
          <delta_ts>2018-08-01 13:14:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1427367</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 11:23:20 -0700</bug_when>
    <thetext>URL::host should return a StringView to reduce allocations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427369</commentid>
    <comment_count>1</comment_count>
      <attachid>341305</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 11:26:48 -0700</bug_when>
    <thetext>Created attachment 341305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427402</commentid>
    <comment_count>2</comment_count>
      <attachid>341308</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 12:15:06 -0700</bug_when>
    <thetext>Created attachment 341308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427406</commentid>
    <comment_count>3</comment_count>
      <attachid>341310</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 12:32:23 -0700</bug_when>
    <thetext>Created attachment 341310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427407</commentid>
    <comment_count>4</comment_count>
      <attachid>341310</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-05-25 12:47:42 -0700</bug_when>
    <thetext>Comment on attachment 341310
Patch

In file included from /home/ews-wpe/WebKit/WebKitBuild/Release/DerivedSources/WebCore/unified-sources/UnifiedSource382.cpp:8:0:
../../Source/WebCore/platform/network/soup/SoupNetworkSession.cpp: In static member function ‘static std::optional&lt;WebCore::ResourceError&gt; WebCore::SoupNetworkSession::checkTLSErrors(const WebCore::URL&amp;, GTlsCertificate*, GTlsCertificateFlags)’:
../../Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:280:58: error: no matching function for call to ‘WTF::HashMap&lt;WTF::String, WebCore::HostTLSCertificateSet, WTF::ASCIICaseInsensitiveHash&gt;::find(WTF::StringView)’
     auto it = clientCertificates().find(requestURL.host());
                                                          ^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427408</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-05-25 12:47:59 -0700</bug_when>
    <thetext>Plz fix build before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427410</commentid>
    <comment_count>6</comment_count>
      <attachid>341310</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2018-05-25 12:50:42 -0700</bug_when>
    <thetext>Comment on attachment 341310
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:336
&gt; -    return primaryDomain(url.host());
&gt; +    return primaryDomain(url.host().toString());

Seems like the ResourceLoadStatistics::primaryDomain() that takes a String could be converted to take a StringView, avoiding the allocation in some cases.

&gt; Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:315
&gt; +    RetainPtr&lt;CFStringRef&gt; host = m_url.host().toString().createCFString();

Seems unfortunate to do two allocations here, one for toString(), one for createCFString(). Can we add a createCFString() to StringView to avoid the extraneous allocation?

&gt; Source/WebCore/platform/network/curl/CookieJarDB.cpp:248
&gt; +    String requestHost(requestUrlObj.host().toString().convertToASCIILowercase());

Seems unfortunate to do two allocations here, one for toString(), one for convertToASCIILowercase(). Can we add a convertToASCIILowercase() to StringView to avoid the extraneous allocation?

&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:4852
&gt; +    auto host = url.host();
&gt;      return equalLettersIgnoringASCIICase(host, &quot;docs.google.com&quot;);

I think avoiding the local would be nicer here.

&gt; Tools/TestWebKitAPI/Tests/WebCore/URL.cpp:62
&gt; -    EXPECT_EQ(String(&quot;www.example.com&quot;), kurl.host());
&gt; +    EXPECT_EQ(String(&quot;www.example.com&quot;), kurl.host().toString());

lol, kurl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427412</commentid>
    <comment_count>7</comment_count>
      <attachid>341311</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 12:53:13 -0700</bug_when>
    <thetext>Created attachment 341311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427417</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 13:02:50 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
This change makes those existing problems more obvious and fixable while improving or preserving the status quo.  I&apos;ll do some of those as a follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427429</commentid>
    <comment_count>9</comment_count>
      <attachid>341317</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 13:25:46 -0700</bug_when>
    <thetext>Created attachment 341317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427435</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-25 13:39:55 -0700</bug_when>
    <thetext>http://trac.webkit.org/r232198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427440</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-25 13:54:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/40564881&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427676</commentid>
    <comment_count>12</comment_count>
      <attachid>341310</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-05-25 21:43:05 -0700</bug_when>
    <thetext>Comment on attachment 341310
Patch

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

This is a great idea, but risky when it’s called on the result of a function that returns a URL. Or on any URL that might have a lifetime shorter than the StringView of the host. It’s hard to spot such situations by code inspection of the patch, but I did not spot any.

&gt; Source/WebCore/loader/mac/LoaderNSURLExtras.mm:51
&gt; +        NSString *host = URL(url).host().toString();

Should use WTF::StringView::createNSString to convert directly from WTF::StringView to NSString without a temporary WTF::String.

&gt; Source/WebCore/page/csp/ContentSecurityPolicySource.cpp:68
&gt; +    return equalIgnoringASCIICase(host, m_host) || (m_hostHasWildcard &amp;&amp; host.endsWithIgnoringASCIICase(makeString(&quot;.&quot;, m_host)));

More efficient to use &apos;.&apos; instead of &quot;.&quot; in the call to makeString. But even more efficient to write a function that can do this match without constructing a string. Not super-hard to do that.

&gt; Source/WebCore/platform/URL.cpp:183
&gt; +        return makeString(host(), &apos;:&apos;, String::number(port.value()));

More efficient to find a way to make StringConcatenateNumbers.h do the numeric conversion here as part of the makeString call instead of using WTF::String::number; avoids creating and destroying a String. Slightly tricky because the port number is the type that happens to be the same as UChar, but it can be done by putting the port into an int/int32_t for now and eventually we can figure out how to disambiguate UChar and uint16_t.

&gt;&gt; Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:315
&gt;&gt; +    RetainPtr&lt;CFStringRef&gt; host = m_url.host().toString().createCFString();
&gt; 
&gt; Seems unfortunate to do two allocations here, one for toString(), one for createCFString(). Can we add a createCFString() to StringView to avoid the extraneous allocation?

We definitely can do that. WTF::StringView already has both createNSString and createCFStringWithoutCopying. It’s trivial to write a createCFString too.

&gt;&gt; Source/WebCore/platform/network/curl/CookieJarDB.cpp:248
&gt;&gt; +    String requestHost(requestUrlObj.host().toString().convertToASCIILowercase());
&gt; 
&gt; Seems unfortunate to do two allocations here, one for toString(), one for convertToASCIILowercase(). Can we add a convertToASCIILowercase() to StringView to avoid the extraneous allocation?

This idea applies to at least 4 other cases above in the patch too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428194</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-05-29 13:44:11 -0700</bug_when>
    <thetext>I&apos;m addressing Darin&apos;s feedback in https://bugs.webkit.org/show_bug.cgi?id=186059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428446</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-05-30 08:41:08 -0700</bug_when>
    <thetext>Looks like this broke Windows build: https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/9652/steps/compile-webkit/logs/stdio

How could a change like this be landed without all bots green on EWS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428452</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-05-30 08:48:02 -0700</bug_when>
    <thetext>Attempted build fix in 232292, let&apos;s see how it goes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1446947</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-08-01 13:14:11 -0700</bug_when>
    <thetext>*** Bug 173192 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341305</attachid>
            <date>2018-05-25 11:26:48 -0700</date>
            <delta_ts>2018-05-25 12:15:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185986-20180525112645.patch</filename>
            <type>text/plain</type>
            <size>45963</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDE4LTA1LTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0
IHNob3VsZCByZXR1cm4gYSBTdHJpbmdWaWV3IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJl
aGF2aW91ci4gIEp1c3QgZmV3ZXIgYWxsb2NhdGlvbnMuCisKKyAgICAgICAgKiBNb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
WW91VHViZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVS
TCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpob3N0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXRIYW5kc2hha2U6Omhvc3QgY29uc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb246OnBvcHVsYXRlQ29uZGl0aW9uQ2FjaGVJZk5lZWRlZCk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVNl
c3Npb25UaXRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZWVkc1NlZWtpbmdTdXBwb3J0
UXVpcmspOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJ
bnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXNlckRpZENs
aWNrU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6ZmluaXNoZWRQYXJz
aW5nKToKKyAgICAgICAgKiBodG1sL1VSTFV0aWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpVUkxV
dGlsczxUPjo6aG9zdG5hbWUgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpw
cmltYXJ5RG9tYWluKToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1t
OgorICAgICAgICAoc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5cGUpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6bW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQpOgorICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYXRpb246Omhvc3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQpOgorICAgICAgICAq
IHBhZ2UvUGVyZm9ybWFuY2VNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydFBh
Z2VPdmVyUG9zdExvYWRSZXNvdXJjZVRocmVzaG9sZCk6CisgICAgICAgICogcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0xvb3BiYWNrSVBBZGRyZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFk
ZHJlc3MpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwYWdl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tVVJMKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNIb3N0IGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlOjpob3N0TWF0
Y2hlcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vUHVibGljU3VmZml4Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6aG9zdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpVUkw6Omhvc3RBbmRQb3J0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlVSTDo6aXNNYXRjaGluZ0RvbWFpbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
VVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpyZWdpc3RyYWJsZURvbWFpbnNBcmVFcXVhbCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRQYXJ0aXRpb25pbmdEb21haW4pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZVN0cmVhbXMpOgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246Omhv
c3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2VydmVyOjpwZXJmb3JtR2V0T3JpZ2luc1dpdGhS
ZWdpc3RyYXRpb25zQ2FsbGJhY2tzKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gb2JqZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFj
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIHN0YXRpYyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OktleVZhbHUKICAg
ICAKIHN0YXRpYyBib29sIGlzWW91VHViZVVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBTdHJp
bmcgaG9zdE5hbWUgPSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgp
OwogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0TmFtZSwgIm0u
eW91dHViZS5jb20iKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSho
b3N0TmFtZSwgInlvdXR1LmJlIikKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoaG9zdE5hbWUsICJ3d3cueW91dHViZS5jb20iKQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0
YXRpYyBVUkwgcHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwoY28KICAgICBpZiAoIWlzWW91VHVi
ZVVSTCh1cmwpKQogICAgICAgICByZXR1cm4gVVJMKCk7CiAKLSAgICBTdHJpbmcgaG9zdE5hbWUg
PSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgpOwogICAgIGJvb2wg
aXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
aG9zdE5hbWUsICJtLnlvdXR1YmUuY29tIik7CiAgICAgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0g
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdE5hbWUsICJ5b3V0dS5iZSIpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBVUkwmIHVybCwg
YgogewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygid3NzIikgPT0gc2VjdXJlKTsKICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQodXJsLmhvc3QoKS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCh1cmwuaG9zdCgpLnRv
U3RyaW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgaWYgKHVybC5wb3J0KCkg
JiYgKCghc2VjdXJlICYmIHVybC5wb3J0KCkudmFsdWUoKSAhPSA4MCkgfHwgKHNlY3VyZSAmJiB1
cmwucG9ydCgpLnZhbHVlKCkgIT0gNDQzKSkpIHsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJzon
KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodXJsLnBvcnQoKS52YWx1ZSgpKTsKQEAg
LTE0Niw3ICsxNDYsNyBAQCB2b2lkIFdlYlNvY2tldEhhbmRzaGFrZTo6c2V0VVJMKGNvbnN0IFVS
CiAvLyBGSVhNRTogUmV0dXJuIHR5cGUgc2hvdWxkIGp1c3QgYmUgU3RyaW5nLCBub3QgY29uc3Qg
U3RyaW5nLgogY29uc3QgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6aG9zdCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fdXJsLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAg
IHJldHVybiBtX3VybC5ob3N0KCkudG9TdHJpbmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OwogfQogCiBjb25zdCBTdHJpbmcmIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50UHJvdG9jb2wo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uOjpwb3B1bGF0ZUNvbmRp
dGlvbgogICAgIGlmIChtX2NhY2hlZFRvcFVSTCAhPSB0b3BVUkwpIHsKICAgICAgICAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT50b3BVUkxG
aWx0ZXJzQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+dG9wVVJMRmlsdGVyc0J5dGVj
b2RlTGVuZ3RoKCkpOwogICAgICAgICBjb25zdCB1aW50MTZfdCBhbGxMb2FkVHlwZXNBbmRSZXNv
dXJjZVR5cGVzID0gTG9hZFR5cGVNYXNrIHwgUmVzb3VyY2VUeXBlTWFzazsKLSAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbigpID8gdG9wVVJMLmhvc3QoKSA6IHRvcFVSTC5zdHJpbmcoKTsKKyAgICAgICAgU3RyaW5n
IHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bigpID8gdG9wVVJMLmhvc3QoKS50b1N0cmluZygpIDogdG9wVVJMLnN0cmluZygpOwogICAgICAg
ICBhdXRvIHRvcFVSTEFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQoc3RyaW5nLnV0Zjgo
KSwgYWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBlcyk7CiAgICAgICAgIAogICAgICAgICBtX2Nh
Y2hlZFRvcFVSTEFjdGlvbnMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw3
IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgICAg
IFN0cmluZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFs
dWUpOwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVuYWJsZWQoKSAm
JiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJc0lu
SFRUUEZhbWlseShwYXJzZWRVUkwpIHx8IHBhcnNlZFVSTC5zdGFydHNXaXRoKCIvLyIpKQotICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnBy
ZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkpOworICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnBy
ZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkudG9TdHJp
bmcoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0ZUNhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYxLDcgKzc0NjEsNyBAQCBTdHJp
bmcgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNzaW9uVGl0CiAgICAgaWYgKCF0aXRsZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKIAotICAgIHRpdGxlID0gbV9jdXJyZW50U3Jj
Lmhvc3QoKTsKKyAgICB0aXRsZSA9IG1fY3VycmVudFNyYy5ob3N0KCkudG9TdHJpbmcoKTsKICNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKICAgICBpZiAoIXRpdGxlLmlzRW1wdHko
KSkKICAgICAgICAgdGl0bGUgPSBkZWNvZGVIb3N0TmFtZSh0aXRsZSk7CkBAIC03NTI0LDcgKzc1
MjQsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1NlZWtpbmdTdXBwb3J0UXVpcmsoRG9jCiAgICAgaWYg
KCFkb2N1bWVudC5zZXR0aW5ncygpLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQo
KS51cmwoKS5ob3N0KCk7CisgICAgYXV0byBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51
cmwoKS5ob3N0KCk7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhv
c3QsICJuZXRmbGl4LmNvbSIpIHx8IGhvc3QuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiLm5l
dGZsaXguY29tIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcg
KzQzNSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWkKICAgICAv
LyBSZXN0YXJ0IGFueSBvdGhlciBzbmFwc2hvdHRlZCBwbHVnaW5zIGluIHRoZSBwYWdlIHdpdGgg
dGhlIHNhbWUgb3JpZ2luLiBOb3RlIHRoYXQgdGhleQogICAgIC8vIG1heSBiZSBpbiBkaWZmZXJl
bnQgZnJhbWVzLCBzbyB0cmF2ZXJzZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LgogCi0g
ICAgU3RyaW5nIHBsdWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKKyAgICBhdXRvIHBs
dWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBz
ZXJ2aWNlVHlwZSgpOwogICAgIFZlY3RvcjxSZWY8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4+IHNp
bWlsYXJQbHVnaW5zOwogCkBAIC00NjksOSArNDY5LDkgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Ojp1c2VyRGlkQ2xpYwogICAgIGlmIChmb3J3YXJkRXZlbnQpCiAgICAgICAgIG1fcGVu
ZGluZ0NsaWNrRXZlbnRGcm9tU25hcHNob3QgPSAmZXZlbnQ7CiAKLSAgICBTdHJpbmcgcGx1Z0lu
T3JpZ2luID0gbV9sb2FkZWRVcmwuaG9zdCgpOworICAgIGF1dG8gcGx1Z0luT3JpZ2luID0gbV9s
b2FkZWRVcmwuaG9zdCgpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiAhU2NoZW1lUmVn
aXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChkb2N1bWVudCgpLnBhZ2UoKS0+bWFp
bkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0
Q29weWluZygpKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+c2V0dGluZ3MoKS5hdXRvc3RhcnRPcmln
aW5QbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkucGFnZSgp
LT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCkucGFnZSgpLT5t
YWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLCBwbHVnSW5PcmlnaW4sIHNl
cnZpY2VUeXBlKCksIGRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CisgICAgICAgIGRv
Y3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3Vt
ZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRv
U3RyaW5nKCksIHBsdWdJbk9yaWdpbi50b1N0cmluZygpLCBzZXJ2aWNlVHlwZSgpLCBkb2N1bWVu
dCgpLnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwogCiAgICAgTE9HKFBsdWdpbnMsICIlcCBVc2VyIGNs
aWNrZWQgb24gc25hcHNob3R0ZWQgcGx1Zy1pbi4gUmVzdGFydC4iLCB0aGlzKTsKICAgICByZXN0
YXJ0U25hcHNob3R0ZWRQbHVnSW4oKTsKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9hCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPnNldHRpbmdzKCkuYXV0b3N0YXJ0T3JpZ2luUGx1Z0lu
U25hcHNob3R0aW5nRW5hYmxlZCgpICYmIGRvY3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQo
KSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9TdGFydEZy
b21PcmlnaW4oZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VV
UkwoKS5ob3N0KCksIHVybC5ob3N0KCksIHNlcnZpY2VUeXBlKCkpKSB7CisgICAgaWYgKGRvY3Vt
ZW50KCkucGFnZSgpLT5zZXR0aW5ncygpLmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGlu
Z0VuYWJsZWQoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCkgJiYgZG9jdW1l
bnQoKS5wYWdlKCktPnBsdWdJbkNsaWVudCgpLT5zaG91bGRBdXRvU3RhcnRGcm9tT3JpZ2luKGRv
Y3VtZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgp
LnRvU3RyaW5nKCksIHVybC5ob3N0KCkudG9TdHJpbmcoKSwgc2VydmljZVR5cGUoKSkpIHsKICAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRv
IGF1dG8tc3RhcnQsIHNldCB0byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS5wYWdlKCktPm1haW5G
cmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLmhv
c3QoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJT
bmFwc2hvdDsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBJbWFn
ZURvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUg
aG9zdG5hbWUgaWYgdGhlcmUgaXMgbm8gcGF0aC4KICAgICAgICAgICAgIFN0cmluZyBuYW1lID0g
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogICAg
ICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG5hbWUgPSB1cmwo
KS5ob3N0KCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IHVybCgpLmhvc3QoKS50b1N0cmluZygp
OwogICAgICAgICAgICAgc2V0VGl0bGUoaW1hZ2VUaXRsZShuYW1lLCBzaXplKSk7CiAgICAgICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMVXRpbHMuaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2
LDcgQEAgdm9pZCBVUkxVdGlsczxUPjo6c2V0SG9zdChjb25zdCBTdHJpbmcmIAogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiBTdHJpbmcgVVJMVXRpbHM8VD46Omhvc3RuYW1lKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaHJlZigpLmhvc3QoKTsKKyAgICByZXR1cm4gaHJlZigpLmhvc3QoKS50b1N0cmlu
ZygpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZQogICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCZtX2ZyYW1lKSkKICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlG
b3JDb29raWVzKHVybCk7CiAKLSAgICBTdHJpbmcgcmVnaXN0cmFibGVEb21haW4gPSBSZXNvdXJj
ZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUodXJsLmhvc3QoKSk7CisgICAgU3RyaW5nIHJlZ2lzdHJh
YmxlRG9tYWluID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKHVybC5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKSB7CiAgICAgICAgIGlmIChT
ZWN1cml0eVBvbGljeTo6c2hvdWxkSW5oZXJpdFNlY3VyaXR5T3JpZ2luRnJvbU93bmVyKGZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKSkgfHwgcmVnaXN0cmFibGVEb21haW5zQXJlRXF1YWwoZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpLCByZWdpc3RyYWJsZURvbWFpbikpCiAgICAgICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvclNhbWVTaXRlQ29va2llcyh1cmwpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTQsNyArMjk0LDcgQEAgYm9vbCBMaW5rTG9hZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQog
ICAgICAgICAvLyBGSVhNRTogVGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSBsaW5rIGVsZW1lbnQg
Y2FuIGJlIGluICIvL2hvc3RuYW1lIiBmb3JtLCBhbmQgd2Ugc2hvdWxkbid0IGF0dGVtcHQKICAg
ICAgICAgLy8gdG8gY29tcGxldGUgdGhhdCBhcyBVUkwgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODg1Nz4uCiAgICAgICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygp
LmRuc1ByZWZldGNoaW5nRW5hYmxlZCgpICYmIGhyZWYuaXNWYWxpZCgpICYmICFocmVmLmlzRW1w
dHkoKSAmJiBkb2N1bWVudC5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQuZnJhbWUoKS0+
bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0KCkpOworICAgICAgICAgICAg
ZG9jdW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0
KCkudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgcHJlY29ubmVjdElmTmVlZGVkKHJlbEF0dHJp
YnV0ZSwgaHJlZiwgZG9jdW1lbnQsIGNyb3NzT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIzMjE3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6bWVyZ2UoY29uc3QKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1h
cnlEb21haW4oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJs
Lmhvc3QoKSk7CisgICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKS50b1N0cmluZygp
KTsKIH0KIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oY29u
c3QgU3RyaW5nJiBob3N0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJO
U1VSTEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0xv
YWRlck5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZSgKIAogICAgIGlm
IChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwIHx8IFtsYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsVG9T
dHJpbmc6QCIvIl0pIHsKICAgICAgICAgLy8gbGFzdFBhdGhDb21wb25lbnQgaXMgbm8gZ29vZCwg
dHJ5IHRoZSBob3N0LgotICAgICAgICBOU1N0cmluZyAqaG9zdCA9IFVSTCh1cmwpLmhvc3QoKTsK
KyAgICAgICAgTlNTdHJpbmcgKmhvc3QgPSBVUkwodXJsKS5ob3N0KCkudG9TdHJpbmcoKTsKICAg
ICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMoaG9zdCk7
CiAgICAgICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBD
YW4ndCBtYWtlIGEgZmlsZW5hbWUgdXNpbmcgdGhpcyBVUkwsIHVzZSAidW5rbm93biIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lk
IENocm9tZTo6c2V0U3RhdHVzYmFyVGV4dChGcmFtZSYgZnJhCiB2b2lkIENocm9tZTo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBt
b2RpZmllckZsYWdzKQogewogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkgJiYgcmVzdWx0Lmlu
bmVyTm9kZSgpLT5kb2N1bWVudCgpLmlzRE5TUHJlZmV0Y2hFbmFibGVkKCkpCi0gICAgICAgIG1f
cGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhyZXN1bHQuYWJz
b2x1dGVMaW5rVVJMKCkuaG9zdCgpKTsKKyAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRl
cigpLmNsaWVudCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCku
dG9TdHJpbmcoKSk7CiAgICAgbV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0
LCBtb2RpZmllckZsYWdzKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQobV9wYWdlLCByZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFN0
cmluZyBMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAogICAgIGlmICghbV9mcmFtZSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybCgpLmhvc3QoKTsKKyAgICByZXR1
cm4gdXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBMb2NhdGlvbjo6cG9ydCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDQsNyArMjEwNCw3
IEBAIHZvaWQgUGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQoY29uc3QgVVIKIHsKICAgICBTdHJp
bmcgZG9tYWluOwogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0gICAgZG9tYWluID0g
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkZXN0aW5hdGlvblVSTC5ob3N0KCkpOworICAg
IGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oZGVzdGluYXRpb25VUkwuaG9z
dCgpLnRvU3RyaW5nKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTW9uaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZU1vbml0b3Iu
Y3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
TW9uaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgdm9p
ZCByZXBvcnRQYWdlT3ZlclBvc3RMb2FkUmVzb3VyCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKSk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKS50b1N0cmluZygp
KTsKICAgICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjbwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNMb29wYmFja0lQQWRkcmVzcyhj
b25zdCBTdHJpbmcmIGhvc3QpCitzdGF0aWMgYm9vbCBpc0xvb3BiYWNrSVBBZGRyZXNzKFN0cmlu
Z1ZpZXcgaG9zdCkKIHsKICAgICAvLyBUaGUgSVB2NiBsb29wYmFjayBhZGRyZXNzIGlzIDA6MDow
OjA6MDowOjA6MSwgd2hpY2ggY29tcHJlc3NlcyB0byA6OjEuCiAgICAgaWYgKGhvc3QgPT0gIls6
OjFdIikKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdEFzUG90ZW50
aWFsbHlUcnVzCiAKIGJvb2wgc2hvdWxkVHJlYXRBc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY29u
c3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0
d29ydGh5KHVybC5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3Qo
KSk7CisgICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5w
cm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3QoKS50b1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCkpOwogfQogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29u
c3QgVVJMJiB1cmwpCkBAIC01NDgsNyArNTQ4LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNT
YW1lU2NoZW1lSG9zdFBvcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNlY3VyaXR5T3Jp
Z2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KQor
Ym9vbCBTZWN1cml0eU9yaWdpbjo6aXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKFN0cmlu
Z1ZpZXcgaG9zdCkKIHsKICAgICBpZiAoaXNMb29wYmFja0lQQWRkcmVzcyhob3N0KSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShy
ZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
UG90ZW50aWFsbHlUcnVzdHdvcnRoeSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQb3RlbnRpYWxseVRy
dXN0d29ydGh5OyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFk
ZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9y
TG9vcGJhY2tJUEFkZHJlc3MoU3RyaW5nVmlldyk7CiAKICAgICBjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw3IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIHsKICAgICAgICAg
cmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAgICAgICAgICAgICB1cmwucHJvdG9jb2woKS5p
c051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB1cmwucHJvdG9jb2woKS50b1N0cmluZygpLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCksCi0gICAgICAgICAgICB1cmwuaG9zdCgpLmlzTnVsbCgpID8g
ZW1wdHlTdHJpbmcoKSA6IHVybC5ob3N0KCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSwKKyAg
ICAgICAgICAgIHVybC5ob3N0KCkuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdXJsLmhvc3Qo
KS50b1N0cmluZygpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCksCiAgICAgICAgICAgICB1cmwu
cG9ydCgpCiAgICAgICAgIH07CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
Q29udGVudFVSTFBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXMoY29ucwog
CiBib29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc0hvc3QoY29uc3QgVVJMJiB0ZXN0
KSBjb25zdAogewotICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IHRlc3QuaG9zdCgpOworICAgIGF1
dG8gaG9zdCA9IHRlc3QuaG9zdCgpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGhv
c3QsIG1faG9zdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OnNjaGVtZQogCiBib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZTo6aG9zdE1hdGNoZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7Ci0g
ICAgY29uc3QgU3RyaW5nJiBob3N0ID0gdXJsLmhvc3QoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShob3N0LCBtX2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0
LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIi4iICsgbV9ob3N0KSk7CisgICAgYXV0byBob3N0
ID0gdXJsLmhvc3QoKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShob3N0LCBt
X2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UobWFrZVN0cmluZygiLiIsIG1faG9zdCkpKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUHVibGljU3VmZml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIz
LDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFB1YmxpY1N1ZmZpeF9oCi0jZGVmaW5lIFB1YmxpY1N1ZmZpeF9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSw1ICszOCwzIEBAIFN0cmlu
ZyBkZWNvZGVIb3N0TmFtZShjb25zdCBTdHJpbmcmIGRvbWEKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0KLSNlbmRpZiAvLyBQ
dWJsaWNTdWZmaXhfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCShyZXZpc2lvbiAyMzIx
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsMTAgKzE1NSwxMCBAQCBTdHJpbmdWaWV3IFVSTDo6cHJvdG9jb2woKSBjb25zdAogICAg
IHJldHVybiBTdHJpbmdWaWV3KG1fc3RyaW5nKS5zdWJzdHJpbmcoMCwgbV9zY2hlbWVFbmQpOwog
fQogCi1TdHJpbmcgVVJMOjpob3N0KCkgY29uc3QKK1N0cmluZ1ZpZXcgVVJMOjpob3N0KCkgY29u
c3QKIHsKICAgICB1bnNpZ25lZCBzdGFydCA9IGhvc3RTdGFydCgpOwotICAgIHJldHVybiBtX3N0
cmluZy5zdWJzdHJpbmcoc3RhcnQsIG1faG9zdEVuZCAtIHN0YXJ0KTsKKyAgICByZXR1cm4gU3Ry
aW5nVmlldyhtX3N0cmluZykuc3Vic3RyaW5nKHN0YXJ0LCBtX2hvc3RFbmQgLSBzdGFydCk7CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IFVSTDo6cG9ydCgpIGNvbnN0CkBAIC0xODAsOCAr
MTgwLDggQEAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gVVJMOjpwb3J0KCkgY29ucwogU3RyaW5n
IFVSTDo6aG9zdEFuZFBvcnQoKSBjb25zdAogewogICAgIGlmIChhdXRvIHBvcnQgPSB0aGlzLT5w
b3J0KCkpCi0gICAgICAgIHJldHVybiBob3N0KCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0
LnZhbHVlKCkpOwotICAgIHJldHVybiBob3N0KCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KGhvc3QoKSwgJzonLCBTdHJpbmc6Om51bWJlcihwb3J0LnZhbHVlKCkpKTsKKyAgICByZXR1cm4g
aG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBVUkw6OnByb3RvY29sSG9zdEFuZFBvcnQo
KSBjb25zdApAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgVVJMOjppc01hdGNoaW5nRG9tYWluKGNv
bnN0IFN0cmluZyYKICAgICBpZiAoIWhvc3QuZW5kc1dpdGgoZG9tYWluKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhvc3QubGVuZ3RoKCkgPT0gZG9tYWluLmxlbmd0aCgp
IHx8IGhvc3QuY2hhcmFjdGVyQXQoaG9zdC5sZW5ndGgoKSAtIGRvbWFpbi5sZW5ndGgoKSAtIDEp
ID09ICcuJzsKKyAgICByZXR1cm4gaG9zdC5sZW5ndGgoKSA9PSBkb21haW4ubGVuZ3RoKCkgfHwg
aG9zdFtob3N0Lmxlbmd0aCgpIC0gZG9tYWluLmxlbmd0aCgpIC0gMV0gPT0gJy4nOwogfQogCiBT
dHJpbmcgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIGlucHV0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGgodW5zaWduZWQgbGVuZ3RoID0gMTAyNCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmdWaWV3IHByb3RvY29sKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGhvc3QoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmdWaWV3IGhvc3QoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGhvc3RBbmRQb3J0KCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHByb3RvY29sSG9zdEFuZFBvcnQoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5t
bQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtl
eUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIFN0cmlu
ZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKIAogICAgIGF1dG8gY2hhbGxlbmdl
ID0gY2hhbGxlbmdlU3RyaW5nLmlzQWxsQVNDSUkoKSA/IGNoYWxsZW5nZVN0cmluZy5hc2NpaSgp
IDogIiI7CiAKLSAgICByZXR1cm4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtl
eVNpemUsIGNoYWxsZW5nZSwga2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9zdCgpKSk7Cisg
ICAgcmV0dXJuIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplLCBjaGFs
bGVuZ2UsIGtleWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmluZygpKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjU1LDExICsyNTUsMTEgQEAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0
IFJlcwogLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgZm9yIHRoZXNlIGZ1bmN0aW9ucy4K
IGlubGluZSBib29sIHJlZ2lzdHJhYmxlRG9tYWluc0FyZUVxdWFsKGNvbnN0IFVSTCYgYSwgY29u
c3QgVVJMJiBiKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25O
YW1lKGEuaG9zdCgpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGIuaG9z
dCgpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6cGFydGl0aW9uTmFtZShhLmhv
c3QoKS50b1N0cmluZygpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGIu
aG9zdCgpLnRvU3RyaW5nKCkpOwogfQogaW5saW5lIGJvb2wgcmVnaXN0cmFibGVEb21haW5zQXJl
RXF1YWwoY29uc3QgVVJMJiBhLCBjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluKQogewot
ICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGEuaG9zdCgpKSA9
PSByZWdpc3RyYWJsZURvbWFpbjsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6cGFy
dGl0aW9uTmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSByZWdpc3RyYWJsZURvbWFpbjsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGEsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgYikgeyByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZXF1YWwo
YSwgYik7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCShyZXZpc2lv
biAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDExICsxOTgsMTEg
QEAgU3RyaW5nIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llU3Rvcgogc3RhdGljIGlubGlu
ZSBTdHJpbmcgZ2V0UGFydGl0aW9uaW5nRG9tYWluKGNvbnN0IFVSTCYgdXJsKSAKIHsKICNpZiBF
TkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQotICAgIGF1dG8gZG9tYWluID0gdG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBhdXRvIGRvbWFpbiA9IHRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBpZiAoZG9t
YWluLmlzRW1wdHkoKSkKLSAgICAgICAgZG9tYWluID0gdXJsLmhvc3QoKTsKKyAgICAgICAgZG9t
YWluID0gdXJsLmhvc3QoKS50b1N0cmluZygpOwogI2Vsc2UKLSAgICBhdXRvIGRvbWFpbiA9IHVy
bC5ob3N0KCk7CisgICAgYXV0byBkb21haW4gPSB1cmwuaG9zdCgpLnRvU3RyaW5nKCk7CiAjZW5k
aWYKICAgICByZXR1cm4gZG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1w
bENGTmV0LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGVT
dHJlYQogICAgIGlmIChtX2Nvbm5lY3Rpb25UeXBlID09IFVua25vd24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9IG1fdXJsLmhvc3QoKS5jcmVh
dGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9IG1fdXJsLmhv
c3QoKS50b1N0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICAgICAvLyBDcmVhdGluZyBzdHJl
YW1zIHRvIGZpbmFsIGRlc3RpbmF0aW9uLCBub3QgdG8gcHJveHkuCiAgICAgQ0ZSZWFkU3RyZWFt
UmVmIHJlYWRTdHJlYW0gPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJM
b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJM
b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIFN0cmlu
ZyBXb3JrZXJMb2NhdGlvbjo6aG9zdCgpIGNvbnN0CiAKIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6
aG9zdG5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3VybC5ob3N0KCk7CisgICAgcmV0dXJu
IG1fdXJsLmhvc3QoKS50b1N0cmluZygpOwogfQogCiBTdHJpbmcgV29ya2VyTG9jYXRpb246OnBv
cnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9T
V1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNl
L3NlcnZlci9TV1NlcnZlci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NjYsNyArODY2LDcgQEAgdm9pZCBTV1NlcnZlcjo6cGVyZm9ybUdldE9yaWdpbnNXaXRoUmVnaQog
ICAgIEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnM7
CiAgICAgZm9yIChhdXRvJiBrZXkgOiBtX3JlZ2lzdHJhdGlvbnMua2V5cygpKSB7CiAgICAgICAg
IG9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucy5hZGQoa2V5LnRvcE9yaWdpbigpKTsKLSAgICAgICAg
b3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zLmFkZChTZWN1cml0eU9yaWdpbkRhdGEgeyBrZXkuc2Nv
cGUoKS5wcm90b2NvbCgpLnRvU3RyaW5nKCksIGtleS5zY29wZSgpLmhvc3QoKSwga2V5LnNjb3Bl
KCkucG9ydCgpIH0pOworICAgICAgICBvcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMuYWRkKFNlY3Vy
aXR5T3JpZ2luRGF0YSB7IGtleS5zY29wZSgpLnByb3RvY29sKCkudG9TdHJpbmcoKSwga2V5LnNj
b3BlKCkuaG9zdCgpLnRvU3RyaW5nKCksIGtleS5zY29wZSgpLnBvcnQoKSB9KTsKICAgICB9CiAK
ICAgICBhdXRvIGNhbGxiYWNrcyA9IFdURk1vdmUobV9nZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlv
bnNDYWxsYmFja3MpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTgtMDUt
MjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBVUkw6Omhvc3Qgc2hvdWxkIHJldHVybiBhIFN0cmluZ1ZpZXcgdG8gcmVkdWNlIGFsbG9jYXRp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU5
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZmV0Y2hE
aXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjphcmVGcmFtZUFuY2VzdG9yc1NhbWVTaXRl
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6Om92ZXJyaWRlU3lzdGVtUHJveGllcyk6CisgICAgICAgICogU2hhcmVk
L0FQSS9BUElVUkwuaDoKKyAgICAgICAgKEFQSTo6VVJMOjpob3N0IGNvbnN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9yRmFpbGVkVG9MYXVuY2gpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UGx1Z2luVmlldzo6cGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsdWdpbkluZm9Qcm92aWRlcjo6cG9wdWxhdGVQbHVnaW5DYWNoZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpuZWVkc0hpZGRlbkNvbnRlbnRFZGl0YWJsZVF1aXJrKToKKyAgICAgICAgKFdlYktpdDo6bmVl
ZHNQbGFpblRleHRRdWlyayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRldGVybWluZVBy
aW1hcnlTbmFwc2hvdHRlZFBsdWdJbik6CisKIDIwMTgtMDUtMjQgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBwbHVnaW4gc2VhcmNoIHBhdGggdG8g
bG9vayBmb3IgdXNlciBpbnN0YWxsZWQgcGx1Z2lucwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgc3RhdGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRy
aWVzKFBBTDo6UwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIHVybCA9IHRyYXZl
cnNhbEVudHJ5LT5lbnRyeS5yZXNwb25zZSgpLnVybCgpOwotICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBvcmlnaW5zQW5kU2l6ZXMuYWRkKHt1cmwucHJvdG9jb2woKS50b1N0cmluZygpLCB1cmwu
aG9zdCgpLCB1cmwucG9ydCgpfSwgMCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG9yaWdp
bnNBbmRTaXplcy5hZGQoe3VybC5wcm90b2NvbCgpLnRvU3RyaW5nKCksIHVybC5ob3N0KCkudG9T
dHJpbmcoKSwgdXJsLnBvcnQoKX0sIDApOwogCiAgICAgICAgICAgICBpZiAoZmV0Y2hPcHRpb25z
LmNvbnRhaW5zKFdlYnNpdGVEYXRhRmV0Y2hPcHRpb246OkNvbXB1dGVTaXplcykpCiAgICAgICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSB0cmF2ZXJzYWxFbnRyeS0+ZW50cnku
c291cmNlU3RvcmFnZVJlY29yZCgpLmhlYWRlci5zaXplKCkgKyB0cmF2ZXJzYWxFbnRyeS0+cmVj
b3JkSW5mby5ib2R5U2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysr
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjphYm9ydCgpCiBzdGF0aWMgYm9vbCBhcmVGcmFtZUFuY2VzdG9yc1NhbWVTaXRlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPj4mIGZyYW1lQW5jZXN0b3JPcmlnaW5zKQogewogI2lmIEVOQUJMRShQVUJMSUNfU1VG
RklYX0xJU1QpCi0gICAgYXV0byByZXNwb25zZVBhcnRpdGlvbiA9IFJlc291cmNlUmVxdWVzdDo6
cGFydGl0aW9uTmFtZShyZXNwb25zZS51cmwoKS5ob3N0KCkpOworICAgIGF1dG8gcmVzcG9uc2VQ
YXJ0aXRpb24gPSBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUocmVzcG9uc2UudXJsKCku
aG9zdCgpLnRvU3RyaW5nKCkpOwogICAgIHJldHVybiBmcmFtZUFuY2VzdG9yT3JpZ2lucy5maW5k
TWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKICAgICAgICAgcmV0dXJuIGl0ZW0tPmlz
VW5pcXVlKCkgfHwgUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKGl0ZW0tPmhvc3QoKSkg
IT0gcmVzcG9uc2VQYXJ0aXRpb247CiAgICAgfSkgPT0gbm90Rm91bmQ7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01hYy5t
bQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
TmV0d29ya1Byb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3Rh
dGljIHZvaWQgb3ZlcnJpZGVTeXN0ZW1Qcm94aWVzKGNvbnN0IAogICAgIGlmICghaHR0cFByb3h5
LmlzTnVsbCgpKSB7CiAgICAgICAgIFVSTCBodHRwUHJveHlVUkwoVVJMKCksIGh0dHBQcm94eSk7
CiAgICAgICAgIGlmIChodHRwUHJveHlVUkwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBbcHJv
eHlTZXR0aW5ncyBzZXRPYmplY3Q6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhodHRwUHJveHlV
UkwuaG9zdCgpKSBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQUHJveHld
OworICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2JqZWN0Om5zU3RyaW5nRnJvbVdlYkNv
cmVTdHJpbmcoaHR0cFByb3h5VVJMLmhvc3QoKS50b1N0cmluZygpKSBmb3JLZXk6KE5TU3RyaW5n
ICopa0NGTmV0d29ya1Byb3hpZXNIVFRQUHJveHldOwogICAgICAgICAgICAgaWYgKGh0dHBQcm94
eVVSTC5wb3J0KCkpIHsKICAgICAgICAgICAgICAgICBOU051bWJlciAqcG9ydCA9IFtOU051bWJl
ciBudW1iZXJXaXRoSW50Omh0dHBQcm94eVVSTC5wb3J0KCkudmFsdWUoKV07CiAgICAgICAgICAg
ICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2JqZWN0OnBvcnQgZm9yS2V5OihOU1N0cmluZyAqKWtD
Rk5ldHdvcmtQcm94aWVzSFRUUFBvcnRdOwpAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgdm9pZCBv
dmVycmlkZVN5c3RlbVByb3hpZXMoY29uc3QgCiAgICAgICAgIFVSTCBodHRwc1Byb3h5VVJMKFVS
TCgpLCBodHRwc1Byb3h5KTsKICAgICAgICAgaWYgKGh0dHBzUHJveHlVUkwuaXNWYWxpZCgpKSB7
CiAjaWYgIUVOQUJMRShNSU5JTUFMX1NJTVVMQVRPUikKLSAgICAgICAgICAgIFtwcm94eVNldHRp
bmdzIHNldE9iamVjdDpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGh0dHBzUHJveHlVUkwuaG9z
dCgpKSBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQU1Byb3h5XTsKKyAg
ICAgICAgICAgIFtwcm94eVNldHRpbmdzIHNldE9iamVjdDpuc1N0cmluZ0Zyb21XZWJDb3JlU3Ry
aW5nKGh0dHBzUHJveHlVUkwuaG9zdCgpLnRvU3RyaW5nKCkpIGZvcktleTooTlNTdHJpbmcgKilr
Q0ZOZXR3b3JrUHJveGllc0hUVFBTUHJveHldOwogICAgICAgICAgICAgaWYgKGh0dHBzUHJveHlV
UkwucG9ydCgpKSB7CiAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKnBvcnQgPSBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDpodHRwc1Byb3h5VVJMLnBvcnQoKS52YWx1ZSgpXTsKICAgICAgICAgICAg
ICAgICBbcHJveHlTZXR0aW5ncyBzZXRPYmplY3Q6cG9ydCBmb3JLZXk6KE5TU3RyaW5nICopa0NG
TmV0d29ya1Byb3hpZXNIVFRQU1BvcnRdOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvQVBJ
L0FQSVVSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElVUkwu
aAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSVVSTC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBXVEY6OlN0cmlu
ZyBob3N0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHBhcnNlVVJMSWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgcmV0dXJuIG1fcGFyc2VkVVJMLT5pc1ZhbGlkKCkgPyBtX3BhcnNlZFVSTC0+aG9zdCgp
IDogV1RGOjpTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2VkVVJMLT5pc1ZhbGlkKCkg
PyBtX3BhcnNlZFVSTC0+aG9zdCgpLnRvU3RyaW5nKCkgOiBXVEY6OlN0cmluZygpOwogICAgIH0K
IAogICAgIFdURjo6U3RyaW5nIHByb3RvY29sKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlkVGVybWlu
YXQKICNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQogICAgIGlmIChwYWdlcy5zaXplKCkg
PT0gMSkgewogICAgICAgICBhdXRvJiBwYWdlID0gKnBhZ2VzWzBdOwotICAgICAgICBTdHJpbmcg
ZG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihXZWJDb3JlOjpVUkwoV2ViQ29y
ZTo6UGFyc2VkVVJMU3RyaW5nLCBwYWdlLmN1cnJlbnRVUkwoKSkuaG9zdCgpKTsKKyAgICAgICAg
U3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oV2ViQ29yZTo6VVJM
KFdlYkNvcmU6OlBhcnNlZFVSTFN0cmluZywgcGFnZS5jdXJyZW50VVJMKCkpLmhvc3QoKS50b1N0
cmluZygpKTsKICAgICAgICAgaWYgKCFkb21haW4uaXNFbXB0eSgpKQogICAgICAgICAgICAgcGFn
ZS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhFbmhhbmNlZFByaXZhY3koV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpkb21haW5DYXVzaW5nQ3Jhc2hLZXkoKSwgZG9tYWluLCBXZWJDb3Jl
OjpTaG91bGRTYW1wbGU6Ok5vKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAko
cmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTcsNyArMTMxNyw3
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2sKIAogICAgIC8vIElu
aGVyaXQgdGhlIGRvbWFpbi9ob3N0IGZyb20gdGhlIG1haW4gZnJhbWUncyBVUkwgaWYgaXQgaXMg
bm90IGV4cGxpY2l0bHkgc2V0LgogICAgIGlmIChkb21haW4uaXNFbXB0eSgpKQotICAgICAgICBk
b21haW4gPSBhY3RpdmVVUkwuaG9zdCgpOworICAgICAgICBkb21haW4gPSBhY3RpdmVVUkwuaG9z
dCgpLnRvU3RyaW5nKCk7CiAKICAgICBjb29raWUuZG9tYWluID0gZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChkb21haW4pOwogCkBAIC0xMzYxLDcgKzEzNjEsNyBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29rCiAgICAgQVNTRVJUKGFjdGl2ZVVSTC5pc1Zh
bGlkKCkpOwogCiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9w
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7Ci0gICAgY29v
a2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKHBhZ2UtPndlYnNpdGVEYXRhU3Rv
cmUoKS5zZXNzaW9uSUQoKSwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChhY3RpdmVV
UkwuaG9zdCgpKSk7CisgICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCkpKTsKIH0KIAogdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vz
c2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9ucykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAyMzIx
NzUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgzMSw4ICsxODMxLDggQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVn
aW5EaWRSZWNlaXZlVXNlckludAogICAgIG1fZGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbiA9IHRy
dWU7CiAKICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqbV9wbHVnaW5FbGVtZW50KTsKLSAgICBT
dHJpbmcgcGFnZU9yaWdpbiA9IHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+
bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKTsKLSAgICBTdHJpbmcgcGx1
Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZFVybCgpLmhvc3QoKTsKKyAgICBT
dHJpbmcgcGFnZU9yaWdpbiA9IHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+
bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKS50b1N0cmluZygpOworICAg
IFN0cmluZyBwbHVnaW5PcmlnaW4gPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkVXJsKCkuaG9z
dCgpLnRvU3RyaW5nKCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50
LnNlcnZpY2VUeXBlKCk7CiAKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wbHVnSW5EaWRS
ZWNlaXZlVXNlckludGVyYWN0aW9uKHBhZ2VPcmlnaW4sIHBsdWdpbk9yaWdpbiwgbWltZVR5cGUs
IHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQ
bHVnaW5JbmZvUHJvdmlkZXIuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBXZWJQbHVnaW5JbmZvUHJvdmlkZXI6OnBvcHVs
YXRlUGx1ZwogICAgIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBTdHJpbmcgcGFnZUhvc3Qg
PSBwYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlVVJM
KCkuaG9zdCgpOworICAgIFN0cmluZyBwYWdlSG9zdCA9IHBhZ2UubWFpbkZyYW1lKCkubG9hZGVy
KCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5ob3N0KCkudG9TdHJpbmcoKTsKICAg
ICBpZiAocGFnZUhvc3QuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKGF1dG8m
IGluZm8gOiBtX2NhY2hlZFBsdWdpbnMpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0
OCw4ICs0ODQ4LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNIaWRkZW5Db250ZW50RWRpdGFibGVRdQog
ICAgIGlmICghbmVlZHNRdWlya3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmlu
ZyBob3N0ID0gdXJsLmhvc3QoKTsKLSAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAg
YXV0byBob3N0ID0gdXJsLmhvc3QoKTsKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoaG9zdCwgImRvY3MuZ29vZ2xlLmNvbSIpOwogfQogCkBAIC00ODU4LDcgKzQ4NTcs
NyBAQCBzdGF0aWMgYm9vbCBuZWVkc1BsYWluVGV4dFF1aXJrKGJvb2wgbmVlCiAgICAgaWYgKCFu
ZWVkc1F1aXJrcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIGhvc3QgPSB1
cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdCA9IHVybC5ob3N0KCk7CiAKICAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdCwgInR3aXR0ZXIuY29tIikpCiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNTQzMSw4ICs1NDMwLDggQEAgdm9pZCBXZWJQYWdlOjpkZXRlcm1pbmVQ
cmltYXJ5U25hcHNob3R0ZQogCiAgICAgTE9HKFBsdWdpbnMsICJQcmltYXJ5IFBsdWctSW4gRGV0
ZWN0aW9uOiBzdWNjZXNzIC0gZm91bmQgYSBjYW5kaWRhdGUgcGx1Zy1pbiAtIGluZm9ybSBpdC4i
KTsKICAgICBtX2RpZEZpbmRQcmltYXJ5U25hcHNob3R0ZWRQbHVnaW4gPSB0cnVlOwotICAgIG1f
cHJpbWFyeVBsdWdJblBhZ2VPcmlnaW4gPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkt
PmJhc2VVUkwoKS5ob3N0KCk7Ci0gICAgbV9wcmltYXJ5UGx1Z0luT3JpZ2luID0gY2FuZGlkYXRl
UGx1Z0luLT5sb2FkZWRVcmwoKS5ob3N0KCk7CisgICAgbV9wcmltYXJ5UGx1Z0luUGFnZU9yaWdp
biA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKS50b1N0
cmluZygpOworICAgIG1fcHJpbWFyeVBsdWdJbk9yaWdpbiA9IGNhbmRpZGF0ZVBsdWdJbi0+bG9h
ZGVkVXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgbV9wcmltYXJ5UGx1Z0luTWltZVR5cGUg
PSBjYW5kaWRhdGVQbHVnSW4tPnNlcnZpY2VUeXBlKCk7CiAKICAgICBjYW5kaWRhdGVQbHVnSW4t
PnNldElzUHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luKHRydWUpOwpJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMDUtMjUgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVUkw6Omhvc3Qgc2hv
dWxkIHJldHVybiBhIFN0cmluZ1ZpZXcgdG8gcmVkdWNlIGFsbG9jYXRpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU5ODYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6Omhvc3RGb3JVUkwpOgorCiAyMDE4LTA1LTExICBDaGFybGVzIFZhemFjICA8Y3ZhemFj
QGdtYWlsLmNvbT4KIAogICAgICAgICBSdW50aW1lIGZlYXR1cmUgZmxhZyBmb3IgU2VydmVyLVRp
bWluZwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2Vi
Q29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjMyMTc1
KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW8KICAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFBy
b3RvY29sSG9zdDsKIAogICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIFN0cmlu
ZyBob3N0TmFtZSA9IHVybC5ob3N0KCk7CisgICAgU3RyaW5nIGhvc3ROYW1lID0gdXJsLmhvc3Qo
KS50b1N0cmluZygpOwogICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IG1faG9zdHMuZ2V0KGhv
c3ROYW1lKTsKICAgICBpZiAoIWhvc3QgJiYgY3JlYXRlSG9zdFBvbGljeSA9PSBDcmVhdGVJZk5v
dEZvdW5kKSB7CiAgICAgICAgIGhvc3QgPSBuZXcgSG9zdEluZm9ybWF0aW9uKGhvc3ROYW1lLCBt
YXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzIxOTApCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wNS0yNSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVSTDo6aG9z
dCBzaG91bGQgcmV0dXJuIGEgU3RyaW5nVmlldyB0byByZWR1Y2UgYWxsb2NhdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTk4NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1VSTC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0Yp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZXEpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNTTEtl
eUdlbmVyYXRvclRlc3Q6OlRlYXJEb3duKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24gb2JqZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkwuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCBURVNUX0YoVVJMVGVzdCwgVVJMQ29uc3RydWN0b3JDb25zdENoYXIp
CiAgICAgRVhQRUNUX1RSVUUoa3VybC5pc1ZhbGlkKCkpOwogCiAgICAgRVhQRUNUX0VRKGt1cmwu
cHJvdG9jb2woKSA9PSAiaHR0cCIsIHRydWUpOwotICAgIEVYUEVDVF9FUShTdHJpbmcoInd3dy5l
eGFtcGxlLmNvbSIpLCBrdXJsLmhvc3QoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygid3d3LmV4
YW1wbGUuY29tIiksIGt1cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgIEVYUEVDVF9UUlVFKCEh
a3VybC5wb3J0KCkpOwogICAgIEVYUEVDVF9FUSg4MDgwLCBrdXJsLnBvcnQoKS52YWx1ZSgpKTsK
ICAgICBFWFBFQ1RfRVEoU3RyaW5nKCJ1c2VybmFtZSIpLCBrdXJsLnVzZXIoKSk7CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAkocmV2
aXNpb24gMjMyMTc1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgc3RydWN0IEV4cGVjdGVk
UGFydHMgewogICAgIH0KIH07CiAKLXN0YXRpYyBib29sIGVxKGNvbnN0IFN0cmluZyYgczEsIGNv
bnN0IFN0cmluZyYgczIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorYm9vbCBl
cShUJiYgczEsIFUmJiBzMikKIHsKICAgICBFWFBFQ1RfU1RSRVEoczEudXRmOCgpLmRhdGEoKSwg
czIudXRmOCgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIHMxLnV0ZjgoKSA9PSBzMi51dGY4KCk7CkBA
IC05MCw3ICs5MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3QK
IHsKICAgICBhdXRvIHVybCA9IFVSTChVUkwoKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBF
Q1RfVFJVRShlcShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOwor
ICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAg
IEVYUEVDVF9UUlVFKGVxKHBhcnRzLnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJV
RShlcShwYXJ0cy5wYXNzd29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBh
cnRzLmhvc3QsIHVybC5ob3N0KCkpKTsKQEAgLTExNyw3ICsxMTgsNyBAQCBzdGF0aWMgdm9pZCBj
aGVja1JlbGF0aXZlVVJMKGNvbnN0IFN0cmluCiB7CiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKFVS
TCgpLCBiYXNlVVJMU3RyaW5nKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVD
VF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9U
UlVFKGVxKHBhcnRzLnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
cy5wYXNzd29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLmhvc3Qs
IHVybC5ob3N0KCkpKTsKQEAgLTE0Niw3ICsxNDcsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1VSTERp
ZmZlcmVuY2VzKGNvbnN0IFN0CiAgICAgVU5VU0VEX1BBUkFNKHBhcnRzT2xkKTsgLy8gRklYTUU6
IFJlbW92ZSBhbGwgdGhlIG9sZCBleHBlY3RlZCBwYXJ0cy4KICAgICBhdXRvIHVybCA9IFVSTChV
UkwoKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5wcm90
b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBh
cnRzTmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBh
cnRzTmV3LnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5w
YXNzd29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3Lmhvc3Qs
IHVybC5ob3N0KCkpKTsKQEAgLTE3NSw3ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlbGF0
aXZlVVJMRGlmZmVyZW5jZXMoCiAgICAgVU5VU0VEX1BBUkFNKHBhcnRzT2xkKTsgLy8gRklYTUU6
IFJlbW92ZSBhbGwgdGhlIG9sZCBleHBlY3RlZCBwYXJ0cy4KICAgICBhdXRvIHVybCA9IFVSTChV
UkwoVVJMKCksIGJhc2VVUkxTdHJpbmcpLCB1cmxTdHJpbmcpOwogICAgIAotICAgIEVYUEVDVF9U
UlVFKGVxKHBhcnRzTmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmluZygpKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpKSk7CiAg
ICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcudXNlciwgdXJsLnVzZXIoKSkpOwogICAgIEVYUEVD
VF9UUlVFKGVxKHBhcnRzTmV3LnBhc3N3b3JkLCB1cmwucGFzcygpKSk7CiAgICAgRVhQRUNUX1RS
VUUoZXEocGFydHNOZXcuaG9zdCwgdXJsLmhvc3QoKSkpOwpAQCAtMjEzLDcgKzIxNCw3IEBAIHN0
YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3QKIHsKICAgICBVUkxQYXJzZXIg
cGFyc2VyKHVybFN0cmluZywgeyB9LCBlbmNvZGluZyk7CiAgICAgYXV0byB1cmwgPSBwYXJzZXIu
cmVzdWx0KCk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5wcm90b2Nv
bCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2NvbCwgdXJs
LnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCB1cmwudXNlcigp
KSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFzc3dvcmQsIHVybC5wYXNzKCkpKTsKICAg
ICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgpKSk7CkBAIC0yMzksNyArMjQw
LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tVUkwoY29uc3QgU3RyaW5nJiB1cmxTdAogICAgIFVSTFBh
cnNlciBiYXNlUGFyc2VyKGJhc2VVUkxTdHJpbmcsIHsgfSwgZW5jb2RpbmcpOwogICAgIFVSTFBh
cnNlciBwYXJzZXIodXJsU3RyaW5nLCBiYXNlUGFyc2VyLnJlc3VsdCgpLCBlbmNvZGluZyk7CiAg
ICAgYXV0byB1cmwgPSBwYXJzZXIucmVzdWx0KCk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMu
cHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShw
YXJ0cy51c2VyLCB1cmwudXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFzc3dv
cmQsIHVybC5wYXNzKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwuaG9z
dCgpKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0
b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5
R2VuZXJhdG9yLm1tCShyZXZpc2lvbiAyMzIxNzUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4Mywx
MiBAQCBwdWJsaWM6CiAgICAgICAgIFNlY0l0ZW1EZWxldGUoKF9fYnJpZGdlIENGRGljdGlvbmFy
eVJlZikgQHsKICAgICAgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCiAg
ICAgICAgICAgICAoaWQpa1NlY0F0dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQcml2
YXRlLAotICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdlYkNvcmU6OmtleWdlbktleWNo
YWluSXRlbU5hbWUodXJsLmhvc3QoKSksCisgICAgICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDog
V2ViQ29yZTo6a2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9zdCgpLnRvU3RyaW5nKCkpLAog
ICAgICAgICB9KTsKICAgICAgICAgU2VjSXRlbURlbGV0ZSgoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5
UmVmKSBAewogICAgICAgICAgICAgKGlkKWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tleSwKICAg
ICAgICAgICAgIChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1B1Ymxp
YywKLSAgICAgICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBXZWJDb3JlOjprZXlnZW5LZXljaGFp
bkl0ZW1OYW1lKHVybC5ob3N0KCkpLAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdl
YkNvcmU6OmtleWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmluZygpKSwKICAg
ICAgICAgfSk7CiAgICAgfQogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341308</attachid>
            <date>2018-05-25 12:15:06 -0700</date>
            <delta_ts>2018-05-25 12:32:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185986-20180525121504.patch</filename>
            <type>text/plain</type>
            <size>48106</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDE4LTA1LTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0
IHNob3VsZCByZXR1cm4gYSBTdHJpbmdWaWV3IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJl
aGF2aW91ci4gIEp1c3QgZmV3ZXIgYWxsb2NhdGlvbnMuCisKKyAgICAgICAgKiBNb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
WW91VHViZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVS
TCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpob3N0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXRIYW5kc2hha2U6Omhvc3QgY29uc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb246OnBvcHVsYXRlQ29uZGl0aW9uQ2FjaGVJZk5lZWRlZCk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVNl
c3Npb25UaXRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZWVkc1NlZWtpbmdTdXBwb3J0
UXVpcmspOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJ
bnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXNlckRpZENs
aWNrU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6ZmluaXNoZWRQYXJz
aW5nKToKKyAgICAgICAgKiBodG1sL1VSTFV0aWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpVUkxV
dGlsczxUPjo6aG9zdG5hbWUgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpw
cmltYXJ5RG9tYWluKToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1t
OgorICAgICAgICAoc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5cGUpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6bW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQpOgorICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYXRpb246Omhvc3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQpOgorICAgICAgICAq
IHBhZ2UvUGVyZm9ybWFuY2VNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydFBh
Z2VPdmVyUG9zdExvYWRSZXNvdXJjZVRocmVzaG9sZCk6CisgICAgICAgICogcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0xvb3BiYWNrSVBBZGRyZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFk
ZHJlc3MpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwYWdl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tVVJMKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNIb3N0IGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlOjpob3N0TWF0
Y2hlcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vUHVibGljU3VmZml4Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6aG9zdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpVUkw6Omhvc3RBbmRQb3J0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlVSTDo6aXNNYXRjaGluZ0RvbWFpbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
VVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpyZWdpc3RyYWJsZURvbWFpbnNBcmVFcXVhbCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRQYXJ0aXRpb25pbmdEb21haW4pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZVN0cmVhbXMpOgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246Omhv
c3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2VydmVyOjpwZXJmb3JtR2V0T3JpZ2luc1dpdGhS
ZWdpc3RyYXRpb25zQ2FsbGJhY2tzKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gb2JqZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFj
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIHN0YXRpYyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OktleVZhbHUKICAg
ICAKIHN0YXRpYyBib29sIGlzWW91VHViZVVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBTdHJp
bmcgaG9zdE5hbWUgPSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgp
OwogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0TmFtZSwgIm0u
eW91dHViZS5jb20iKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSho
b3N0TmFtZSwgInlvdXR1LmJlIikKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoaG9zdE5hbWUsICJ3d3cueW91dHViZS5jb20iKQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0
YXRpYyBVUkwgcHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwoY28KICAgICBpZiAoIWlzWW91VHVi
ZVVSTCh1cmwpKQogICAgICAgICByZXR1cm4gVVJMKCk7CiAKLSAgICBTdHJpbmcgaG9zdE5hbWUg
PSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgpOwogICAgIGJvb2wg
aXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
aG9zdE5hbWUsICJtLnlvdXR1YmUuY29tIik7CiAgICAgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0g
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdE5hbWUsICJ5b3V0dS5iZSIpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBVUkwmIHVybCwg
YgogewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygid3NzIikgPT0gc2VjdXJlKTsKICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQodXJsLmhvc3QoKS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCh1cmwuaG9zdCgpLnRv
U3RyaW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgaWYgKHVybC5wb3J0KCkg
JiYgKCghc2VjdXJlICYmIHVybC5wb3J0KCkudmFsdWUoKSAhPSA4MCkgfHwgKHNlY3VyZSAmJiB1
cmwucG9ydCgpLnZhbHVlKCkgIT0gNDQzKSkpIHsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJzon
KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodXJsLnBvcnQoKS52YWx1ZSgpKTsKQEAg
LTE0Niw3ICsxNDYsNyBAQCB2b2lkIFdlYlNvY2tldEhhbmRzaGFrZTo6c2V0VVJMKGNvbnN0IFVS
CiAvLyBGSVhNRTogUmV0dXJuIHR5cGUgc2hvdWxkIGp1c3QgYmUgU3RyaW5nLCBub3QgY29uc3Qg
U3RyaW5nLgogY29uc3QgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6aG9zdCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fdXJsLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAg
IHJldHVybiBtX3VybC5ob3N0KCkudG9TdHJpbmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OwogfQogCiBjb25zdCBTdHJpbmcmIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50UHJvdG9jb2wo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uOjpwb3B1bGF0ZUNvbmRp
dGlvbgogICAgIGlmIChtX2NhY2hlZFRvcFVSTCAhPSB0b3BVUkwpIHsKICAgICAgICAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT50b3BVUkxG
aWx0ZXJzQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+dG9wVVJMRmlsdGVyc0J5dGVj
b2RlTGVuZ3RoKCkpOwogICAgICAgICBjb25zdCB1aW50MTZfdCBhbGxMb2FkVHlwZXNBbmRSZXNv
dXJjZVR5cGVzID0gTG9hZFR5cGVNYXNrIHwgUmVzb3VyY2VUeXBlTWFzazsKLSAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbigpID8gdG9wVVJMLmhvc3QoKSA6IHRvcFVSTC5zdHJpbmcoKTsKKyAgICAgICAgU3RyaW5n
IHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bigpID8gdG9wVVJMLmhvc3QoKS50b1N0cmluZygpIDogdG9wVVJMLnN0cmluZygpOwogICAgICAg
ICBhdXRvIHRvcFVSTEFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQoc3RyaW5nLnV0Zjgo
KSwgYWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBlcyk7CiAgICAgICAgIAogICAgICAgICBtX2Nh
Y2hlZFRvcFVSTEFjdGlvbnMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw3
IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgICAg
IFN0cmluZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFs
dWUpOwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVuYWJsZWQoKSAm
JiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJc0lu
SFRUUEZhbWlseShwYXJzZWRVUkwpIHx8IHBhcnNlZFVSTC5zdGFydHNXaXRoKCIvLyIpKQotICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnBy
ZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkpOworICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnBy
ZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkudG9TdHJp
bmcoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0ZUNhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYxLDcgKzc0NjEsNyBAQCBTdHJp
bmcgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNzaW9uVGl0CiAgICAgaWYgKCF0aXRsZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKIAotICAgIHRpdGxlID0gbV9jdXJyZW50U3Jj
Lmhvc3QoKTsKKyAgICB0aXRsZSA9IG1fY3VycmVudFNyYy5ob3N0KCkudG9TdHJpbmcoKTsKICNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKICAgICBpZiAoIXRpdGxlLmlzRW1wdHko
KSkKICAgICAgICAgdGl0bGUgPSBkZWNvZGVIb3N0TmFtZSh0aXRsZSk7CkBAIC03NTI0LDcgKzc1
MjQsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1NlZWtpbmdTdXBwb3J0UXVpcmsoRG9jCiAgICAgaWYg
KCFkb2N1bWVudC5zZXR0aW5ncygpLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQo
KS51cmwoKS5ob3N0KCk7CisgICAgYXV0byBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51
cmwoKS5ob3N0KCk7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhv
c3QsICJuZXRmbGl4LmNvbSIpIHx8IGhvc3QuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiLm5l
dGZsaXguY29tIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcg
KzQzNSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWkKICAgICAv
LyBSZXN0YXJ0IGFueSBvdGhlciBzbmFwc2hvdHRlZCBwbHVnaW5zIGluIHRoZSBwYWdlIHdpdGgg
dGhlIHNhbWUgb3JpZ2luLiBOb3RlIHRoYXQgdGhleQogICAgIC8vIG1heSBiZSBpbiBkaWZmZXJl
bnQgZnJhbWVzLCBzbyB0cmF2ZXJzZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LgogCi0g
ICAgU3RyaW5nIHBsdWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKKyAgICBhdXRvIHBs
dWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBz
ZXJ2aWNlVHlwZSgpOwogICAgIFZlY3RvcjxSZWY8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4+IHNp
bWlsYXJQbHVnaW5zOwogCkBAIC00NjksOSArNDY5LDkgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Ojp1c2VyRGlkQ2xpYwogICAgIGlmIChmb3J3YXJkRXZlbnQpCiAgICAgICAgIG1fcGVu
ZGluZ0NsaWNrRXZlbnRGcm9tU25hcHNob3QgPSAmZXZlbnQ7CiAKLSAgICBTdHJpbmcgcGx1Z0lu
T3JpZ2luID0gbV9sb2FkZWRVcmwuaG9zdCgpOworICAgIGF1dG8gcGx1Z0luT3JpZ2luID0gbV9s
b2FkZWRVcmwuaG9zdCgpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiAhU2NoZW1lUmVn
aXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChkb2N1bWVudCgpLnBhZ2UoKS0+bWFp
bkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0
Q29weWluZygpKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+c2V0dGluZ3MoKS5hdXRvc3RhcnRPcmln
aW5QbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkucGFnZSgp
LT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCkucGFnZSgpLT5t
YWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLCBwbHVnSW5PcmlnaW4sIHNl
cnZpY2VUeXBlKCksIGRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CisgICAgICAgIGRv
Y3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3Vt
ZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRv
U3RyaW5nKCksIHBsdWdJbk9yaWdpbi50b1N0cmluZygpLCBzZXJ2aWNlVHlwZSgpLCBkb2N1bWVu
dCgpLnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwogCiAgICAgTE9HKFBsdWdpbnMsICIlcCBVc2VyIGNs
aWNrZWQgb24gc25hcHNob3R0ZWQgcGx1Zy1pbi4gUmVzdGFydC4iLCB0aGlzKTsKICAgICByZXN0
YXJ0U25hcHNob3R0ZWRQbHVnSW4oKTsKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9hCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPnNldHRpbmdzKCkuYXV0b3N0YXJ0T3JpZ2luUGx1Z0lu
U25hcHNob3R0aW5nRW5hYmxlZCgpICYmIGRvY3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQo
KSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9TdGFydEZy
b21PcmlnaW4oZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VV
UkwoKS5ob3N0KCksIHVybC5ob3N0KCksIHNlcnZpY2VUeXBlKCkpKSB7CisgICAgaWYgKGRvY3Vt
ZW50KCkucGFnZSgpLT5zZXR0aW5ncygpLmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGlu
Z0VuYWJsZWQoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCkgJiYgZG9jdW1l
bnQoKS5wYWdlKCktPnBsdWdJbkNsaWVudCgpLT5zaG91bGRBdXRvU3RhcnRGcm9tT3JpZ2luKGRv
Y3VtZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgp
LnRvU3RyaW5nKCksIHVybC5ob3N0KCkudG9TdHJpbmcoKSwgc2VydmljZVR5cGUoKSkpIHsKICAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRv
IGF1dG8tc3RhcnQsIHNldCB0byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS5wYWdlKCktPm1haW5G
cmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLmhv
c3QoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJT
bmFwc2hvdDsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBJbWFn
ZURvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUg
aG9zdG5hbWUgaWYgdGhlcmUgaXMgbm8gcGF0aC4KICAgICAgICAgICAgIFN0cmluZyBuYW1lID0g
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogICAg
ICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG5hbWUgPSB1cmwo
KS5ob3N0KCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IHVybCgpLmhvc3QoKS50b1N0cmluZygp
OwogICAgICAgICAgICAgc2V0VGl0bGUoaW1hZ2VUaXRsZShuYW1lLCBzaXplKSk7CiAgICAgICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMVXRpbHMuaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2
LDcgQEAgdm9pZCBVUkxVdGlsczxUPjo6c2V0SG9zdChjb25zdCBTdHJpbmcmIAogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiBTdHJpbmcgVVJMVXRpbHM8VD46Omhvc3RuYW1lKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaHJlZigpLmhvc3QoKTsKKyAgICByZXR1cm4gaHJlZigpLmhvc3QoKS50b1N0cmlu
ZygpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZQogICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCZtX2ZyYW1lKSkKICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlG
b3JDb29raWVzKHVybCk7CiAKLSAgICBTdHJpbmcgcmVnaXN0cmFibGVEb21haW4gPSBSZXNvdXJj
ZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUodXJsLmhvc3QoKSk7CisgICAgU3RyaW5nIHJlZ2lzdHJh
YmxlRG9tYWluID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKHVybC5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKSB7CiAgICAgICAgIGlmIChT
ZWN1cml0eVBvbGljeTo6c2hvdWxkSW5oZXJpdFNlY3VyaXR5T3JpZ2luRnJvbU93bmVyKGZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKSkgfHwgcmVnaXN0cmFibGVEb21haW5zQXJlRXF1YWwoZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpLCByZWdpc3RyYWJsZURvbWFpbikpCiAgICAgICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvclNhbWVTaXRlQ29va2llcyh1cmwpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTQsNyArMjk0LDcgQEAgYm9vbCBMaW5rTG9hZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQog
ICAgICAgICAvLyBGSVhNRTogVGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSBsaW5rIGVsZW1lbnQg
Y2FuIGJlIGluICIvL2hvc3RuYW1lIiBmb3JtLCBhbmQgd2Ugc2hvdWxkbid0IGF0dGVtcHQKICAg
ICAgICAgLy8gdG8gY29tcGxldGUgdGhhdCBhcyBVUkwgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODg1Nz4uCiAgICAgICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygp
LmRuc1ByZWZldGNoaW5nRW5hYmxlZCgpICYmIGhyZWYuaXNWYWxpZCgpICYmICFocmVmLmlzRW1w
dHkoKSAmJiBkb2N1bWVudC5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQuZnJhbWUoKS0+
bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0KCkpOworICAgICAgICAgICAg
ZG9jdW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0
KCkudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgcHJlY29ubmVjdElmTmVlZGVkKHJlbEF0dHJp
YnV0ZSwgaHJlZiwgZG9jdW1lbnQsIGNyb3NzT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIzMjE3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6bWVyZ2UoY29uc3QKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1h
cnlEb21haW4oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJs
Lmhvc3QoKSk7CisgICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKS50b1N0cmluZygp
KTsKIH0KIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oY29u
c3QgU3RyaW5nJiBob3N0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJO
U1VSTEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0xv
YWRlck5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZSgKIAogICAgIGlm
IChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwIHx8IFtsYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsVG9T
dHJpbmc6QCIvIl0pIHsKICAgICAgICAgLy8gbGFzdFBhdGhDb21wb25lbnQgaXMgbm8gZ29vZCwg
dHJ5IHRoZSBob3N0LgotICAgICAgICBOU1N0cmluZyAqaG9zdCA9IFVSTCh1cmwpLmhvc3QoKTsK
KyAgICAgICAgTlNTdHJpbmcgKmhvc3QgPSBVUkwodXJsKS5ob3N0KCkudG9TdHJpbmcoKTsKICAg
ICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMoaG9zdCk7
CiAgICAgICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBD
YW4ndCBtYWtlIGEgZmlsZW5hbWUgdXNpbmcgdGhpcyBVUkwsIHVzZSAidW5rbm93biIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lk
IENocm9tZTo6c2V0U3RhdHVzYmFyVGV4dChGcmFtZSYgZnJhCiB2b2lkIENocm9tZTo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBt
b2RpZmllckZsYWdzKQogewogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkgJiYgcmVzdWx0Lmlu
bmVyTm9kZSgpLT5kb2N1bWVudCgpLmlzRE5TUHJlZmV0Y2hFbmFibGVkKCkpCi0gICAgICAgIG1f
cGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhyZXN1bHQuYWJz
b2x1dGVMaW5rVVJMKCkuaG9zdCgpKTsKKyAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRl
cigpLmNsaWVudCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCku
dG9TdHJpbmcoKSk7CiAgICAgbV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0
LCBtb2RpZmllckZsYWdzKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQobV9wYWdlLCByZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFN0
cmluZyBMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAogICAgIGlmICghbV9mcmFtZSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybCgpLmhvc3QoKTsKKyAgICByZXR1
cm4gdXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBMb2NhdGlvbjo6cG9ydCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDQsNyArMjEwNCw3
IEBAIHZvaWQgUGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQoY29uc3QgVVIKIHsKICAgICBTdHJp
bmcgZG9tYWluOwogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0gICAgZG9tYWluID0g
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkZXN0aW5hdGlvblVSTC5ob3N0KCkpOworICAg
IGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oZGVzdGluYXRpb25VUkwuaG9z
dCgpLnRvU3RyaW5nKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTW9uaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZU1vbml0b3Iu
Y3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
TW9uaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgdm9p
ZCByZXBvcnRQYWdlT3ZlclBvc3RMb2FkUmVzb3VyCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKSk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKS50b1N0cmluZygp
KTsKICAgICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjbwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNMb29wYmFja0lQQWRkcmVzcyhj
b25zdCBTdHJpbmcmIGhvc3QpCitzdGF0aWMgYm9vbCBpc0xvb3BiYWNrSVBBZGRyZXNzKFN0cmlu
Z1ZpZXcgaG9zdCkKIHsKICAgICAvLyBUaGUgSVB2NiBsb29wYmFjayBhZGRyZXNzIGlzIDA6MDow
OjA6MDowOjA6MSwgd2hpY2ggY29tcHJlc3NlcyB0byA6OjEuCiAgICAgaWYgKGhvc3QgPT0gIls6
OjFdIikKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdEFzUG90ZW50
aWFsbHlUcnVzCiAKIGJvb2wgc2hvdWxkVHJlYXRBc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY29u
c3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0
d29ydGh5KHVybC5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3Qo
KSk7CisgICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5w
cm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3QoKS50b1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCkpOwogfQogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29u
c3QgVVJMJiB1cmwpCkBAIC01NDgsNyArNTQ4LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNT
YW1lU2NoZW1lSG9zdFBvcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNlY3VyaXR5T3Jp
Z2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KQor
Ym9vbCBTZWN1cml0eU9yaWdpbjo6aXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKFN0cmlu
Z1ZpZXcgaG9zdCkKIHsKICAgICBpZiAoaXNMb29wYmFja0lQQWRkcmVzcyhob3N0KSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShy
ZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
UG90ZW50aWFsbHlUcnVzdHdvcnRoeSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQb3RlbnRpYWxseVRy
dXN0d29ydGh5OyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFk
ZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9y
TG9vcGJhY2tJUEFkZHJlc3MoU3RyaW5nVmlldyk7CiAKICAgICBjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw3IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIHsKICAgICAgICAg
cmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAgICAgICAgICAgICB1cmwucHJvdG9jb2woKS5p
c051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB1cmwucHJvdG9jb2woKS50b1N0cmluZygpLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCksCi0gICAgICAgICAgICB1cmwuaG9zdCgpLmlzTnVsbCgpID8g
ZW1wdHlTdHJpbmcoKSA6IHVybC5ob3N0KCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSwKKyAg
ICAgICAgICAgIHVybC5ob3N0KCkuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdXJsLmhvc3Qo
KS50b1N0cmluZygpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCksCiAgICAgICAgICAgICB1cmwu
cG9ydCgpCiAgICAgICAgIH07CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
Q29udGVudFVSTFBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXMoY29ucwog
CiBib29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc0hvc3QoY29uc3QgVVJMJiB0ZXN0
KSBjb25zdAogewotICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IHRlc3QuaG9zdCgpOworICAgIGF1
dG8gaG9zdCA9IHRlc3QuaG9zdCgpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGhv
c3QsIG1faG9zdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OnNjaGVtZQogCiBib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZTo6aG9zdE1hdGNoZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7Ci0g
ICAgY29uc3QgU3RyaW5nJiBob3N0ID0gdXJsLmhvc3QoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShob3N0LCBtX2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0
LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIi4iICsgbV9ob3N0KSk7CisgICAgYXV0byBob3N0
ID0gdXJsLmhvc3QoKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShob3N0LCBt
X2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UobWFrZVN0cmluZygiLiIsIG1faG9zdCkpKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUHVibGljU3VmZml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIz
LDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFB1YmxpY1N1ZmZpeF9oCi0jZGVmaW5lIFB1YmxpY1N1ZmZpeF9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSw1ICszOCwzIEBAIFN0cmlu
ZyBkZWNvZGVIb3N0TmFtZShjb25zdCBTdHJpbmcmIGRvbWEKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0KLSNlbmRpZiAvLyBQ
dWJsaWNTdWZmaXhfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCShyZXZpc2lvbiAyMzIx
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsMTAgKzE1NSwxMCBAQCBTdHJpbmdWaWV3IFVSTDo6cHJvdG9jb2woKSBjb25zdAogICAg
IHJldHVybiBTdHJpbmdWaWV3KG1fc3RyaW5nKS5zdWJzdHJpbmcoMCwgbV9zY2hlbWVFbmQpOwog
fQogCi1TdHJpbmcgVVJMOjpob3N0KCkgY29uc3QKK1N0cmluZ1ZpZXcgVVJMOjpob3N0KCkgY29u
c3QKIHsKICAgICB1bnNpZ25lZCBzdGFydCA9IGhvc3RTdGFydCgpOwotICAgIHJldHVybiBtX3N0
cmluZy5zdWJzdHJpbmcoc3RhcnQsIG1faG9zdEVuZCAtIHN0YXJ0KTsKKyAgICByZXR1cm4gU3Ry
aW5nVmlldyhtX3N0cmluZykuc3Vic3RyaW5nKHN0YXJ0LCBtX2hvc3RFbmQgLSBzdGFydCk7CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IFVSTDo6cG9ydCgpIGNvbnN0CkBAIC0xODAsOCAr
MTgwLDggQEAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gVVJMOjpwb3J0KCkgY29ucwogU3RyaW5n
IFVSTDo6aG9zdEFuZFBvcnQoKSBjb25zdAogewogICAgIGlmIChhdXRvIHBvcnQgPSB0aGlzLT5w
b3J0KCkpCi0gICAgICAgIHJldHVybiBob3N0KCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0
LnZhbHVlKCkpOwotICAgIHJldHVybiBob3N0KCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KGhvc3QoKSwgJzonLCBTdHJpbmc6Om51bWJlcihwb3J0LnZhbHVlKCkpKTsKKyAgICByZXR1cm4g
aG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBVUkw6OnByb3RvY29sSG9zdEFuZFBvcnQo
KSBjb25zdApAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgVVJMOjppc01hdGNoaW5nRG9tYWluKGNv
bnN0IFN0cmluZyYKICAgICBpZiAoIWhvc3QuZW5kc1dpdGgoZG9tYWluKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhvc3QubGVuZ3RoKCkgPT0gZG9tYWluLmxlbmd0aCgp
IHx8IGhvc3QuY2hhcmFjdGVyQXQoaG9zdC5sZW5ndGgoKSAtIGRvbWFpbi5sZW5ndGgoKSAtIDEp
ID09ICcuJzsKKyAgICByZXR1cm4gaG9zdC5sZW5ndGgoKSA9PSBkb21haW4ubGVuZ3RoKCkgfHwg
aG9zdFtob3N0Lmxlbmd0aCgpIC0gZG9tYWluLmxlbmd0aCgpIC0gMV0gPT0gJy4nOwogfQogCiBT
dHJpbmcgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIGlucHV0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGgodW5zaWduZWQgbGVuZ3RoID0gMTAyNCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmdWaWV3IHByb3RvY29sKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGhvc3QoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmdWaWV3IGhvc3QoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGhvc3RBbmRQb3J0KCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHByb3RvY29sSG9zdEFuZFBvcnQoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5t
bQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtl
eUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIFN0cmlu
ZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKIAogICAgIGF1dG8gY2hhbGxlbmdl
ID0gY2hhbGxlbmdlU3RyaW5nLmlzQWxsQVNDSUkoKSA/IGNoYWxsZW5nZVN0cmluZy5hc2NpaSgp
IDogIiI7CiAKLSAgICByZXR1cm4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtl
eVNpemUsIGNoYWxsZW5nZSwga2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9zdCgpKSk7Cisg
ICAgcmV0dXJuIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplLCBjaGFs
bGVuZ2UsIGtleWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmluZygpKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1
ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjU1LDExICsyNTUsMTEgQEAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0
IFJlcwogLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgZm9yIHRoZXNlIGZ1bmN0aW9ucy4K
IGlubGluZSBib29sIHJlZ2lzdHJhYmxlRG9tYWluc0FyZUVxdWFsKGNvbnN0IFVSTCYgYSwgY29u
c3QgVVJMJiBiKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25O
YW1lKGEuaG9zdCgpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGIuaG9z
dCgpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6cGFydGl0aW9uTmFtZShhLmhv
c3QoKS50b1N0cmluZygpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGIu
aG9zdCgpLnRvU3RyaW5nKCkpOwogfQogaW5saW5lIGJvb2wgcmVnaXN0cmFibGVEb21haW5zQXJl
RXF1YWwoY29uc3QgVVJMJiBhLCBjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluKQogewot
ICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGEuaG9zdCgpKSA9
PSByZWdpc3RyYWJsZURvbWFpbjsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6cGFy
dGl0aW9uTmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSByZWdpc3RyYWJsZURvbWFpbjsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGEsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgYikgeyByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZXF1YWwo
YSwgYik7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCShyZXZpc2lv
biAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDExICsxOTgsMTEg
QEAgU3RyaW5nIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llU3Rvcgogc3RhdGljIGlubGlu
ZSBTdHJpbmcgZ2V0UGFydGl0aW9uaW5nRG9tYWluKGNvbnN0IFVSTCYgdXJsKSAKIHsKICNpZiBF
TkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQotICAgIGF1dG8gZG9tYWluID0gdG9wUHJpdmF0ZWx5
Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBhdXRvIGRvbWFpbiA9IHRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBpZiAoZG9t
YWluLmlzRW1wdHkoKSkKLSAgICAgICAgZG9tYWluID0gdXJsLmhvc3QoKTsKKyAgICAgICAgZG9t
YWluID0gdXJsLmhvc3QoKS50b1N0cmluZygpOwogI2Vsc2UKLSAgICBhdXRvIGRvbWFpbiA9IHVy
bC5ob3N0KCk7CisgICAgYXV0byBkb21haW4gPSB1cmwuaG9zdCgpLnRvU3RyaW5nKCk7CiAjZW5k
aWYKICAgICByZXR1cm4gZG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1w
bENGTmV0LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGVT
dHJlYQogICAgIGlmIChtX2Nvbm5lY3Rpb25UeXBlID09IFVua25vd24pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9IG1fdXJsLmhvc3QoKS5jcmVh
dGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9IG1fdXJsLmhv
c3QoKS50b1N0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICAgICAvLyBDcmVhdGluZyBzdHJl
YW1zIHRvIGZpbmFsIGRlc3RpbmF0aW9uLCBub3QgdG8gcHJveHkuCiAgICAgQ0ZSZWFkU3RyZWFt
UmVmIHJlYWRTdHJlYW0gPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0Nvb2tpZUphckRCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9vbCBDb29raWVKYXJEQjo6c2VhcmNoQ29v
a2llcyhjb25zdCBTdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBVUkwgcmVxdWVzdFVy
bE9iaihQYXJzZWRVUkxTdHJpbmcsIHJlcXVlc3RVcmwpOwotICAgIFN0cmluZyByZXF1ZXN0SG9z
dChyZXF1ZXN0VXJsT2JqLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICBT
dHJpbmcgcmVxdWVzdEhvc3QocmVxdWVzdFVybE9iai5ob3N0KCkudG9TdHJpbmcoKS5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpKTsKICAgICBTdHJpbmcgcmVxdWVzdFBhdGgocmVxdWVzdFVybE9i
ai5wYXRoKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAKICAgICBpZiAocmVxdWVzdEhv
c3QuaXNFbXB0eSgpKQpAQCAtMzgyLDcgKzM4Miw3IEBAIGludCBDb29raWVKYXJEQjo6c2V0Q29v
a2llKGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgVVJMIHVybE9iaihQ
YXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgU3RyaW5nIGhvc3QodXJsT2JqLmhvc3QoKSk7Cisg
ICAgU3RyaW5nIGhvc3QodXJsT2JqLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBTdHJpbmcgcGF0
aCh1cmxPYmoucGF0aCgpKTsKIAogICAgIENvb2tpZSBjb29raWVPYmo7CkBAIC00MTcsNyArNDE3
LDcgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3RyaQogCiAgICAgVVJM
IHVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHVybENvcGllZCk7CiAgICAgaWYgKHVybE9iai5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgU3RyaW5nIGhvc3RTdHIodXJsT2JqLmhvc3QoKSk7CisgICAgICAg
IFN0cmluZyBob3N0U3RyKHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7CiAgICAgICAgIFN0cmlu
ZyBwYXRoU3RyKHVybE9iai5wYXRoKCkpOwogICAgICAgICBpbnQgcmV0ID0gZGVsZXRlQ29va2ll
SW50ZXJuYWwobmFtZSwgaG9zdFN0ciwgcGF0aFN0cik7CiAgICAgICAgIEFTU0VSVChjaGVja1NR
TGl0ZVJldHVybkNvZGUocmV0LCBTUUxJVEVfRE9ORSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBAIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6aG9zdCgpIGNvbnN0CiAKIFN0cmluZyBX
b3JrZXJMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3VybC5ob3N0
KCk7CisgICAgcmV0dXJuIG1fdXJsLmhvc3QoKS50b1N0cmluZygpOwogfQogCiBTdHJpbmcgV29y
a2VyTG9jYXRpb246OnBvcnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9z
ZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBTV1NlcnZlcjo6cGVyZm9ybUdldE9y
aWdpbnNXaXRoUmVnaQogICAgIEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zV2l0
aFJlZ2lzdHJhdGlvbnM7CiAgICAgZm9yIChhdXRvJiBrZXkgOiBtX3JlZ2lzdHJhdGlvbnMua2V5
cygpKSB7CiAgICAgICAgIG9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucy5hZGQoa2V5LnRvcE9yaWdp
bigpKTsKLSAgICAgICAgb3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zLmFkZChTZWN1cml0eU9yaWdp
bkRhdGEgeyBrZXkuc2NvcGUoKS5wcm90b2NvbCgpLnRvU3RyaW5nKCksIGtleS5zY29wZSgpLmhv
c3QoKSwga2V5LnNjb3BlKCkucG9ydCgpIH0pOworICAgICAgICBvcmlnaW5zV2l0aFJlZ2lzdHJh
dGlvbnMuYWRkKFNlY3VyaXR5T3JpZ2luRGF0YSB7IGtleS5zY29wZSgpLnByb3RvY29sKCkudG9T
dHJpbmcoKSwga2V5LnNjb3BlKCkuaG9zdCgpLnRvU3RyaW5nKCksIGtleS5zY29wZSgpLnBvcnQo
KSB9KTsKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrcyA9IFdURk1vdmUobV9nZXRPcmlnaW5z
V2l0aFJlZ2lzdHJhdGlvbnNDYWxsYmFja3MpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3
NSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzIgQEAKKzIwMTgtMDUtMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBVUkw6Omhvc3Qgc2hvdWxkIHJldHVybiBhIFN0cmluZ1ZpZXcgdG8g
cmVkdWNlIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODU5ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjphcmVGcmFtZUFu
Y2VzdG9yc1NhbWVTaXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1By
b2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6Om92ZXJyaWRlU3lzdGVtUHJveGllcyk6Cisg
ICAgICAgICogU2hhcmVkL0FQSS9BUElVUkwuaDoKKyAgICAgICAgKEFQSTo6VVJMOjpob3N0IGNv
bnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVD
b29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9yRmFpbGVk
VG9MYXVuY2gpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkluZm9Qcm92aWRlcjo6cG9wdWxhdGVQ
bHVnaW5DYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpuZWVkc0hpZGRlbkNvbnRlbnRFZGl0YWJsZVF1aXJrKToKKyAgICAg
ICAgKFdlYktpdDo6bmVlZHNQbGFpblRleHRRdWlyayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmRldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBsdWdJbik6CisKIDIwMTgtMDUtMjQgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBwbHVnaW4g
c2VhcmNoIHBhdGggdG8gbG9vayBmb3IgdXNlciBpbnN0YWxsZWQgcGx1Z2lucwpJbmRleDogU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlz
aW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgc3RhdGljIHZvaWQgZmV0
Y2hEaXNrQ2FjaGVFbnRyaWVzKFBBTDo6UwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBh
dXRvIHVybCA9IHRyYXZlcnNhbEVudHJ5LT5lbnRyeS5yZXNwb25zZSgpLnVybCgpOwotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBvcmlnaW5zQW5kU2l6ZXMuYWRkKHt1cmwucHJvdG9jb2woKS50
b1N0cmluZygpLCB1cmwuaG9zdCgpLCB1cmwucG9ydCgpfSwgMCk7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IG9yaWdpbnNBbmRTaXplcy5hZGQoe3VybC5wcm90b2NvbCgpLnRvU3RyaW5nKCks
IHVybC5ob3N0KCkudG9TdHJpbmcoKSwgdXJsLnBvcnQoKX0sIDApOwogCiAgICAgICAgICAgICBp
ZiAoZmV0Y2hPcHRpb25zLmNvbnRhaW5zKFdlYnNpdGVEYXRhRmV0Y2hPcHRpb246OkNvbXB1dGVT
aXplcykpCiAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSArPSB0cmF2ZXJz
YWxFbnRyeS0+ZW50cnkuc291cmNlU3RvcmFnZVJlY29yZCgpLmhlYWRlci5zaXplKCkgKyB0cmF2
ZXJzYWxFbnRyeS0+cmVjb3JkSW5mby5ib2R5U2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlz
aW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDcgKzM2NCw3IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiBzdGF0aWMgYm9vbCBhcmVGcmFtZUFuY2VzdG9y
c1NhbWVTaXRlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBWZWN0b3I8
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIGZyYW1lQW5jZXN0b3JPcmlnaW5zKQogewogI2lmIEVO
QUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0gICAgYXV0byByZXNwb25zZVBhcnRpdGlvbiA9IFJl
c291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShyZXNwb25zZS51cmwoKS5ob3N0KCkpOworICAg
IGF1dG8gcmVzcG9uc2VQYXJ0aXRpb24gPSBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUo
cmVzcG9uc2UudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgIHJldHVybiBmcmFtZUFuY2Vz
dG9yT3JpZ2lucy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKICAgICAgICAg
cmV0dXJuIGl0ZW0tPmlzVW5pcXVlKCkgfHwgUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1l
KGl0ZW0tPmhvc3QoKSkgIT0gcmVzcG9uc2VQYXJ0aXRpb247CiAgICAgfSkgPT0gbm90Rm91bmQ7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3
b3JrUHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTcy
LDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgb3ZlcnJpZGVTeXN0ZW1Qcm94aWVzKGNvbnN0IAogICAg
IGlmICghaHR0cFByb3h5LmlzTnVsbCgpKSB7CiAgICAgICAgIFVSTCBodHRwUHJveHlVUkwoVVJM
KCksIGh0dHBQcm94eSk7CiAgICAgICAgIGlmIChodHRwUHJveHlVUkwuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgICAgICBbcHJveHlTZXR0aW5ncyBzZXRPYmplY3Q6bnNTdHJpbmdGcm9tV2ViQ29yZVN0
cmluZyhodHRwUHJveHlVUkwuaG9zdCgpKSBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1By
b3hpZXNIVFRQUHJveHldOworICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2JqZWN0Om5z
U3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoaHR0cFByb3h5VVJMLmhvc3QoKS50b1N0cmluZygpKSBm
b3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQUHJveHldOwogICAgICAgICAg
ICAgaWYgKGh0dHBQcm94eVVSTC5wb3J0KCkpIHsKICAgICAgICAgICAgICAgICBOU051bWJlciAq
cG9ydCA9IFtOU051bWJlciBudW1iZXJXaXRoSW50Omh0dHBQcm94eVVSTC5wb3J0KCkudmFsdWUo
KV07CiAgICAgICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2JqZWN0OnBvcnQgZm9yS2V5
OihOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFBvcnRdOwpAQCAtODYsNyArODYsNyBA
QCBzdGF0aWMgdm9pZCBvdmVycmlkZVN5c3RlbVByb3hpZXMoY29uc3QgCiAgICAgICAgIFVSTCBo
dHRwc1Byb3h5VVJMKFVSTCgpLCBodHRwc1Byb3h5KTsKICAgICAgICAgaWYgKGh0dHBzUHJveHlV
UkwuaXNWYWxpZCgpKSB7CiAjaWYgIUVOQUJMRShNSU5JTUFMX1NJTVVMQVRPUikKLSAgICAgICAg
ICAgIFtwcm94eVNldHRpbmdzIHNldE9iamVjdDpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGh0
dHBzUHJveHlVUkwuaG9zdCgpKSBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNI
VFRQU1Byb3h5XTsKKyAgICAgICAgICAgIFtwcm94eVNldHRpbmdzIHNldE9iamVjdDpuc1N0cmlu
Z0Zyb21XZWJDb3JlU3RyaW5nKGh0dHBzUHJveHlVUkwuaG9zdCgpLnRvU3RyaW5nKCkpIGZvcktl
eTooTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGllc0hUVFBTUHJveHldOwogICAgICAgICAgICAg
aWYgKGh0dHBzUHJveHlVUkwucG9ydCgpKSB7CiAgICAgICAgICAgICAgICAgTlNOdW1iZXIgKnBv
cnQgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpodHRwc1Byb3h5VVJMLnBvcnQoKS52YWx1ZSgp
XTsKICAgICAgICAgICAgICAgICBbcHJveHlTZXR0aW5ncyBzZXRPYmplY3Q6cG9ydCBmb3JLZXk6
KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQU1BvcnRdOwpJbmRleDogU291cmNlL1dl
YktpdC9TaGFyZWQvQVBJL0FQSVVSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL0FQSS9BUElVUkwuaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL0FQSVVSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
ICAgICBXVEY6OlN0cmluZyBob3N0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHBhcnNlVVJMSWZO
ZWNlc3NhcnkoKTsKLSAgICAgICAgcmV0dXJuIG1fcGFyc2VkVVJMLT5pc1ZhbGlkKCkgPyBtX3Bh
cnNlZFVSTC0+aG9zdCgpIDogV1RGOjpTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2Vk
VVJMLT5pc1ZhbGlkKCkgPyBtX3BhcnNlZFVSTC0+aG9zdCgpLnRvU3RyaW5nKCkgOiBXVEY6OlN0
cmluZygpOwogICAgIH0KIAogICAgIFdURjo6U3RyaW5nIHByb3RvY29sKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjMyMTc1
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTc5OSw3ICs1Nzk5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRU
ZXJtaW5hdGUoUAogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmIChtX3Byb2Nlc3MtPmlzVW5k
ZXJNZW1vcnlQcmVzc3VyZSgpKSB7Ci0gICAgICAgIFN0cmluZyBkb21haW4gPSBXZWJDb3JlOjp0
b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpQYXJzZWRV
UkxTdHJpbmcsIGN1cnJlbnRVUkwoKSkuaG9zdCgpKTsKKyAgICAgICAgU3RyaW5nIGRvbWFpbiA9
IFdlYkNvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oV2ViQ29yZTo6VVJMKFdlYkNv
cmU6OlBhcnNlZFVSTFN0cmluZywgY3VycmVudFVSTCgpKS5ob3N0KCkudG9TdHJpbmcoKSk7CiAg
ICAgICAgIGlmICghZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxvZ0RpYWdub3N0aWNN
ZXNzYWdlV2l0aEVuaGFuY2VkUHJpdmFjeShXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OmRvbWFpbkNhdXNpbmdKZXRzYW1LZXkoKSwgZG9tYWluLCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6
Ok5vKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lk
IFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0CiAjaWYgRU5BQkxFKFBVQkxJQ19T
VUZGSVhfTElTVCkKICAgICBpZiAocGFnZXMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgYXV0byYg
cGFnZSA9ICpwYWdlc1swXTsKLSAgICAgICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW4oV2ViQ29yZTo6VVJMKFdlYkNvcmU6OlBhcnNlZFVSTFN0cmluZywgcGFn
ZS5jdXJyZW50VVJMKCkpLmhvc3QoKSk7CisgICAgICAgIFN0cmluZyBkb21haW4gPSB0b3BQcml2
YXRlbHlDb250cm9sbGVkRG9tYWluKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJp
bmcsIHBhZ2UuY3VycmVudFVSTCgpKS5ob3N0KCkudG9TdHJpbmcoKSk7CiAgICAgICAgIGlmICgh
ZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHBhZ2UubG9nRGlhZ25vc3RpY01lc3NhZ2VX
aXRoRW5oYW5jZWRQcml2YWN5KFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6ZG9tYWlu
Q2F1c2luZ0NyYXNoS2V5KCksIGRvbWFpbiwgV2ViQ29yZTo6U2hvdWxkU2FtcGxlOjpObyk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzE3LDcgKzEzMTcsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjphZGRTaW5nbGVDb29rCiAKICAgICAvLyBJbmhlcml0IHRoZSBkb21haW4vaG9zdCBm
cm9tIHRoZSBtYWluIGZyYW1lJ3MgVVJMIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNldC4KICAg
ICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKLSAgICAgICAgZG9tYWluID0gYWN0aXZlVVJMLmhvc3Qo
KTsKKyAgICAgICAgZG9tYWluID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpOwogCiAgICAg
Y29va2llLmRvbWFpbiA9IGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoZG9tYWluKTsK
IApAQCAtMTM2MSw3ICsxMzYxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRl
QWxsQ29vawogICAgIEFTU0VSVChhY3RpdmVVUkwuaXNWYWxpZCgpKTsKIAogICAgIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZShwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIGRvbWFp
bkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoYWN0aXZlVVJMLmhvc3QoKSkpOworICAgIGNvb2tp
ZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShwYWdlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkuc2Vzc2lvbklEKCksIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoYWN0aXZlVVJM
Lmhvc3QoKS50b1N0cmluZygpKSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omdl
dFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBv
dXRfcGVybWlzc2lvbnMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MzEs
OCArMTgzMSw4IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnQKICAg
ICBtX2RpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwogCiAgICAgSFRNTFBsdWdJbklt
YWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFBsdWdJbkltYWdl
RWxlbWVudD4oKm1fcGx1Z2luRWxlbWVudCk7Ci0gICAgU3RyaW5nIHBhZ2VPcmlnaW4gPSBwbHVn
SW5JbWFnZUVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCkt
PmJhc2VVUkwoKS5ob3N0KCk7Ci0gICAgU3RyaW5nIHBsdWdpbk9yaWdpbiA9IHBsdWdJbkltYWdl
RWxlbWVudC5sb2FkZWRVcmwoKS5ob3N0KCk7CisgICAgU3RyaW5nIHBhZ2VPcmlnaW4gPSBwbHVn
SW5JbWFnZUVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCkt
PmJhc2VVUkwoKS5ob3N0KCkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgcGx1Z2luT3JpZ2luID0g
cGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZFVybCgpLmhvc3QoKS50b1N0cmluZygpOwogICAgIFN0
cmluZyBtaW1lVHlwZSA9IHBsdWdJbkltYWdlRWxlbWVudC5zZXJ2aWNlVHlwZSgpOwogCiAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbihw
YWdlT3JpZ2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlLCBwbHVnSW5JbWFnZUVsZW1lbnQuZG9j
dW1lbnQoKS5wYWdlKCktPnNlc3Npb25JRCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcAko
cmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2Vi
UGx1Z2luSW5mb1Byb3ZpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBA
IHZvaWQgV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpwb3B1bGF0ZVBsdWcKICAgICB9CiAKICNpZiBQ
TEFURk9STShNQUMpCi0gICAgU3RyaW5nIHBhZ2VIb3N0ID0gcGFnZS5tYWluRnJhbWUoKS5sb2Fk
ZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZVVSTCgpLmhvc3QoKTsKKyAgICBTdHJpbmcg
cGFnZUhvc3QgPSBwYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJl
c3BvbnNlVVJMKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgaWYgKHBhZ2VIb3N0LmlzTnVsbCgp
KQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBpbmZvIDogbV9jYWNoZWRQbHVnaW5z
KSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NDgsOCArNDg0OCw3IEBAIHN0YXRpYyBi
b29sIG5lZWRzSGlkZGVuQ29udGVudEVkaXRhYmxlUXUKICAgICBpZiAoIW5lZWRzUXVpcmtzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgaG9zdCA9IHVybC5ob3N0KCk7Ci0g
ICAgU3RyaW5nIHBhdGggPSB1cmwucGF0aCgpOworICAgIGF1dG8gaG9zdCA9IHVybC5ob3N0KCk7
CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhvc3QsICJkb2NzLmdv
b2dsZS5jb20iKTsKIH0KIApAQCAtNDg1OCw3ICs0ODU3LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNQ
bGFpblRleHRRdWlyayhib29sIG5lZQogICAgIGlmICghbmVlZHNRdWlya3MpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBob3N0ID0gdXJsLmhvc3QoKTsKKyAgICBhdXRvIGhv
c3QgPSB1cmwuaG9zdCgpOwogCiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGhvc3QsICJ0d2l0dGVyLmNvbSIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU0MzEsOCAr
NTQzMCw4IEBAIHZvaWQgV2ViUGFnZTo6ZGV0ZXJtaW5lUHJpbWFyeVNuYXBzaG90dGUKIAogICAg
IExPRyhQbHVnaW5zLCAiUHJpbWFyeSBQbHVnLUluIERldGVjdGlvbjogc3VjY2VzcyAtIGZvdW5k
IGEgY2FuZGlkYXRlIHBsdWctaW4gLSBpbmZvcm0gaXQuIik7CiAgICAgbV9kaWRGaW5kUHJpbWFy
eVNuYXBzaG90dGVkUGx1Z2luID0gdHJ1ZTsKLSAgICBtX3ByaW1hcnlQbHVnSW5QYWdlT3JpZ2lu
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpOwotICAg
IG1fcHJpbWFyeVBsdWdJbk9yaWdpbiA9IGNhbmRpZGF0ZVBsdWdJbi0+bG9hZGVkVXJsKCkuaG9z
dCgpOworICAgIG1fcHJpbWFyeVBsdWdJblBhZ2VPcmlnaW4gPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudG9TdHJpbmcoKTsKKyAgICBtX3ByaW1hcnlQ
bHVnSW5PcmlnaW4gPSBjYW5kaWRhdGVQbHVnSW4tPmxvYWRlZFVybCgpLmhvc3QoKS50b1N0cmlu
ZygpOwogICAgIG1fcHJpbWFyeVBsdWdJbk1pbWVUeXBlID0gY2FuZGlkYXRlUGx1Z0luLT5zZXJ2
aWNlVHlwZSgpOwogCiAgICAgY2FuZGlkYXRlUGx1Z0luLT5zZXRJc1ByaW1hcnlTbmFwc2hvdHRl
ZFBsdWdJbih0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzIxNzUp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDE4LTA1LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0IHNob3VsZCByZXR1cm4gYSBTdHJpbmdWaWV3
IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKToKKwog
MjAxOC0wNS0xMSAgQ2hhcmxlcyBWYXphYyAgPGN2YXphY0BnbWFpbC5jb20+CiAKICAgICAgICAg
UnVudGltZSBmZWF0dXJlIGZsYWcgZm9yIFNlcnZlci1UaW1pbmcKSW5kZXg6IFNvdXJjZS9XZWJL
aXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZv
cm1hdGlvCiAgICAgICAgIHJldHVybiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7CiAKICAgICBtX2hv
c3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBTdHJpbmcgaG9zdE5hbWUgPSB1cmwuaG9zdCgp
OworICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0KCkudG9TdHJpbmcoKTsKICAgICBIb3N0
SW5mb3JtYXRpb24qIGhvc3QgPSBtX2hvc3RzLmdldChob3N0TmFtZSk7CiAgICAgaWYgKCFob3N0
ICYmIGNyZWF0ZUhvc3RQb2xpY3kgPT0gQ3JlYXRlSWZOb3RGb3VuZCkgewogICAgICAgICBob3N0
ID0gbmV3IEhvc3RJbmZvcm1hdGlvbihob3N0TmFtZSwgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhv
c3QpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjMyMTkwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTgtMDUtMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVUkw6Omhvc3Qgc2hvdWxkIHJldHVybiBhIFN0cmlu
Z1ZpZXcgdG8gcmVkdWNlIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODU5ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkwuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmVxKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3Iu
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTU0xLZXlHZW5lcmF0b3JUZXN0OjpUZWFyRG93
bik6CisKIDIwMTgtMDUtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZWR1Y2UgY29weWluZyBvZiBGb250Q2FzY2FkZURlc2NyaXB0aW9uIG9iamVjdHMgYnkg
bW92aW5nIHRoZW0gYXJvdW5kCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvVVJMLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgVEVTVF9G
KFVSTFRlc3QsIFVSTENvbnN0cnVjdG9yQ29uc3RDaGFyKQogICAgIEVYUEVDVF9UUlVFKGt1cmwu
aXNWYWxpZCgpKTsKIAogICAgIEVYUEVDVF9FUShrdXJsLnByb3RvY29sKCkgPT0gImh0dHAiLCB0
cnVlKTsKLSAgICBFWFBFQ1RfRVEoU3RyaW5nKCJ3d3cuZXhhbXBsZS5jb20iKSwga3VybC5ob3N0
KCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoInd3dy5leGFtcGxlLmNvbSIpLCBrdXJsLmhvc3Qo
KS50b1N0cmluZygpKTsKICAgICBFWFBFQ1RfVFJVRSghIWt1cmwucG9ydCgpKTsKICAgICBFWFBF
Q1RfRVEoODA4MCwga3VybC5wb3J0KCkudmFsdWUoKSk7CiAgICAgRVhQRUNUX0VRKFN0cmluZygi
dXNlcm5hbWUiKSwga3VybC51c2VyKCkpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw4IEBAIHN0cnVjdCBFeHBlY3RlZFBhcnRzIHsKICAgICB9CiB9OwogCi1z
dGF0aWMgYm9vbCBlcShjb25zdCBTdHJpbmcmIHMxLCBjb25zdCBTdHJpbmcmIHMyKQordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2Jvb2wgZXEoVCYmIHMxLCBVJiYgczIpCiB7CiAg
ICAgRVhQRUNUX1NUUkVRKHMxLnV0ZjgoKS5kYXRhKCksIHMyLnV0ZjgoKS5kYXRhKCkpOwogICAg
IHJldHVybiBzMS51dGY4KCkgPT0gczIudXRmOCgpOwpAQCAtOTAsNyArOTEsNyBAQCBzdGF0aWMg
dm9pZCBjaGVja1VSTChjb25zdCBTdHJpbmcmIHVybFN0CiB7CiAgICAgYXV0byB1cmwgPSBVUkwo
VVJMKCksIHVybFN0cmluZyk7CiAgICAgCi0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9j
b2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51
c2VyLCB1cmwudXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFzc3dvcmQsIHVy
bC5wYXNzKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgpKSk7
CkBAIC0xMTcsNyArMTE4LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWxhdGl2ZVVSTChjb25zdCBT
dHJpbgogewogICAgIGF1dG8gdXJsID0gVVJMKFVSTChVUkwoKSwgYmFzZVVSTFN0cmluZyksIHVy
bFN0cmluZyk7CiAgICAgCi0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5w
cm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2Nv
bCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCB1cmwu
dXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFzc3dvcmQsIHVybC5wYXNzKCkp
KTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgpKSk7CkBAIC0xNDYs
NyArMTQ3LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tVUkxEaWZmZXJlbmNlcyhjb25zdCBTdAogICAg
IFVOVVNFRF9QQVJBTShwYXJ0c09sZCk7IC8vIEZJWE1FOiBSZW1vdmUgYWxsIHRoZSBvbGQgZXhw
ZWN0ZWQgcGFydHMuCiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CiAgICAg
Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRv
U3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5wcm90b2NvbCwgdXJsLnBy
b3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy51c2VyLCB1cmwudXNlcigp
KSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcucGFzc3dvcmQsIHVybC5wYXNzKCkpKTsK
ICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5ob3N0LCB1cmwuaG9zdCgpKSk7CkBAIC0xNzUs
NyArMTc2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWxhdGl2ZVVSTERpZmZlcmVuY2VzKAogICAg
IFVOVVNFRF9QQVJBTShwYXJ0c09sZCk7IC8vIEZJWE1FOiBSZW1vdmUgYWxsIHRoZSBvbGQgZXhw
ZWN0ZWQgcGFydHMuCiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKFVSTCgpLCBiYXNlVVJMU3RyaW5n
KSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5wcm90b2Nv
bCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
TmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
TmV3LnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5wYXNz
d29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3Lmhvc3QsIHVy
bC5ob3N0KCkpKTsKQEAgLTIxMyw3ICsyMTQsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1VSTChjb25z
dCBTdHJpbmcmIHVybFN0CiB7CiAgICAgVVJMUGFyc2VyIHBhcnNlcih1cmxTdHJpbmcsIHsgfSwg
ZW5jb2RpbmcpOwogICAgIGF1dG8gdXJsID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIEVYUEVDVF9U
UlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmluZygpKSk7CisgICAg
RVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpKSk7CiAgICAgRVhQ
RUNUX1RSVUUoZXEocGFydHMudXNlciwgdXJsLnVzZXIoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVx
KHBhcnRzLnBhc3N3b3JkLCB1cmwucGFzcygpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMu
aG9zdCwgdXJsLmhvc3QoKSkpOwpAQCAtMjM5LDcgKzI0MCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNr
VVJMKGNvbnN0IFN0cmluZyYgdXJsU3QKICAgICBVUkxQYXJzZXIgYmFzZVBhcnNlcihiYXNlVVJM
U3RyaW5nLCB7IH0sIGVuY29kaW5nKTsKICAgICBVUkxQYXJzZXIgcGFyc2VyKHVybFN0cmluZywg
YmFzZVBhcnNlci5yZXN1bHQoKSwgZW5jb2RpbmcpOwogICAgIGF1dG8gdXJsID0gcGFyc2VyLnJl
c3VsdCgpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2wo
KS50b1N0cmluZygpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5w
cm90b2NvbCgpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMudXNlciwgdXJsLnVzZXIoKSkp
OwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnBhc3N3b3JkLCB1cmwucGFzcygpKSk7CiAgICAg
RVhQRUNUX1RSVUUoZXEocGFydHMuaG9zdCwgdXJsLmhvc3QoKSkpOwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbQkocmV2aXNpb24g
MjMyMTc1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9y
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMsMTIgQEAgcHVibGljOgogICAgICAgICBT
ZWNJdGVtRGVsZXRlKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7CiAgICAgICAgICAgICAo
aWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAogICAgICAgICAgICAgKGlkKWtTZWNBdHRy
S2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0ZSwKLSAgICAgICAgICAgIChpZClr
U2VjQXR0ckxhYmVsOiBXZWJDb3JlOjprZXlnZW5LZXljaGFpbkl0ZW1OYW1lKHVybC5ob3N0KCkp
LAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdlYkNvcmU6OmtleWdlbktleWNoYWlu
SXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmluZygpKSwKICAgICAgICAgfSk7CiAgICAgICAgIFNl
Y0l0ZW1EZWxldGUoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKICAgICAgICAgICAgIChp
ZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCiAgICAgICAgICAgICAoaWQpa1NlY0F0dHJL
ZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQdWJsaWMsCi0gICAgICAgICAgICAoaWQpa1Nl
Y0F0dHJMYWJlbDogV2ViQ29yZTo6a2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9zdCgpKSwK
KyAgICAgICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBXZWJDb3JlOjprZXlnZW5LZXljaGFpbkl0
ZW1OYW1lKHVybC5ob3N0KCkudG9TdHJpbmcoKSksCiAgICAgICAgIH0pOwogICAgIH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341310</attachid>
            <date>2018-05-25 12:32:23 -0700</date>
            <delta_ts>2018-05-25 12:53:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185986-20180525123219.patch</filename>
            <type>text/plain</type>
            <size>49543</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDE4LTA1LTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0
IHNob3VsZCByZXR1cm4gYSBTdHJpbmdWaWV3IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJl
aGF2aW91ci4gIEp1c3QgZmV3ZXIgYWxsb2NhdGlvbnMuCisKKyAgICAgICAgKiBNb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
WW91VHViZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVS
TCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpob3N0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXRIYW5kc2hha2U6Omhvc3QgY29uc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb246OnBvcHVsYXRlQ29uZGl0aW9uQ2FjaGVJZk5lZWRlZCk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVNl
c3Npb25UaXRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZWVkc1NlZWtpbmdTdXBwb3J0
UXVpcmspOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJ
bnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXNlckRpZENs
aWNrU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6
c3ViZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6ZmluaXNoZWRQYXJz
aW5nKToKKyAgICAgICAgKiBodG1sL1VSTFV0aWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpVUkxV
dGlsczxUPjo6aG9zdG5hbWUgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOgorICAgICAgICAqIGxvYWRlci9MaW5rTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxpbmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpw
cmltYXJ5RG9tYWluKToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1t
OgorICAgICAgICAoc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5cGUpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6bW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQpOgorICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYXRpb246Omhvc3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQpOgorICAgICAgICAq
IHBhZ2UvUGVyZm9ybWFuY2VNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydFBh
Z2VPdmVyUG9zdExvYWRSZXNvdXJjZVRocmVzaG9sZCk6CisgICAgICAgICogcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0xvb3BiYWNrSVBBZGRyZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFk
ZHJlc3MpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwYWdl
L1NlY3VyaXR5T3JpZ2luRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tVVJMKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNIb3N0IGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlOjpob3N0TWF0
Y2hlcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vUHVibGljU3VmZml4Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6aG9zdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpVUkw6Omhvc3RBbmRQb3J0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlVSTDo6aXNNYXRjaGluZ0RvbWFpbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
VVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpyZWdpc3RyYWJsZURvbWFpbnNBcmVFcXVhbCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRQYXJ0aXRpb25pbmdEb21haW4pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZVN0cmVhbXMpOgorICAgICAgICAqIHdvcmtlcnMv
V29ya2VyTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246Omhv
c3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2VydmVyOjpwZXJmb3JtR2V0T3JpZ2luc1dpdGhS
ZWdpc3RyYXRpb25zQ2FsbGJhY2tzKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gb2JqZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFj
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2
LDcgKzE3Niw3IEBAIHN0YXRpYyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OktleVZhbHUKICAg
ICAKIHN0YXRpYyBib29sIGlzWW91VHViZVVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBTdHJp
bmcgaG9zdE5hbWUgPSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgp
OwogICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0TmFtZSwgIm0u
eW91dHViZS5jb20iKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSho
b3N0TmFtZSwgInlvdXR1LmJlIikKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoaG9zdE5hbWUsICJ3d3cueW91dHViZS5jb20iKQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0
YXRpYyBVUkwgcHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwoY28KICAgICBpZiAoIWlzWW91VHVi
ZVVSTCh1cmwpKQogICAgICAgICByZXR1cm4gVVJMKCk7CiAKLSAgICBTdHJpbmcgaG9zdE5hbWUg
PSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgpOwogICAgIGJvb2wg
aXNZb3VUdWJlTW9iaWxlV2ViQXBwVVJMID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
aG9zdE5hbWUsICJtLnlvdXR1YmUuY29tIik7CiAgICAgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0g
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdE5hbWUsICJ5b3V0dS5iZSIpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBVUkwmIHVybCwg
YgogewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygid3NzIikgPT0gc2VjdXJlKTsKICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQodXJsLmhvc3QoKS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCh1cmwuaG9zdCgpLnRv
U3RyaW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgaWYgKHVybC5wb3J0KCkg
JiYgKCghc2VjdXJlICYmIHVybC5wb3J0KCkudmFsdWUoKSAhPSA4MCkgfHwgKHNlY3VyZSAmJiB1
cmwucG9ydCgpLnZhbHVlKCkgIT0gNDQzKSkpIHsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJzon
KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodXJsLnBvcnQoKS52YWx1ZSgpKTsKQEAg
LTE0Niw3ICsxNDYsNyBAQCB2b2lkIFdlYlNvY2tldEhhbmRzaGFrZTo6c2V0VVJMKGNvbnN0IFVS
CiAvLyBGSVhNRTogUmV0dXJuIHR5cGUgc2hvdWxkIGp1c3QgYmUgU3RyaW5nLCBub3QgY29uc3Qg
U3RyaW5nLgogY29uc3QgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6aG9zdCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fdXJsLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAg
IHJldHVybiBtX3VybC5ob3N0KCkudG9TdHJpbmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
OwogfQogCiBjb25zdCBTdHJpbmcmIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50UHJvdG9jb2wo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uOjpwb3B1bGF0ZUNvbmRp
dGlvbgogICAgIGlmIChtX2NhY2hlZFRvcFVSTCAhPSB0b3BVUkwpIHsKICAgICAgICAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT50b3BVUkxG
aWx0ZXJzQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+dG9wVVJMRmlsdGVyc0J5dGVj
b2RlTGVuZ3RoKCkpOwogICAgICAgICBjb25zdCB1aW50MTZfdCBhbGxMb2FkVHlwZXNBbmRSZXNv
dXJjZVR5cGVzID0gTG9hZFR5cGVNYXNrIHwgUmVzb3VyY2VUeXBlTWFzazsKLSAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0Rv
bWFpbigpID8gdG9wVVJMLmhvc3QoKSA6IHRvcFVSTC5zdHJpbmcoKTsKKyAgICAgICAgU3RyaW5n
IHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bigpID8gdG9wVVJMLmhvc3QoKS50b1N0cmluZygpIDogdG9wVVJMLnN0cmluZygpOwogICAgICAg
ICBhdXRvIHRvcFVSTEFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQoc3RyaW5nLnV0Zjgo
KSwgYWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBlcyk7CiAgICAgICAgIAogICAgICAgICBtX2Nh
Y2hlZFRvcFVSTEFjdGlvbnMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw3
IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgICAg
IFN0cmluZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFs
dWUpOwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVuYWJsZWQoKSAm
JiBkb2N1bWVudCgpLmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJc0lu
SFRUUEZhbWlseShwYXJzZWRVUkwpIHx8IHBhcnNlZFVSTC5zdGFydHNXaXRoKCIvLyIpKQotICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnBy
ZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkpOworICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnBy
ZWZldGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkudG9TdHJp
bmcoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0ZUNhY2hl
ZFZpc2l0ZWRMaW5rSGFzaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYxLDcgKzc0NjEsNyBAQCBTdHJp
bmcgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNzaW9uVGl0CiAgICAgaWYgKCF0aXRsZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKIAotICAgIHRpdGxlID0gbV9jdXJyZW50U3Jj
Lmhvc3QoKTsKKyAgICB0aXRsZSA9IG1fY3VycmVudFNyYy5ob3N0KCkudG9TdHJpbmcoKTsKICNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKICAgICBpZiAoIXRpdGxlLmlzRW1wdHko
KSkKICAgICAgICAgdGl0bGUgPSBkZWNvZGVIb3N0TmFtZSh0aXRsZSk7CkBAIC03NTI0LDcgKzc1
MjQsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1NlZWtpbmdTdXBwb3J0UXVpcmsoRG9jCiAgICAgaWYg
KCFkb2N1bWVudC5zZXR0aW5ncygpLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQo
KS51cmwoKS5ob3N0KCk7CisgICAgYXV0byBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51
cmwoKS5ob3N0KCk7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhv
c3QsICJuZXRmbGl4LmNvbSIpIHx8IGhvc3QuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiLm5l
dGZsaXguY29tIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1
Z0luSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcg
KzQzNSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWkKICAgICAv
LyBSZXN0YXJ0IGFueSBvdGhlciBzbmFwc2hvdHRlZCBwbHVnaW5zIGluIHRoZSBwYWdlIHdpdGgg
dGhlIHNhbWUgb3JpZ2luLiBOb3RlIHRoYXQgdGhleQogICAgIC8vIG1heSBiZSBpbiBkaWZmZXJl
bnQgZnJhbWVzLCBzbyB0cmF2ZXJzZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LgogCi0g
ICAgU3RyaW5nIHBsdWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKKyAgICBhdXRvIHBs
dWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBz
ZXJ2aWNlVHlwZSgpOwogICAgIFZlY3RvcjxSZWY8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4+IHNp
bWlsYXJQbHVnaW5zOwogCkBAIC00NjksOSArNDY5LDkgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50Ojp1c2VyRGlkQ2xpYwogICAgIGlmIChmb3J3YXJkRXZlbnQpCiAgICAgICAgIG1fcGVu
ZGluZ0NsaWNrRXZlbnRGcm9tU25hcHNob3QgPSAmZXZlbnQ7CiAKLSAgICBTdHJpbmcgcGx1Z0lu
T3JpZ2luID0gbV9sb2FkZWRVcmwuaG9zdCgpOworICAgIGF1dG8gcGx1Z0luT3JpZ2luID0gbV9s
b2FkZWRVcmwuaG9zdCgpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiAhU2NoZW1lUmVn
aXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChkb2N1bWVudCgpLnBhZ2UoKS0+bWFp
bkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0
Q29weWluZygpKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+c2V0dGluZ3MoKS5hdXRvc3RhcnRPcmln
aW5QbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkucGFnZSgp
LT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCkucGFnZSgpLT5t
YWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLCBwbHVnSW5PcmlnaW4sIHNl
cnZpY2VUeXBlKCksIGRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CisgICAgICAgIGRv
Y3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3Vt
ZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRv
U3RyaW5nKCksIHBsdWdJbk9yaWdpbi50b1N0cmluZygpLCBzZXJ2aWNlVHlwZSgpLCBkb2N1bWVu
dCgpLnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwogCiAgICAgTE9HKFBsdWdpbnMsICIlcCBVc2VyIGNs
aWNrZWQgb24gc25hcHNob3R0ZWQgcGx1Zy1pbi4gUmVzdGFydC4iLCB0aGlzKTsKICAgICByZXN0
YXJ0U25hcHNob3R0ZWRQbHVnSW4oKTsKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9hCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoZG9jdW1lbnQoKS5wYWdlKCktPnNldHRpbmdzKCkuYXV0b3N0YXJ0T3JpZ2luUGx1Z0lu
U25hcHNob3R0aW5nRW5hYmxlZCgpICYmIGRvY3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQo
KSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9TdGFydEZy
b21PcmlnaW4oZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VV
UkwoKS5ob3N0KCksIHVybC5ob3N0KCksIHNlcnZpY2VUeXBlKCkpKSB7CisgICAgaWYgKGRvY3Vt
ZW50KCkucGFnZSgpLT5zZXR0aW5ncygpLmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGlu
Z0VuYWJsZWQoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCkgJiYgZG9jdW1l
bnQoKS5wYWdlKCktPnBsdWdJbkNsaWVudCgpLT5zaG91bGRBdXRvU3RhcnRGcm9tT3JpZ2luKGRv
Y3VtZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgp
LnRvU3RyaW5nKCksIHVybC5ob3N0KCkudG9TdHJpbmcoKSwgc2VydmljZVR5cGUoKSkpIHsKICAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRv
IGF1dG8tc3RhcnQsIHNldCB0byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS5wYWdlKCktPm1haW5G
cmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLmhv
c3QoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJT
bmFwc2hvdDsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBJbWFn
ZURvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUg
aG9zdG5hbWUgaWYgdGhlcmUgaXMgbm8gcGF0aC4KICAgICAgICAgICAgIFN0cmluZyBuYW1lID0g
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogICAg
ICAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG5hbWUgPSB1cmwo
KS5ob3N0KCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IHVybCgpLmhvc3QoKS50b1N0cmluZygp
OwogICAgICAgICAgICAgc2V0VGl0bGUoaW1hZ2VUaXRsZShuYW1lLCBzaXplKSk7CiAgICAgICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMVXRpbHMuaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2
LDcgQEAgdm9pZCBVUkxVdGlsczxUPjo6c2V0SG9zdChjb25zdCBTdHJpbmcmIAogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiBTdHJpbmcgVVJMVXRpbHM8VD46Omhvc3RuYW1lKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaHJlZigpLmhvc3QoKTsKKyAgICByZXR1cm4gaHJlZigpLmhvc3QoKS50b1N0cmlu
ZygpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZQogICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCZtX2ZyYW1lKSkKICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlG
b3JDb29raWVzKHVybCk7CiAKLSAgICBTdHJpbmcgcmVnaXN0cmFibGVEb21haW4gPSBSZXNvdXJj
ZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUodXJsLmhvc3QoKSk7CisgICAgU3RyaW5nIHJlZ2lzdHJh
YmxlRG9tYWluID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKHVybC5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKSB7CiAgICAgICAgIGlmIChT
ZWN1cml0eVBvbGljeTo6c2hvdWxkSW5oZXJpdFNlY3VyaXR5T3JpZ2luRnJvbU93bmVyKGZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKSkgfHwgcmVnaXN0cmFibGVEb21haW5zQXJlRXF1YWwoZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpLCByZWdpc3RyYWJsZURvbWFpbikpCiAgICAgICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvclNhbWVTaXRlQ29va2llcyh1cmwpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTQsNyArMjk0LDcgQEAgYm9vbCBMaW5rTG9hZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQog
ICAgICAgICAvLyBGSVhNRTogVGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSBsaW5rIGVsZW1lbnQg
Y2FuIGJlIGluICIvL2hvc3RuYW1lIiBmb3JtLCBhbmQgd2Ugc2hvdWxkbid0IGF0dGVtcHQKICAg
ICAgICAgLy8gdG8gY29tcGxldGUgdGhhdCBhcyBVUkwgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00ODg1Nz4uCiAgICAgICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygp
LmRuc1ByZWZldGNoaW5nRW5hYmxlZCgpICYmIGhyZWYuaXNWYWxpZCgpICYmICFocmVmLmlzRW1w
dHkoKSAmJiBkb2N1bWVudC5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQuZnJhbWUoKS0+
bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0KCkpOworICAgICAgICAgICAg
ZG9jdW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0
KCkudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgcHJlY29ubmVjdElmTmVlZGVkKHJlbEF0dHJp
YnV0ZSwgaHJlZiwgZG9jdW1lbnQsIGNyb3NzT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIzMjE3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6bWVyZ2UoY29uc3QKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1h
cnlEb21haW4oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJs
Lmhvc3QoKSk7CisgICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKS50b1N0cmluZygp
KTsKIH0KIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oY29u
c3QgU3RyaW5nJiBob3N0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJO
U1VSTEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0xv
YWRlck5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZSgKIAogICAgIGlm
IChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwIHx8IFtsYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsVG9T
dHJpbmc6QCIvIl0pIHsKICAgICAgICAgLy8gbGFzdFBhdGhDb21wb25lbnQgaXMgbm8gZ29vZCwg
dHJ5IHRoZSBob3N0LgotICAgICAgICBOU1N0cmluZyAqaG9zdCA9IFVSTCh1cmwpLmhvc3QoKTsK
KyAgICAgICAgTlNTdHJpbmcgKmhvc3QgPSBVUkwodXJsKS5ob3N0KCkudG9TdHJpbmcoKTsKICAg
ICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMoaG9zdCk7
CiAgICAgICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBD
YW4ndCBtYWtlIGEgZmlsZW5hbWUgdXNpbmcgdGhpcyBVUkwsIHVzZSAidW5rbm93biIuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lk
IENocm9tZTo6c2V0U3RhdHVzYmFyVGV4dChGcmFtZSYgZnJhCiB2b2lkIENocm9tZTo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBt
b2RpZmllckZsYWdzKQogewogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkgJiYgcmVzdWx0Lmlu
bmVyTm9kZSgpLT5kb2N1bWVudCgpLmlzRE5TUHJlZmV0Y2hFbmFibGVkKCkpCi0gICAgICAgIG1f
cGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhyZXN1bHQuYWJz
b2x1dGVMaW5rVVJMKCkuaG9zdCgpKTsKKyAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRl
cigpLmNsaWVudCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCku
dG9TdHJpbmcoKSk7CiAgICAgbV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0
LCBtb2RpZmllckZsYWdzKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQobV9wYWdlLCByZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFN0
cmluZyBMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAogICAgIGlmICghbV9mcmFtZSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybCgpLmhvc3QoKTsKKyAgICByZXR1
cm4gdXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBMb2NhdGlvbjo6cG9ydCgp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDQsNyArMjEwNCw3
IEBAIHZvaWQgUGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQoY29uc3QgVVIKIHsKICAgICBTdHJp
bmcgZG9tYWluOwogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0gICAgZG9tYWluID0g
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkZXN0aW5hdGlvblVSTC5ob3N0KCkpOworICAg
IGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oZGVzdGluYXRpb25VUkwuaG9z
dCgpLnRvU3RyaW5nKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTW9uaXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZU1vbml0b3Iu
Y3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
TW9uaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgdm9p
ZCByZXBvcnRQYWdlT3ZlclBvc3RMb2FkUmVzb3VyCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKSk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHRvcFBy
aXZhdGVseUNvbnRyb2xsZWREb21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKS50b1N0cmluZygp
KTsKICAgICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjbwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNMb29wYmFja0lQQWRkcmVzcyhj
b25zdCBTdHJpbmcmIGhvc3QpCitzdGF0aWMgYm9vbCBpc0xvb3BiYWNrSVBBZGRyZXNzKFN0cmlu
Z1ZpZXcgaG9zdCkKIHsKICAgICAvLyBUaGUgSVB2NiBsb29wYmFjayBhZGRyZXNzIGlzIDA6MDow
OjA6MDowOjA6MSwgd2hpY2ggY29tcHJlc3NlcyB0byA6OjEuCiAgICAgaWYgKGhvc3QgPT0gIls6
OjFdIikKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdEFzUG90ZW50
aWFsbHlUcnVzCiAKIGJvb2wgc2hvdWxkVHJlYXRBc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY29u
c3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0
d29ydGh5KHVybC5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3Qo
KSk7CisgICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5w
cm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3QoKS50b1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCkpOwogfQogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29u
c3QgVVJMJiB1cmwpCkBAIC01NDgsNyArNTQ4LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNT
YW1lU2NoZW1lSG9zdFBvcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNlY3VyaXR5T3Jp
Z2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KQor
Ym9vbCBTZWN1cml0eU9yaWdpbjo6aXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKFN0cmlu
Z1ZpZXcgaG9zdCkKIHsKICAgICBpZiAoaXNMb29wYmFja0lQQWRkcmVzcyhob3N0KSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShy
ZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
UG90ZW50aWFsbHlUcnVzdHdvcnRoeSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQb3RlbnRpYWxseVRy
dXN0d29ydGh5OyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFk
ZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9y
TG9vcGJhY2tJUEFkZHJlc3MoU3RyaW5nVmlldyk7CiAKICAgICBjb25zdCBTZWN1cml0eU9yaWdp
bkRhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw3IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIHsKICAgICAgICAg
cmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAgICAgICAgICAgICB1cmwucHJvdG9jb2woKS5p
c051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB1cmwucHJvdG9jb2woKS50b1N0cmluZygpLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCksCi0gICAgICAgICAgICB1cmwuaG9zdCgpLmlzTnVsbCgpID8g
ZW1wdHlTdHJpbmcoKSA6IHVybC5ob3N0KCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSwKKyAg
ICAgICAgICAgIHVybC5ob3N0KCkuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdXJsLmhvc3Qo
KS50b1N0cmluZygpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCksCiAgICAgICAgICAgICB1cmwu
cG9ydCgpCiAgICAgICAgIH07CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
Q29udGVudFVSTFBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXMoY29ucwog
CiBib29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc0hvc3QoY29uc3QgVVJMJiB0ZXN0
KSBjb25zdAogewotICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IHRlc3QuaG9zdCgpOworICAgIGF1
dG8gaG9zdCA9IHRlc3QuaG9zdCgpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGhv
c3QsIG1faG9zdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OnNjaGVtZQogCiBib29sIENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZTo6aG9zdE1hdGNoZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7Ci0g
ICAgY29uc3QgU3RyaW5nJiBob3N0ID0gdXJsLmhvc3QoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShob3N0LCBtX2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0
LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIi4iICsgbV9ob3N0KSk7CisgICAgYXV0byBob3N0
ID0gdXJsLmhvc3QoKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShob3N0LCBt
X2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UobWFrZVN0cmluZygiLiIsIG1faG9zdCkpKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUHVibGljU3VmZml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIz
LDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFB1YmxpY1N1ZmZpeF9oCi0jZGVmaW5lIFB1YmxpY1N1ZmZpeF9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSw1ICszOCwzIEBAIFN0cmlu
ZyBkZWNvZGVIb3N0TmFtZShjb25zdCBTdHJpbmcmIGRvbWEKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0KLSNlbmRpZiAvLyBQ
dWJsaWNTdWZmaXhfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCShyZXZpc2lvbiAyMzIx
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTUsMTAgKzE1NSwxMCBAQCBTdHJpbmdWaWV3IFVSTDo6cHJvdG9jb2woKSBjb25zdAogICAg
IHJldHVybiBTdHJpbmdWaWV3KG1fc3RyaW5nKS5zdWJzdHJpbmcoMCwgbV9zY2hlbWVFbmQpOwog
fQogCi1TdHJpbmcgVVJMOjpob3N0KCkgY29uc3QKK1N0cmluZ1ZpZXcgVVJMOjpob3N0KCkgY29u
c3QKIHsKICAgICB1bnNpZ25lZCBzdGFydCA9IGhvc3RTdGFydCgpOwotICAgIHJldHVybiBtX3N0
cmluZy5zdWJzdHJpbmcoc3RhcnQsIG1faG9zdEVuZCAtIHN0YXJ0KTsKKyAgICByZXR1cm4gU3Ry
aW5nVmlldyhtX3N0cmluZykuc3Vic3RyaW5nKHN0YXJ0LCBtX2hvc3RFbmQgLSBzdGFydCk7CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IFVSTDo6cG9ydCgpIGNvbnN0CkBAIC0xODAsOCAr
MTgwLDggQEAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gVVJMOjpwb3J0KCkgY29ucwogU3RyaW5n
IFVSTDo6aG9zdEFuZFBvcnQoKSBjb25zdAogewogICAgIGlmIChhdXRvIHBvcnQgPSB0aGlzLT5w
b3J0KCkpCi0gICAgICAgIHJldHVybiBob3N0KCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0
LnZhbHVlKCkpOwotICAgIHJldHVybiBob3N0KCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KGhvc3QoKSwgJzonLCBTdHJpbmc6Om51bWJlcihwb3J0LnZhbHVlKCkpKTsKKyAgICByZXR1cm4g
aG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBVUkw6OnByb3RvY29sSG9zdEFuZFBvcnQo
KSBjb25zdApAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgVVJMOjppc01hdGNoaW5nRG9tYWluKGNv
bnN0IFN0cmluZyYKICAgICBpZiAoIWhvc3QuZW5kc1dpdGgoZG9tYWluKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhvc3QubGVuZ3RoKCkgPT0gZG9tYWluLmxlbmd0aCgp
IHx8IGhvc3QuY2hhcmFjdGVyQXQoaG9zdC5sZW5ndGgoKSAtIGRvbWFpbi5sZW5ndGgoKSAtIDEp
ID09ICcuJzsKKyAgICByZXR1cm4gaG9zdC5sZW5ndGgoKSA9PSBkb21haW4ubGVuZ3RoKCkgfHwg
aG9zdFtob3N0Lmxlbmd0aCgpIC0gZG9tYWluLmxlbmd0aCgpIC0gMV0gPT0gJy4nOwogfQogCiBT
dHJpbmcgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIGlucHV0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGgodW5zaWduZWQgbGVuZ3RoID0gMTAyNCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmdWaWV3IHByb3RvY29sKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGhvc3QoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmdWaWV3IGhvc3QoKSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGhvc3RBbmRQb3J0KCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHByb3RvY29sSG9zdEFuZFBvcnQoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAkocmV2aXNpb24g
MjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBib29sIGlzR29vZ2xlKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFN0cmluZyBiYXNlRG9t
YWluID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBTdHJp
bmcgYmFzZURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50
b1N0cmluZygpKTsKIAogICAgIC8vIE91ciBHb29nbGUgVUEgaXMgKnZlcnkqIGNvbXBsaWNhdGVk
IHRvIGdldCByaWdodC4gUmVhZAogICAgIC8vIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MjA3NCBj
YXJlZnVsbHkgYmVmb3JlIGNoYW5naW5nLiBUZXN0IHRoYXQgRWFydGgKQEAgLTYwLDcgKzYwLDcg
QEAgc3RhdGljIGJvb2wgaXNHb29nbGUoY29uc3QgVVJMJiB1cmwpCiAvLyB0aGF0IHdvcmtzIGlu
IENocm9tZSB0aGF0IFdlYktpdCBjYW5ub3QgaGFuZGxlLiBQcmVmZXIgb3RoZXIgcXVpcmtzIGlu
c3RlYWQuCiBzdGF0aWMgYm9vbCB1cmxSZXF1aXJlc0Nocm9tZUJyb3dzZXIoY29uc3QgVVJMJiB1
cmwpCiB7Ci0gICAgU3RyaW5nIGJhc2VEb21haW4gPSB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9t
YWluKHVybC5ob3N0KCkpOworICAgIFN0cmluZyBiYXNlRG9tYWluID0gdG9wUHJpdmF0ZWx5Q29u
dHJvbGxlZERvbWFpbih1cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogCiAgICAgLy8gTmVlZGVkIGZv
ciBmb250cyBvbiBtYW55IHNpdGVzIHRvIHdvcmsgd2l0aCBXZWJLaXQuCiAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI5NgpAQCAtNzgsNyArNzgsNyBA
QCBzdGF0aWMgYm9vbCB1cmxSZXF1aXJlc0Nocm9tZUJyb3dzZXIoY29uCiAKIHN0YXRpYyBib29s
IHVybFJlcXVpcmVzTWFjaW50b3NoUGxhdGZvcm0oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgU3Ry
aW5nIGRvbWFpbiA9IHVybC5ob3N0KCk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHVybC5ob3N0KCku
dG9TdHJpbmcoKTsKICAgICBTdHJpbmcgYmFzZURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xs
ZWREb21haW4oZG9tYWluKTsKIAogICAgIC8vIEF0IGxlYXN0IGZpbmFuY2UueWFob28uY29tIGRp
c3BsYXlzIGEgbW9iaWxlIHZlcnNpb24gd2l0aCBXZWJLaXRHVEsrJ3Mgc3RhbmRhcmQgdXNlciBh
Z2VudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdl
bmVyYXRvck1hYy5tbQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0
Niw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKIAogICAgIGF1
dG8gY2hhbGxlbmdlID0gY2hhbGxlbmdlU3RyaW5nLmlzQWxsQVNDSUkoKSA/IGNoYWxsZW5nZVN0
cmluZy5hc2NpaSgpIDogIiI7CiAKLSAgICByZXR1cm4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxl
bmdlU3RyaW5nKGtleVNpemUsIGNoYWxsZW5nZSwga2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwu
aG9zdCgpKSk7CisgICAgcmV0dXJuIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhr
ZXlTaXplLCBjaGFsbGVuZ2UsIGtleWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0
cmluZygpKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjU1LDExICsyNTUsMTEgQEAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVy
RmllbGRzKGNvbnN0IFJlcwogLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgZm9yIHRoZXNl
IGZ1bmN0aW9ucy4KIGlubGluZSBib29sIHJlZ2lzdHJhYmxlRG9tYWluc0FyZUVxdWFsKGNvbnN0
IFVSTCYgYSwgY29uc3QgVVJMJiBiKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpwYXJ0aXRpb25OYW1lKGEuaG9zdCgpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRp
b25OYW1lKGIuaG9zdCgpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6cGFydGl0
aW9uTmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0
aXRpb25OYW1lKGIuaG9zdCgpLnRvU3RyaW5nKCkpOwogfQogaW5saW5lIGJvb2wgcmVnaXN0cmFi
bGVEb21haW5zQXJlRXF1YWwoY29uc3QgVVJMJiBhLCBjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxl
RG9tYWluKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1l
KGEuaG9zdCgpKSA9PSByZWdpc3RyYWJsZURvbWFpbjsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6cGFydGl0aW9uTmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSByZWdpc3RyYWJs
ZURvbWFpbjsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYikgeyByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6ZXF1YWwoYSwgYik7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQu
Y3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4
LDExICsxOTgsMTEgQEAgU3RyaW5nIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llU3Rvcgog
c3RhdGljIGlubGluZSBTdHJpbmcgZ2V0UGFydGl0aW9uaW5nRG9tYWluKGNvbnN0IFVSTCYgdXJs
KSAKIHsKICNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQotICAgIGF1dG8gZG9tYWluID0g
dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBhdXRvIGRvbWFp
biA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50b1N0cmluZygpKTsK
ICAgICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKLSAgICAgICAgZG9tYWluID0gdXJsLmhvc3QoKTsK
KyAgICAgICAgZG9tYWluID0gdXJsLmhvc3QoKS50b1N0cmluZygpOwogI2Vsc2UKLSAgICBhdXRv
IGRvbWFpbiA9IHVybC5ob3N0KCk7CisgICAgYXV0byBkb21haW4gPSB1cmwuaG9zdCgpLnRvU3Ry
aW5nKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbENGTmV0LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpjcmVhdGVTdHJlYQogICAgIGlmIChtX2Nvbm5lY3Rpb25UeXBlID09IFVua25vd24pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9IG1fdXJs
Lmhvc3QoKS5jcmVhdGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9z
dCA9IG1fdXJsLmhvc3QoKS50b1N0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICAgICAvLyBD
cmVhdGluZyBzdHJlYW1zIHRvIGZpbmFsIGRlc3RpbmF0aW9uLCBub3QgdG8gcHJveHkuCiAgICAg
Q0ZSZWFkU3RyZWFtUmVmIHJlYWRTdHJlYW0gPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCShyZXZpc2lvbiAy
MzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
REIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9vbCBDb29raWVKYXJE
Qjo6c2VhcmNoQ29va2llcyhjb25zdCBTdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBV
UkwgcmVxdWVzdFVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHJlcXVlc3RVcmwpOwotICAgIFN0cmlu
ZyByZXF1ZXN0SG9zdChyZXF1ZXN0VXJsT2JqLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpKTsKKyAgICBTdHJpbmcgcmVxdWVzdEhvc3QocmVxdWVzdFVybE9iai5ob3N0KCkudG9TdHJp
bmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKICAgICBTdHJpbmcgcmVxdWVzdFBhdGgo
cmVxdWVzdFVybE9iai5wYXRoKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAKICAgICBp
ZiAocmVxdWVzdEhvc3QuaXNFbXB0eSgpKQpAQCAtMzgyLDcgKzM4Miw3IEBAIGludCBDb29raWVK
YXJEQjo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAg
VVJMIHVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgU3RyaW5nIGhvc3QodXJsT2Jq
Lmhvc3QoKSk7CisgICAgU3RyaW5nIGhvc3QodXJsT2JqLmhvc3QoKS50b1N0cmluZygpKTsKICAg
ICBTdHJpbmcgcGF0aCh1cmxPYmoucGF0aCgpKTsKIAogICAgIENvb2tpZSBjb29raWVPYmo7CkBA
IC00MTcsNyArNDE3LDcgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3Ry
aQogCiAgICAgVVJMIHVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHVybENvcGllZCk7CiAgICAgaWYg
KHVybE9iai5pc1ZhbGlkKCkpIHsKLSAgICAgICAgU3RyaW5nIGhvc3RTdHIodXJsT2JqLmhvc3Qo
KSk7CisgICAgICAgIFN0cmluZyBob3N0U3RyKHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7CiAg
ICAgICAgIFN0cmluZyBwYXRoU3RyKHVybE9iai5wYXRoKCkpOwogICAgICAgICBpbnQgcmV0ID0g
ZGVsZXRlQ29va2llSW50ZXJuYWwobmFtZSwgaG9zdFN0ciwgcGF0aFN0cik7CiAgICAgICAgIEFT
U0VSVChjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0LCBTUUxJVEVfRE9ORSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6aG9zdCgpIGNvbnN0
CiAKIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAogewotICAgIHJldHVy
biBtX3VybC5ob3N0KCk7CisgICAgcmV0dXJuIG1fdXJsLmhvc3QoKS50b1N0cmluZygpOwogfQog
CiBTdHJpbmcgV29ya2VyTG9jYXRpb246OnBvcnQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAJKHJldmlzaW9u
IDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjYsNyArODY2LDcgQEAgdm9pZCBTV1NlcnZlcjo6
cGVyZm9ybUdldE9yaWdpbnNXaXRoUmVnaQogICAgIEhhc2hTZXQ8U2VjdXJpdHlPcmlnaW5EYXRh
PiBvcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnM7CiAgICAgZm9yIChhdXRvJiBrZXkgOiBtX3JlZ2lz
dHJhdGlvbnMua2V5cygpKSB7CiAgICAgICAgIG9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucy5hZGQo
a2V5LnRvcE9yaWdpbigpKTsKLSAgICAgICAgb3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zLmFkZChT
ZWN1cml0eU9yaWdpbkRhdGEgeyBrZXkuc2NvcGUoKS5wcm90b2NvbCgpLnRvU3RyaW5nKCksIGtl
eS5zY29wZSgpLmhvc3QoKSwga2V5LnNjb3BlKCkucG9ydCgpIH0pOworICAgICAgICBvcmlnaW5z
V2l0aFJlZ2lzdHJhdGlvbnMuYWRkKFNlY3VyaXR5T3JpZ2luRGF0YSB7IGtleS5zY29wZSgpLnBy
b3RvY29sKCkudG9TdHJpbmcoKSwga2V5LnNjb3BlKCkuaG9zdCgpLnRvU3RyaW5nKCksIGtleS5z
Y29wZSgpLnBvcnQoKSB9KTsKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrcyA9IFdURk1vdmUo
bV9nZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnNDYWxsYmFja3MpOwpJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzIgQEAKKzIwMTgtMDUtMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVUkw6Omhvc3Qgc2hvdWxkIHJldHVybiBhIFN0
cmluZ1ZpZXcgdG8gcmVkdWNlIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU5ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjphcmVGcmFtZUFuY2VzdG9yc1NhbWVTaXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9t
YWMvTmV0d29ya1Byb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6Om92ZXJyaWRlU3lzdGVt
UHJveGllcyk6CisgICAgICAgICogU2hhcmVkL0FQSS9BUElVUkwuaDoKKyAgICAgICAgKEFQSTo6
VVJMOjpob3N0IGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjphZGRTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1p
bmF0ZU9yRmFpbGVkVG9MYXVuY2gpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGx1Z2luRGlkUmVjZWl2
ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdp
bkluZm9Qcm92aWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkluZm9Qcm92aWRl
cjo6cG9wdWxhdGVQbHVnaW5DYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpuZWVkc0hpZGRlbkNvbnRlbnRFZGl0YWJsZVF1
aXJrKToKKyAgICAgICAgKFdlYktpdDo6bmVlZHNQbGFpblRleHRRdWlyayk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmRldGVybWluZVByaW1hcnlTbmFwc2hvdHRlZFBsdWdJbik6CisKIDIw
MTgtMDUtMjQgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFVw
ZGF0ZSBwbHVnaW4gc2VhcmNoIHBhdGggdG8gbG9vayBmb3IgdXNlciBpbnN0YWxsZWQgcGx1Z2lu
cwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsNyArNDgxLDcgQEAgc3Rh
dGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKFBBTDo6UwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBhdXRvIHVybCA9IHRyYXZlcnNhbEVudHJ5LT5lbnRyeS5yZXNwb25zZSgpLnVy
bCgpOwotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBvcmlnaW5zQW5kU2l6ZXMuYWRkKHt1cmwu
cHJvdG9jb2woKS50b1N0cmluZygpLCB1cmwuaG9zdCgpLCB1cmwucG9ydCgpfSwgMCk7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IG9yaWdpbnNBbmRTaXplcy5hZGQoe3VybC5wcm90b2NvbCgp
LnRvU3RyaW5nKCksIHVybC5ob3N0KCkudG9TdHJpbmcoKSwgdXJsLnBvcnQoKX0sIDApOwogCiAg
ICAgICAgICAgICBpZiAoZmV0Y2hPcHRpb25zLmNvbnRhaW5zKFdlYnNpdGVEYXRhRmV0Y2hPcHRp
b246OkNvbXB1dGVTaXplcykpCiAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSArPSB0cmF2ZXJzYWxFbnRyeS0+ZW50cnkuc291cmNlU3RvcmFnZVJlY29yZCgpLmhlYWRlci5z
aXplKCkgKyB0cmF2ZXJzYWxFbnRyeS0+cmVjb3JkSW5mby5ib2R5U2l6ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDcgKzM2NCw3
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiBzdGF0aWMgYm9vbCBhcmVG
cmFtZUFuY2VzdG9yc1NhbWVTaXRlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBj
b25zdCBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4mIGZyYW1lQW5jZXN0b3JPcmlnaW5z
KQogewogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0gICAgYXV0byByZXNwb25zZVBh
cnRpdGlvbiA9IFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShyZXNwb25zZS51cmwoKS5o
b3N0KCkpOworICAgIGF1dG8gcmVzcG9uc2VQYXJ0aXRpb24gPSBSZXNvdXJjZVJlcXVlc3Q6OnBh
cnRpdGlvbk5hbWUocmVzcG9uc2UudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgIHJldHVy
biBmcmFtZUFuY2VzdG9yT3JpZ2lucy5maW5kTWF0Y2hpbmcoWyZdKGNvbnN0IGF1dG8mIGl0ZW0p
IHsKICAgICAgICAgcmV0dXJuIGl0ZW0tPmlzVW5pcXVlKCkgfHwgUmVzb3VyY2VSZXF1ZXN0Ojpw
YXJ0aXRpb25OYW1lKGl0ZW0tPmhvc3QoKSkgIT0gcmVzcG9uc2VQYXJ0aXRpb247CiAgICAgfSkg
PT0gbm90Rm91bmQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3
b3JrUHJvY2Vzc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgb3ZlcnJpZGVTeXN0ZW1Qcm94aWVz
KGNvbnN0IAogICAgIGlmICghaHR0cFByb3h5LmlzTnVsbCgpKSB7CiAgICAgICAgIFVSTCBodHRw
UHJveHlVUkwoVVJMKCksIGh0dHBQcm94eSk7CiAgICAgICAgIGlmIChodHRwUHJveHlVUkwuaXNW
YWxpZCgpKSB7Ci0gICAgICAgICAgICBbcHJveHlTZXR0aW5ncyBzZXRPYmplY3Q6bnNTdHJpbmdG
cm9tV2ViQ29yZVN0cmluZyhodHRwUHJveHlVUkwuaG9zdCgpKSBmb3JLZXk6KE5TU3RyaW5nICop
a0NGTmV0d29ya1Byb3hpZXNIVFRQUHJveHldOworICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mg
c2V0T2JqZWN0Om5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoaHR0cFByb3h5VVJMLmhvc3QoKS50
b1N0cmluZygpKSBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQUHJveHld
OwogICAgICAgICAgICAgaWYgKGh0dHBQcm94eVVSTC5wb3J0KCkpIHsKICAgICAgICAgICAgICAg
ICBOU051bWJlciAqcG9ydCA9IFtOU051bWJlciBudW1iZXJXaXRoSW50Omh0dHBQcm94eVVSTC5w
b3J0KCkudmFsdWUoKV07CiAgICAgICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2JqZWN0
OnBvcnQgZm9yS2V5OihOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFBvcnRdOwpAQCAt
ODYsNyArODYsNyBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZVN5c3RlbVByb3hpZXMoY29uc3QgCiAg
ICAgICAgIFVSTCBodHRwc1Byb3h5VVJMKFVSTCgpLCBodHRwc1Byb3h5KTsKICAgICAgICAgaWYg
KGh0dHBzUHJveHlVUkwuaXNWYWxpZCgpKSB7CiAjaWYgIUVOQUJMRShNSU5JTUFMX1NJTVVMQVRP
UikKLSAgICAgICAgICAgIFtwcm94eVNldHRpbmdzIHNldE9iamVjdDpuc1N0cmluZ0Zyb21XZWJD
b3JlU3RyaW5nKGh0dHBzUHJveHlVUkwuaG9zdCgpKSBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0
d29ya1Byb3hpZXNIVFRQU1Byb3h5XTsKKyAgICAgICAgICAgIFtwcm94eVNldHRpbmdzIHNldE9i
amVjdDpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGh0dHBzUHJveHlVUkwuaG9zdCgpLnRvU3Ry
aW5nKCkpIGZvcktleTooTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGllc0hUVFBTUHJveHldOwog
ICAgICAgICAgICAgaWYgKGh0dHBzUHJveHlVUkwucG9ydCgpKSB7CiAgICAgICAgICAgICAgICAg
TlNOdW1iZXIgKnBvcnQgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpodHRwc1Byb3h5VVJMLnBv
cnQoKS52YWx1ZSgpXTsKICAgICAgICAgICAgICAgICBbcHJveHlTZXR0aW5ncyBzZXRPYmplY3Q6
cG9ydCBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQU1BvcnRdOwpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSVVSTC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElVUkwuaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNl
L1dlYktpdC9TaGFyZWQvQVBJL0FQSVVSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3
IEBAIHB1YmxpYzoKICAgICBXVEY6OlN0cmluZyBob3N0KCkgY29uc3QKICAgICB7CiAgICAgICAg
IHBhcnNlVVJMSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgcmV0dXJuIG1fcGFyc2VkVVJMLT5pc1Zh
bGlkKCkgPyBtX3BhcnNlZFVSTC0+aG9zdCgpIDogV1RGOjpTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIG1fcGFyc2VkVVJMLT5pc1ZhbGlkKCkgPyBtX3BhcnNlZFVSTC0+aG9zdCgpLnRvU3RyaW5n
KCkgOiBXVEY6OlN0cmluZygpOwogICAgIH0KIAogICAgIFdURjo6U3RyaW5nIHByb3RvY29sKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2
aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTc5OSw3ICs1Nzk5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnByb2Nlc3NEaWRUZXJtaW5hdGUoUAogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmIChtX3By
b2Nlc3MtPmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpKSB7Ci0gICAgICAgIFN0cmluZyBkb21haW4g
PSBXZWJDb3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKFdlYkNvcmU6OlVSTChXZWJD
b3JlOjpQYXJzZWRVUkxTdHJpbmcsIGN1cnJlbnRVUkwoKSkuaG9zdCgpKTsKKyAgICAgICAgU3Ry
aW5nIGRvbWFpbiA9IFdlYkNvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oV2ViQ29y
ZTo6VVJMKFdlYkNvcmU6OlBhcnNlZFVSTFN0cmluZywgY3VycmVudFVSTCgpKS5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgICAgIGlmICghZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxv
Z0RpYWdub3N0aWNNZXNzYWdlV2l0aEVuaGFuY2VkUHJpdmFjeShXZWJDb3JlOjpEaWFnbm9zdGlj
TG9nZ2luZ0tleXM6OmRvbWFpbkNhdXNpbmdKZXRzYW1LZXkoKSwgZG9tYWluLCBXZWJDb3JlOjpT
aG91bGRTYW1wbGU6Ok5vKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw3ICs2
NzYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0CiAjaWYgRU5B
QkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKICAgICBpZiAocGFnZXMuc2l6ZSgpID09IDEpIHsKICAg
ICAgICAgYXV0byYgcGFnZSA9ICpwYWdlc1swXTsKLSAgICAgICAgU3RyaW5nIGRvbWFpbiA9IHRv
cFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oV2ViQ29yZTo6VVJMKFdlYkNvcmU6OlBhcnNlZFVS
TFN0cmluZywgcGFnZS5jdXJyZW50VVJMKCkpLmhvc3QoKSk7CisgICAgICAgIFN0cmluZyBkb21h
aW4gPSB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpQ
YXJzZWRVUkxTdHJpbmcsIHBhZ2UuY3VycmVudFVSTCgpKS5ob3N0KCkudG9TdHJpbmcoKSk7CiAg
ICAgICAgIGlmICghZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHBhZ2UubG9nRGlhZ25v
c3RpY01lc3NhZ2VXaXRoRW5oYW5jZWRQcml2YWN5KFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5n
S2V5czo6ZG9tYWluQ2F1c2luZ0NyYXNoS2V5KCksIGRvbWFpbiwgV2ViQ29yZTo6U2hvdWxkU2Ft
cGxlOjpObyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIz
MjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE3LDcgKzEzMTcsNyBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29rCiAKICAgICAvLyBJbmhlcml0IHRoZSBk
b21haW4vaG9zdCBmcm9tIHRoZSBtYWluIGZyYW1lJ3MgVVJMIGlmIGl0IGlzIG5vdCBleHBsaWNp
dGx5IHNldC4KICAgICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKLSAgICAgICAgZG9tYWluID0gYWN0
aXZlVVJMLmhvc3QoKTsKKyAgICAgICAgZG9tYWluID0gYWN0aXZlVVJMLmhvc3QoKS50b1N0cmlu
ZygpOwogCiAgICAgY29va2llLmRvbWFpbiA9IGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVk
ZWQoZG9tYWluKTsKIApAQCAtMTM2MSw3ICsxMzYxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29vawogICAgIEFTU0VSVChhY3RpdmVVUkwuaXNWYWxpZCgpKTsKIAog
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGNvb2tpZU1hbmFnZXIt
PmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCksIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoYWN0aXZlVVJMLmhvc3QoKSkp
OworICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVk
ZWQoYWN0aXZlVVJMLmhvc3QoKS50b1N0cmluZygpKSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNz
aW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MzEsOCArMTgzMSw4IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luRGlkUmVjZWl2
ZVVzZXJJbnQKICAgICBtX2RpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwogCiAgICAg
SFRNTFBsdWdJbkltYWdlRWxlbWVudCYgcGx1Z0luSW1hZ2VFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TFBsdWdJbkltYWdlRWxlbWVudD4oKm1fcGx1Z2luRWxlbWVudCk7Ci0gICAgU3RyaW5nIHBhZ2VP
cmlnaW4gPSBwbHVnSW5JbWFnZUVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgp
LmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCk7Ci0gICAgU3RyaW5nIHBsdWdpbk9yaWdpbiA9
IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRVcmwoKS5ob3N0KCk7CisgICAgU3RyaW5nIHBhZ2VP
cmlnaW4gPSBwbHVnSW5JbWFnZUVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgp
LmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgcGx1
Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZFVybCgpLmhvc3QoKS50b1N0cmlu
ZygpOwogICAgIFN0cmluZyBtaW1lVHlwZSA9IHBsdWdJbkltYWdlRWxlbWVudC5zZXJ2aWNlVHlw
ZSgpOwogCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGx1Z0luRGlkUmVjZWl2ZVVzZXJJ
bnRlcmFjdGlvbihwYWdlT3JpZ2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlLCBwbHVnSW5JbWFn
ZUVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPnNlc3Npb25JRCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1By
b3ZpZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2
LDcgKzE1Niw3IEBAIHZvaWQgV2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpwb3B1bGF0ZVBsdWcKICAg
ICB9CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgU3RyaW5nIHBhZ2VIb3N0ID0gcGFnZS5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZVVSTCgpLmhvc3QoKTsK
KyAgICBTdHJpbmcgcGFnZUhvc3QgPSBwYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCktPnJlc3BvbnNlVVJMKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgaWYgKHBhZ2VI
b3N0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChhdXRvJiBpbmZvIDogbV9j
YWNoZWRQbHVnaW5zKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NDgsOCArNDg0OCw3
IEBAIHN0YXRpYyBib29sIG5lZWRzSGlkZGVuQ29udGVudEVkaXRhYmxlUXUKICAgICBpZiAoIW5l
ZWRzUXVpcmtzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcgaG9zdCA9IHVy
bC5ob3N0KCk7Ci0gICAgU3RyaW5nIHBhdGggPSB1cmwucGF0aCgpOworICAgIGF1dG8gaG9zdCA9
IHVybC5ob3N0KCk7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhv
c3QsICJkb2NzLmdvb2dsZS5jb20iKTsKIH0KIApAQCAtNDg1OCw3ICs0ODU3LDcgQEAgc3RhdGlj
IGJvb2wgbmVlZHNQbGFpblRleHRRdWlyayhib29sIG5lZQogICAgIGlmICghbmVlZHNRdWlya3Mp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBob3N0ID0gdXJsLmhvc3QoKTsK
KyAgICBhdXRvIGhvc3QgPSB1cmwuaG9zdCgpOwogCiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGhvc3QsICJ0d2l0dGVyLmNvbSIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTU0MzEsOCArNTQzMCw4IEBAIHZvaWQgV2ViUGFnZTo6ZGV0ZXJtaW5lUHJpbWFyeVNuYXBz
aG90dGUKIAogICAgIExPRyhQbHVnaW5zLCAiUHJpbWFyeSBQbHVnLUluIERldGVjdGlvbjogc3Vj
Y2VzcyAtIGZvdW5kIGEgY2FuZGlkYXRlIHBsdWctaW4gLSBpbmZvcm0gaXQuIik7CiAgICAgbV9k
aWRGaW5kUHJpbWFyeVNuYXBzaG90dGVkUGx1Z2luID0gdHJ1ZTsKLSAgICBtX3ByaW1hcnlQbHVn
SW5QYWdlT3JpZ2luID0gbV9wYWdlLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCku
aG9zdCgpOwotICAgIG1fcHJpbWFyeVBsdWdJbk9yaWdpbiA9IGNhbmRpZGF0ZVBsdWdJbi0+bG9h
ZGVkVXJsKCkuaG9zdCgpOworICAgIG1fcHJpbWFyeVBsdWdJblBhZ2VPcmlnaW4gPSBtX3BhZ2Ut
Pm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudG9TdHJpbmcoKTsKKyAg
ICBtX3ByaW1hcnlQbHVnSW5PcmlnaW4gPSBjYW5kaWRhdGVQbHVnSW4tPmxvYWRlZFVybCgpLmhv
c3QoKS50b1N0cmluZygpOwogICAgIG1fcHJpbWFyeVBsdWdJbk1pbWVUeXBlID0gY2FuZGlkYXRl
UGx1Z0luLT5zZXJ2aWNlVHlwZSgpOwogCiAgICAgY2FuZGlkYXRlUGx1Z0luLT5zZXRJc1ByaW1h
cnlTbmFwc2hvdHRlZFBsdWdJbih0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE4LTA1LTI1ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0IHNob3VsZCByZXR1cm4g
YSBTdHJpbmdWaWV3IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0
Rm9yVVJMKToKKwogMjAxOC0wNS0xMSAgQ2hhcmxlcyBWYXphYyAgPGN2YXphY0BnbWFpbC5jb20+
CiAKICAgICAgICAgUnVudGltZSBmZWF0dXJlIGZsYWcgZm9yIFNlcnZlci1UaW1pbmcKSW5kZXg6
IFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6Okhvc3RJbmZvcm1hdGlvCiAgICAgICAgIHJldHVybiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7
CiAKICAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBTdHJpbmcgaG9zdE5hbWUg
PSB1cmwuaG9zdCgpOworICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0KCkudG9TdHJpbmco
KTsKICAgICBIb3N0SW5mb3JtYXRpb24qIGhvc3QgPSBtX2hvc3RzLmdldChob3N0TmFtZSk7CiAg
ICAgaWYgKCFob3N0ICYmIGNyZWF0ZUhvc3RQb2xpY3kgPT0gQ3JlYXRlSWZOb3RGb3VuZCkgewog
ICAgICAgICBob3N0ID0gbmV3IEhvc3RJbmZvcm1hdGlvbihob3N0TmFtZSwgbWF4UmVxdWVzdHNJ
bkZsaWdodFBlckhvc3QpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjMyMTkwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTgtMDUtMjUgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVUkw6Omhvc3Qgc2hvdWxkIHJl
dHVybiBhIFN0cmluZ1ZpZXcgdG8gcmVkdWNlIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU5ODYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9VUkwuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OmVxKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xL
ZXlHZW5lcmF0b3IubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTU0xLZXlHZW5lcmF0b3JU
ZXN0OjpUZWFyRG93bik6CisKIDIwMTgtMDUtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBSZWR1Y2UgY29weWluZyBvZiBGb250Q2FzY2FkZURlc2NyaXB0aW9u
IG9iamVjdHMgYnkgbW92aW5nIHRoZW0gYXJvdW5kCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvVVJMLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDcgQEAgVEVTVF9GKFVSTFRlc3QsIFVSTENvbnN0cnVjdG9yQ29uc3RDaGFyKQogICAgIEVYUEVD
VF9UUlVFKGt1cmwuaXNWYWxpZCgpKTsKIAogICAgIEVYUEVDVF9FUShrdXJsLnByb3RvY29sKCkg
PT0gImh0dHAiLCB0cnVlKTsKLSAgICBFWFBFQ1RfRVEoU3RyaW5nKCJ3d3cuZXhhbXBsZS5jb20i
KSwga3VybC5ob3N0KCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoInd3dy5leGFtcGxlLmNvbSIp
LCBrdXJsLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBFWFBFQ1RfVFJVRSghIWt1cmwucG9ydCgp
KTsKICAgICBFWFBFQ1RfRVEoODA4MCwga3VybC5wb3J0KCkudmFsdWUoKSk7CiAgICAgRVhQRUNU
X0VRKFN0cmluZygidXNlcm5hbWUiKSwga3VybC51c2VyKCkpOwpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIzMjE3
NSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw4IEBAIHN0cnVjdCBFeHBlY3RlZFBhcnRzIHsKICAg
ICB9CiB9OwogCi1zdGF0aWMgYm9vbCBlcShjb25zdCBTdHJpbmcmIHMxLCBjb25zdCBTdHJpbmcm
IHMyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2Jvb2wgZXEoVCYmIHMxLCBV
JiYgczIpCiB7CiAgICAgRVhQRUNUX1NUUkVRKHMxLnV0ZjgoKS5kYXRhKCksIHMyLnV0ZjgoKS5k
YXRhKCkpOwogICAgIHJldHVybiBzMS51dGY4KCkgPT0gczIudXRmOCgpOwpAQCAtOTAsNyArOTEs
NyBAQCBzdGF0aWMgdm9pZCBjaGVja1VSTChjb25zdCBTdHJpbmcmIHVybFN0CiB7CiAgICAgYXV0
byB1cmwgPSBVUkwoVVJMKCksIHVybFN0cmluZyk7CiAgICAgCi0gICAgRVhQRUNUX1RSVUUoZXEo
cGFydHMucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShlcShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJV
RShlcShwYXJ0cy51c2VyLCB1cmwudXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMu
cGFzc3dvcmQsIHVybC5wYXNzKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1
cmwuaG9zdCgpKSk7CkBAIC0xMTcsNyArMTE4LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWxhdGl2
ZVVSTChjb25zdCBTdHJpbgogewogICAgIGF1dG8gdXJsID0gVVJMKFVSTChVUkwoKSwgYmFzZVVS
TFN0cmluZyksIHVybFN0cmluZyk7CiAgICAgCi0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJv
dG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShw
YXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
cy51c2VyLCB1cmwudXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFzc3dvcmQs
IHVybC5wYXNzKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgp
KSk7CkBAIC0xNDYsNyArMTQ3LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tVUkxEaWZmZXJlbmNlcyhj
b25zdCBTdAogICAgIFVOVVNFRF9QQVJBTShwYXJ0c09sZCk7IC8vIEZJWE1FOiBSZW1vdmUgYWxs
IHRoZSBvbGQgZXhwZWN0ZWQgcGFydHMuCiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKCksIHVybFN0
cmluZyk7CiAgICAgCi0gICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcucHJvdG9jb2wsIHVybC5w
cm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5wcm90
b2NvbCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy51c2Vy
LCB1cmwudXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcucGFzc3dvcmQsIHVy
bC5wYXNzKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5ob3N0LCB1cmwuaG9zdCgp
KSk7CkBAIC0xNzUsNyArMTc2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tSZWxhdGl2ZVVSTERpZmZl
cmVuY2VzKAogICAgIFVOVVNFRF9QQVJBTShwYXJ0c09sZCk7IC8vIEZJWE1FOiBSZW1vdmUgYWxs
IHRoZSBvbGQgZXhwZWN0ZWQgcGFydHMuCiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKFVSTCgpLCBi
YXNlVVJMU3RyaW5nKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
c05ldy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9U
UlVFKGVxKHBhcnRzTmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9U
UlVFKGVxKHBhcnRzTmV3LnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShw
YXJ0c05ldy5wYXNzd29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
TmV3Lmhvc3QsIHVybC5ob3N0KCkpKTsKQEAgLTIxMyw3ICsyMTQsNyBAQCBzdGF0aWMgdm9pZCBj
aGVja1VSTChjb25zdCBTdHJpbmcmIHVybFN0CiB7CiAgICAgVVJMUGFyc2VyIHBhcnNlcih1cmxT
dHJpbmcsIHsgfSwgZW5jb2RpbmcpOwogICAgIGF1dG8gdXJsID0gcGFyc2VyLnJlc3VsdCgpOwot
ICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmlu
ZygpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5wcm90b2NvbCgp
KSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMudXNlciwgdXJsLnVzZXIoKSkpOwogICAgIEVY
UEVDVF9UUlVFKGVxKHBhcnRzLnBhc3N3b3JkLCB1cmwucGFzcygpKSk7CiAgICAgRVhQRUNUX1RS
VUUoZXEocGFydHMuaG9zdCwgdXJsLmhvc3QoKSkpOwpAQCAtMjM5LDcgKzI0MCw3IEBAIHN0YXRp
YyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3QKICAgICBVUkxQYXJzZXIgYmFzZVBh
cnNlcihiYXNlVVJMU3RyaW5nLCB7IH0sIGVuY29kaW5nKTsKICAgICBVUkxQYXJzZXIgcGFyc2Vy
KHVybFN0cmluZywgYmFzZVBhcnNlci5yZXN1bHQoKSwgZW5jb2RpbmcpOwogICAgIGF1dG8gdXJs
ID0gcGFyc2VyLnJlc3VsdCgpOwotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1
cmwucHJvdG9jb2woKS50b1N0cmluZygpKSk7CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJv
dG9jb2wsIHVybC5wcm90b2NvbCgpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMudXNlciwg
dXJsLnVzZXIoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnBhc3N3b3JkLCB1cmwucGFz
cygpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMuaG9zdCwgdXJsLmhvc3QoKSkpOwpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5t
bQkocmV2aXNpb24gMjMyMTc1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NM
S2V5R2VuZXJhdG9yLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMiArODMsMTIgQEAgcHVibGlj
OgogICAgICAgICBTZWNJdGVtRGVsZXRlKChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7CiAg
ICAgICAgICAgICAoaWQpa1NlY0NsYXNzOiAoaWQpa1NlY0NsYXNzS2V5LAogICAgICAgICAgICAg
KGlkKWtTZWNBdHRyS2V5Q2xhc3M6IChpZClrU2VjQXR0cktleUNsYXNzUHJpdmF0ZSwKLSAgICAg
ICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBXZWJDb3JlOjprZXlnZW5LZXljaGFpbkl0ZW1OYW1l
KHVybC5ob3N0KCkpLAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdlYkNvcmU6Omtl
eWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmluZygpKSwKICAgICAgICAgfSk7
CiAgICAgICAgIFNlY0l0ZW1EZWxldGUoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKICAg
ICAgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCiAgICAgICAgICAgICAo
aWQpa1NlY0F0dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQdWJsaWMsCi0gICAgICAg
ICAgICAoaWQpa1NlY0F0dHJMYWJlbDogV2ViQ29yZTo6a2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1
cmwuaG9zdCgpKSwKKyAgICAgICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBXZWJDb3JlOjprZXln
ZW5LZXljaGFpbkl0ZW1OYW1lKHVybC5ob3N0KCkudG9TdHJpbmcoKSksCiAgICAgICAgIH0pOwog
ICAgIH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341311</attachid>
            <date>2018-05-25 12:53:13 -0700</date>
            <delta_ts>2018-05-25 13:25:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185986-20180525125310.patch</filename>
            <type>text/plain</type>
            <size>50184</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDE4LTA1LTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0
IHNob3VsZCByZXR1cm4gYSBTdHJpbmdWaWV3IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2
aW91ci4gIEp1c3QgZmV3ZXIgYWxsb2NhdGlvbnMuCisKKyAgICAgICAgKiBNb2R1bGVzL3BsdWdp
bnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzWW91
VHViZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVSTCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpob3N0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRI
YW5kc2hha2U6Omhvc3QgY29uc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb246OnBvcHVsYXRlQ29uZGl0aW9uQ2FjaGVJZk5lZWRlZCk6CisgICAgICAg
ICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVNlc3Np
b25UaXRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZWVkc1NlZWtpbmdTdXBwb3J0UXVp
cmspOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJbnMp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXNlckRpZENsaWNr
U25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3Vi
ZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5n
KToKKyAgICAgICAgKiBodG1sL1VSTFV0aWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpVUkxVdGls
czxUPjo6aG9zdG5hbWUgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMp
OgorICAgICAgICAqIGxvYWRlci9MaW5rTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmlt
YXJ5RG9tYWluKToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1tOgor
ICAgICAgICAoc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5cGUpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6bW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQpOgorICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TG9jYXRpb246Omhvc3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQpOgorICAgICAgICAqIHBh
Z2UvUGVyZm9ybWFuY2VNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydFBhZ2VP
dmVyUG9zdExvYWRSZXNvdXJjZVRocmVzaG9sZCk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0xvb3BiYWNrSVBBZGRyZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJl
c3MpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwYWdlL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
Ojpmcm9tVVJMKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNIb3N0IGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlOjpob3N0TWF0Y2hl
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vUHVibGljU3VmZml4Lmg6CisgICAgICAgICog
cGxhdGZvcm0vVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6aG9zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVUkw6Omhvc3RBbmRQb3J0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVSTDo6aXNNYXRjaGluZ0RvbWFpbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vVVJM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNBcmVFcXVhbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRQYXJ0aXRpb25pbmdEb21haW4pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZVN0cmVhbXMpOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246Omhvc3Ru
YW1lIGNvbnN0KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2VydmVyOjpwZXJmb3JtR2V0T3JpZ2luc1dpdGhSZWdp
c3RyYXRpb25zQ2FsbGJhY2tzKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gb2JqZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdp
bnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIHN0YXRpYyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OktleVZhbHUKICAgICAK
IHN0YXRpYyBib29sIGlzWW91VHViZVVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBTdHJpbmcg
aG9zdE5hbWUgPSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgpOwog
ICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0TmFtZSwgIm0ueW91
dHViZS5jb20iKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0
TmFtZSwgInlvdXR1LmJlIikKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoaG9zdE5hbWUsICJ3d3cueW91dHViZS5jb20iKQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0YXRp
YyBVUkwgcHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwoY28KICAgICBpZiAoIWlzWW91VHViZVVS
TCh1cmwpKQogICAgICAgICByZXR1cm4gVVJMKCk7CiAKLSAgICBTdHJpbmcgaG9zdE5hbWUgPSB1
cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgpOwogICAgIGJvb2wgaXNZ
b3VUdWJlTW9iaWxlV2ViQXBwVVJMID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9z
dE5hbWUsICJtLnlvdXR1YmUuY29tIik7CiAgICAgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0gZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdE5hbWUsICJ5b3V0dS5iZSIpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBVUkwmIHVybCwgYgog
ewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygid3NzIikgPT0gc2VjdXJlKTsKICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQodXJsLmhvc3QoKS5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCh1cmwuaG9zdCgpLnRvU3Ry
aW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgaWYgKHVybC5wb3J0KCkgJiYg
KCghc2VjdXJlICYmIHVybC5wb3J0KCkudmFsdWUoKSAhPSA4MCkgfHwgKHNlY3VyZSAmJiB1cmwu
cG9ydCgpLnZhbHVlKCkgIT0gNDQzKSkpIHsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJzonKTsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodXJsLnBvcnQoKS52YWx1ZSgpKTsKQEAgLTE0
Niw3ICsxNDYsNyBAQCB2b2lkIFdlYlNvY2tldEhhbmRzaGFrZTo6c2V0VVJMKGNvbnN0IFVSCiAv
LyBGSVhNRTogUmV0dXJuIHR5cGUgc2hvdWxkIGp1c3QgYmUgU3RyaW5nLCBub3QgY29uc3QgU3Ry
aW5nLgogY29uc3QgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6aG9zdCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fdXJsLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgIHJl
dHVybiBtX3VybC5ob3N0KCkudG9TdHJpbmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwog
fQogCiBjb25zdCBTdHJpbmcmIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50UHJvdG9jb2woKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uOjpwb3B1bGF0ZUNvbmRpdGlv
bgogICAgIGlmIChtX2NhY2hlZFRvcFVSTCAhPSB0b3BVUkwpIHsKICAgICAgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT50b3BVUkxGaWx0
ZXJzQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+dG9wVVJMRmlsdGVyc0J5dGVjb2Rl
TGVuZ3RoKCkpOwogICAgICAgICBjb25zdCB1aW50MTZfdCBhbGxMb2FkVHlwZXNBbmRSZXNvdXJj
ZVR5cGVzID0gTG9hZFR5cGVNYXNrIHwgUmVzb3VyY2VUeXBlTWFzazsKLSAgICAgICAgU3RyaW5n
IHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bigpID8gdG9wVVJMLmhvc3QoKSA6IHRvcFVSTC5zdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHN0
cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbigp
ID8gdG9wVVJMLmhvc3QoKS50b1N0cmluZygpIDogdG9wVVJMLnN0cmluZygpOwogICAgICAgICBh
dXRvIHRvcFVSTEFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQoc3RyaW5nLnV0ZjgoKSwg
YWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBlcyk7CiAgICAgICAgIAogICAgICAgICBtX2NhY2hl
ZFRvcFVSTEFjdGlvbnMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw3IEBA
IHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgICAgIFN0
cmluZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFsdWUp
OwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVuYWJsZWQoKSAmJiBk
b2N1bWVudCgpLmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJc0luSFRU
UEZhbWlseShwYXJzZWRVUkwpIHx8IHBhcnNlZFVSTC5zdGFydHNXaXRoKCIvLyIpKQotICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnByZWZl
dGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkpOworICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnByZWZl
dGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkudG9TdHJpbmco
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0ZUNhY2hlZFZp
c2l0ZWRMaW5rSGFzaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYxLDcgKzc0NjEsNyBAQCBTdHJpbmcg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNzaW9uVGl0CiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKIAotICAgIHRpdGxlID0gbV9jdXJyZW50U3JjLmhv
c3QoKTsKKyAgICB0aXRsZSA9IG1fY3VycmVudFNyYy5ob3N0KCkudG9TdHJpbmcoKTsKICNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkK
ICAgICAgICAgdGl0bGUgPSBkZWNvZGVIb3N0TmFtZSh0aXRsZSk7CkBAIC03NTI0LDcgKzc1MjQs
NyBAQCBzdGF0aWMgYm9vbCBuZWVkc1NlZWtpbmdTdXBwb3J0UXVpcmsoRG9jCiAgICAgaWYgKCFk
b2N1bWVudC5zZXR0aW5ncygpLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51
cmwoKS5ob3N0KCk7CisgICAgYXV0byBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwo
KS5ob3N0KCk7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhvc3Qs
ICJuZXRmbGl4LmNvbSIpIHx8IGhvc3QuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiLm5ldGZs
aXguY29tIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcgKzQz
NSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWkKICAgICAvLyBS
ZXN0YXJ0IGFueSBvdGhlciBzbmFwc2hvdHRlZCBwbHVnaW5zIGluIHRoZSBwYWdlIHdpdGggdGhl
IHNhbWUgb3JpZ2luLiBOb3RlIHRoYXQgdGhleQogICAgIC8vIG1heSBiZSBpbiBkaWZmZXJlbnQg
ZnJhbWVzLCBzbyB0cmF2ZXJzZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LgogCi0gICAg
U3RyaW5nIHBsdWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKKyAgICBhdXRvIHBsdWdJ
bk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBzZXJ2
aWNlVHlwZSgpOwogICAgIFZlY3RvcjxSZWY8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4+IHNpbWls
YXJQbHVnaW5zOwogCkBAIC00NjksOSArNDY5LDkgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50Ojp1c2VyRGlkQ2xpYwogICAgIGlmIChmb3J3YXJkRXZlbnQpCiAgICAgICAgIG1fcGVuZGlu
Z0NsaWNrRXZlbnRGcm9tU25hcHNob3QgPSAmZXZlbnQ7CiAKLSAgICBTdHJpbmcgcGx1Z0luT3Jp
Z2luID0gbV9sb2FkZWRVcmwuaG9zdCgpOworICAgIGF1dG8gcGx1Z0luT3JpZ2luID0gbV9sb2Fk
ZWRVcmwuaG9zdCgpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiAhU2NoZW1lUmVnaXN0
cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChkb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZy
YW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29w
eWluZygpKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+c2V0dGluZ3MoKS5hdXRvc3RhcnRPcmlnaW5Q
bHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5w
bHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCkucGFnZSgpLT5tYWlu
RnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLCBwbHVnSW5PcmlnaW4sIHNlcnZp
Y2VUeXBlKCksIGRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CisgICAgICAgIGRvY3Vt
ZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50
KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRvU3Ry
aW5nKCksIHBsdWdJbk9yaWdpbi50b1N0cmluZygpLCBzZXJ2aWNlVHlwZSgpLCBkb2N1bWVudCgp
LnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwogCiAgICAgTE9HKFBsdWdpbnMsICIlcCBVc2VyIGNsaWNr
ZWQgb24gc25hcHNob3R0ZWQgcGx1Zy1pbi4gUmVzdGFydC4iLCB0aGlzKTsKICAgICByZXN0YXJ0
U25hcHNob3R0ZWRQbHVnSW4oKTsKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9hCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoZG9jdW1lbnQoKS5wYWdlKCktPnNldHRpbmdzKCkuYXV0b3N0YXJ0T3JpZ2luUGx1Z0luU25h
cHNob3R0aW5nRW5hYmxlZCgpICYmIGRvY3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQoKSAm
JiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9TdGFydEZyb21P
cmlnaW4oZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwo
KS5ob3N0KCksIHVybC5ob3N0KCksIHNlcnZpY2VUeXBlKCkpKSB7CisgICAgaWYgKGRvY3VtZW50
KCkucGFnZSgpLT5zZXR0aW5ncygpLmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGluZ0Vu
YWJsZWQoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCkgJiYgZG9jdW1lbnQo
KS5wYWdlKCktPnBsdWdJbkNsaWVudCgpLT5zaG91bGRBdXRvU3RhcnRGcm9tT3JpZ2luKGRvY3Vt
ZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRv
U3RyaW5nKCksIHVybC5ob3N0KCkudG9TdHJpbmcoKSwgc2VydmljZVR5cGUoKSkpIHsKICAgICAg
ICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRvIGF1
dG8tc3RhcnQsIHNldCB0byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFt
ZSgpLmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLmhvc3Qo
KS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFw
c2hvdDsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBJbWFnZURv
Y3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUgaG9z
dG5hbWUgaWYgdGhlcmUgaXMgbm8gcGF0aC4KICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogICAgICAg
ICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG5hbWUgPSB1cmwoKS5o
b3N0KCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IHVybCgpLmhvc3QoKS50b1N0cmluZygpOwog
ICAgICAgICAgICAgc2V0VGl0bGUoaW1hZ2VUaXRsZShuYW1lLCBzaXplKSk7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvVVJMVXRpbHMuaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcg
QEAgdm9pZCBVUkxVdGlsczxUPjo6c2V0SG9zdChjb25zdCBTdHJpbmcmIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CiBTdHJpbmcgVVJMVXRpbHM8VD46Omhvc3RuYW1lKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaHJlZigpLmhvc3QoKTsKKyAgICByZXR1cm4gaHJlZigpLmhvc3QoKS50b1N0cmluZygp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZQogICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCZtX2ZyYW1lKSkKICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlGb3JD
b29raWVzKHVybCk7CiAKLSAgICBTdHJpbmcgcmVnaXN0cmFibGVEb21haW4gPSBSZXNvdXJjZVJl
cXVlc3Q6OnBhcnRpdGlvbk5hbWUodXJsLmhvc3QoKSk7CisgICAgU3RyaW5nIHJlZ2lzdHJhYmxl
RG9tYWluID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKHVybC5ob3N0KCkudG9TdHJp
bmcoKSk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKSB7CiAgICAgICAgIGlmIChTZWN1
cml0eVBvbGljeTo6c2hvdWxkSW5oZXJpdFNlY3VyaXR5T3JpZ2luRnJvbU93bmVyKGZyYW1lLT5k
b2N1bWVudCgpLT51cmwoKSkgfHwgcmVnaXN0cmFibGVEb21haW5zQXJlRXF1YWwoZnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpLCByZWdpc3RyYWJsZURvbWFpbikpCiAgICAgICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvclNhbWVTaXRlQ29va2llcyh1cmwpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
NyArMjk0LDcgQEAgYm9vbCBMaW5rTG9hZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQogICAg
ICAgICAvLyBGSVhNRTogVGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSBsaW5rIGVsZW1lbnQgY2Fu
IGJlIGluICIvL2hvc3RuYW1lIiBmb3JtLCBhbmQgd2Ugc2hvdWxkbid0IGF0dGVtcHQKICAgICAg
ICAgLy8gdG8gY29tcGxldGUgdGhhdCBhcyBVUkwgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODg1Nz4uCiAgICAgICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygpLmRu
c1ByZWZldGNoaW5nRW5hYmxlZCgpICYmIGhyZWYuaXNWYWxpZCgpICYmICFocmVmLmlzRW1wdHko
KSAmJiBkb2N1bWVudC5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQuZnJhbWUoKS0+bG9h
ZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0KCkpOworICAgICAgICAgICAgZG9j
dW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0KCku
dG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgcHJlY29ubmVjdElmTmVlZGVkKHJlbEF0dHJpYnV0
ZSwgaHJlZiwgZG9jdW1lbnQsIGNyb3NzT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIzMjE3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
czo6bWVyZ2UoY29uc3QKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlE
b21haW4oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhv
c3QoKSk7CisgICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKS50b1N0cmluZygpKTsK
IH0KIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oY29uc3Qg
U3RyaW5nJiBob3N0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJOU1VS
TEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRl
ck5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZSgKIAogICAgIGlmIChb
ZmlsZW5hbWUgbGVuZ3RoXSA9PSAwIHx8IFtsYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsVG9TdHJp
bmc6QCIvIl0pIHsKICAgICAgICAgLy8gbGFzdFBhdGhDb21wb25lbnQgaXMgbm8gZ29vZCwgdHJ5
IHRoZSBob3N0LgotICAgICAgICBOU1N0cmluZyAqaG9zdCA9IFVSTCh1cmwpLmhvc3QoKTsKKyAg
ICAgICAgTlNTdHJpbmcgKmhvc3QgPSBVUkwodXJsKS5ob3N0KCkudG9TdHJpbmcoKTsKICAgICAg
ICAgZmlsZW5hbWUgPSBmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMoaG9zdCk7CiAg
ICAgICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBDYW4n
dCBtYWtlIGEgZmlsZW5hbWUgdXNpbmcgdGhpcyBVUkwsIHVzZSAidW5rbm93biIuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIENo
cm9tZTo6c2V0U3RhdHVzYmFyVGV4dChGcmFtZSYgZnJhCiB2b2lkIENocm9tZTo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2Rp
ZmllckZsYWdzKQogewogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkgJiYgcmVzdWx0LmlubmVy
Tm9kZSgpLT5kb2N1bWVudCgpLmlzRE5TUHJlZmV0Y2hFbmFibGVkKCkpCi0gICAgICAgIG1fcGFn
ZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhyZXN1bHQuYWJzb2x1
dGVMaW5rVVJMKCkuaG9zdCgpKTsKKyAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigp
LmNsaWVudCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgbV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0LCBt
b2RpZmllckZsYWdzKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQobV9wYWdlLCByZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFN0cmlu
ZyBMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybCgpLmhvc3QoKTsKKyAgICByZXR1cm4g
dXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBMb2NhdGlvbjo6cG9ydCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDQsNyArMjEwNCw3IEBA
IHZvaWQgUGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQoY29uc3QgVVIKIHsKICAgICBTdHJpbmcg
ZG9tYWluOwogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0gICAgZG9tYWluID0gdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkZXN0aW5hdGlvblVSTC5ob3N0KCkpOworICAgIGRv
bWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oZGVzdGluYXRpb25VUkwuaG9zdCgp
LnRvU3RyaW5nKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTW9uaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZU1vbml0b3IuY3Bw
CShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTW9u
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgdm9pZCBy
ZXBvcnRQYWdlT3ZlclBvc3RMb2FkUmVzb3VyCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKSk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKS50b1N0cmluZygpKTsK
ICAgICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjbwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNMb29wYmFja0lQQWRkcmVzcyhjb25z
dCBTdHJpbmcmIGhvc3QpCitzdGF0aWMgYm9vbCBpc0xvb3BiYWNrSVBBZGRyZXNzKFN0cmluZ1Zp
ZXcgaG9zdCkKIHsKICAgICAvLyBUaGUgSVB2NiBsb29wYmFjayBhZGRyZXNzIGlzIDA6MDowOjA6
MDowOjA6MSwgd2hpY2ggY29tcHJlc3NlcyB0byA6OjEuCiAgICAgaWYgKGhvc3QgPT0gIls6OjFd
IikKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdEFzUG90ZW50aWFs
bHlUcnVzCiAKIGJvb2wgc2hvdWxkVHJlYXRBc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY29uc3Qg
VVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29y
dGh5KHVybC5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3QoKSk7
CisgICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5wcm90
b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3QoKS50b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkpOwogfQogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3Qg
VVJMJiB1cmwpCkBAIC01NDgsNyArNTQ4LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNTYW1l
U2NoZW1lSG9zdFBvcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNlY3VyaXR5T3JpZ2lu
Ojppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KQorYm9v
bCBTZWN1cml0eU9yaWdpbjo6aXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKFN0cmluZ1Zp
ZXcgaG9zdCkKIHsKICAgICBpZiAoaXNMb29wYmFja0lQQWRkcmVzcyhob3N0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShyZXZp
c2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUG90
ZW50aWFsbHlUcnVzdHdvcnRoeSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQb3RlbnRpYWxseVRydXN0
d29ydGh5OyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJl
c3MoY29uc3QgU3RyaW5nJiBob3N0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9yTG9v
cGJhY2tJUEFkZHJlc3MoU3RyaW5nVmlldyk7CiAKICAgICBjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIHsKICAgICAgICAgcmV0
dXJuIFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAgICAgICAgICAgICB1cmwucHJvdG9jb2woKS5pc051
bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB1cmwucHJvdG9jb2woKS50b1N0cmluZygpLmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCksCi0gICAgICAgICAgICB1cmwuaG9zdCgpLmlzTnVsbCgpID8gZW1w
dHlTdHJpbmcoKSA6IHVybC5ob3N0KCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSwKKyAgICAg
ICAgICAgIHVybC5ob3N0KCkuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdXJsLmhvc3QoKS50
b1N0cmluZygpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCksCiAgICAgICAgICAgICB1cmwucG9y
dCgpCiAgICAgICAgIH07CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
NyArMTI1LDcgQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXMoY29ucwogCiBi
b29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc0hvc3QoY29uc3QgVVJMJiB0ZXN0KSBj
b25zdAogewotICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IHRlc3QuaG9zdCgpOworICAgIGF1dG8g
aG9zdCA9IHRlc3QuaG9zdCgpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGhvc3Qs
IG1faG9zdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAJKHJl
dmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OnNjaGVtZQogCiBib29sIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZTo6aG9zdE1hdGNoZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgU3RyaW5nJiBob3N0ID0gdXJsLmhvc3QoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShob3N0LCBtX2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIi4iICsgbV9ob3N0KSk7CisgICAgYXV0byBob3N0ID0g
dXJsLmhvc3QoKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShob3N0LCBtX2hv
c3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UobWFrZVN0cmluZygiLiIsIG1faG9zdCkpKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QdWJsaWNTdWZmaXguaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUHVibGljU3VmZml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFB1
YmxpY1N1ZmZpeF9oCi0jZGVmaW5lIFB1YmxpY1N1ZmZpeF9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSw1ICszOCwzIEBAIFN0cmluZyBk
ZWNvZGVIb3N0TmFtZShjb25zdCBTdHJpbmcmIGRvbWEKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0KLSNlbmRpZiAvLyBQdWJs
aWNTdWZmaXhfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCShyZXZpc2lvbiAyMzIxNzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsMTAgKzE1NSwxMCBAQCBTdHJpbmdWaWV3IFVSTDo6cHJvdG9jb2woKSBjb25zdAogICAgIHJl
dHVybiBTdHJpbmdWaWV3KG1fc3RyaW5nKS5zdWJzdHJpbmcoMCwgbV9zY2hlbWVFbmQpOwogfQog
Ci1TdHJpbmcgVVJMOjpob3N0KCkgY29uc3QKK1N0cmluZ1ZpZXcgVVJMOjpob3N0KCkgY29uc3QK
IHsKICAgICB1bnNpZ25lZCBzdGFydCA9IGhvc3RTdGFydCgpOwotICAgIHJldHVybiBtX3N0cmlu
Zy5zdWJzdHJpbmcoc3RhcnQsIG1faG9zdEVuZCAtIHN0YXJ0KTsKKyAgICByZXR1cm4gU3RyaW5n
VmlldyhtX3N0cmluZykuc3Vic3RyaW5nKHN0YXJ0LCBtX2hvc3RFbmQgLSBzdGFydCk7CiB9CiAK
IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IFVSTDo6cG9ydCgpIGNvbnN0CkBAIC0xODAsOCArMTgw
LDggQEAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gVVJMOjpwb3J0KCkgY29ucwogU3RyaW5nIFVS
TDo6aG9zdEFuZFBvcnQoKSBjb25zdAogewogICAgIGlmIChhdXRvIHBvcnQgPSB0aGlzLT5wb3J0
KCkpCi0gICAgICAgIHJldHVybiBob3N0KCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0LnZh
bHVlKCkpOwotICAgIHJldHVybiBob3N0KCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGhv
c3QoKSwgJzonLCBTdHJpbmc6Om51bWJlcihwb3J0LnZhbHVlKCkpKTsKKyAgICByZXR1cm4gaG9z
dCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBVUkw6OnByb3RvY29sSG9zdEFuZFBvcnQoKSBj
b25zdApAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgVVJMOjppc01hdGNoaW5nRG9tYWluKGNvbnN0
IFN0cmluZyYKICAgICBpZiAoIWhvc3QuZW5kc1dpdGgoZG9tYWluKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIGhvc3QubGVuZ3RoKCkgPT0gZG9tYWluLmxlbmd0aCgpIHx8
IGhvc3QuY2hhcmFjdGVyQXQoaG9zdC5sZW5ndGgoKSAtIGRvbWFpbi5sZW5ndGgoKSAtIDEpID09
ICcuJzsKKyAgICByZXR1cm4gaG9zdC5sZW5ndGgoKSA9PSBkb21haW4ubGVuZ3RoKCkgfHwgaG9z
dFtob3N0Lmxlbmd0aCgpIC0gZG9tYWluLmxlbmd0aCgpIC0gMV0gPT0gJy4nOwogfQogCiBTdHJp
bmcgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIGlucHV0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMLmgJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5n
dGgodW5zaWduZWQgbGVuZ3RoID0gMTAyNCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBT
dHJpbmdWaWV3IHByb3RvY29sKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGhv
c3QoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmdWaWV3IGhvc3QoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KCkgY29uc3Q7
CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGhvc3RBbmRQb3J0KCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHByb3RvY29sSG9zdEFuZFBvcnQoKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAkocmV2aXNpb24gMjMy
MTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBib29sIGlzR29vZ2xlKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFN0cmluZyBiYXNlRG9tYWlu
ID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBTdHJpbmcg
YmFzZURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50b1N0
cmluZygpKTsKIAogICAgIC8vIE91ciBHb29nbGUgVUEgaXMgKnZlcnkqIGNvbXBsaWNhdGVkIHRv
IGdldCByaWdodC4gUmVhZAogICAgIC8vIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MjA3NCBjYXJl
ZnVsbHkgYmVmb3JlIGNoYW5naW5nLiBUZXN0IHRoYXQgRWFydGgKQEAgLTYwLDcgKzYwLDcgQEAg
c3RhdGljIGJvb2wgaXNHb29nbGUoY29uc3QgVVJMJiB1cmwpCiAvLyB0aGF0IHdvcmtzIGluIENo
cm9tZSB0aGF0IFdlYktpdCBjYW5ub3QgaGFuZGxlLiBQcmVmZXIgb3RoZXIgcXVpcmtzIGluc3Rl
YWQuCiBzdGF0aWMgYm9vbCB1cmxSZXF1aXJlc0Nocm9tZUJyb3dzZXIoY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgU3RyaW5nIGJhc2VEb21haW4gPSB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
KHVybC5ob3N0KCkpOworICAgIFN0cmluZyBiYXNlRG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbih1cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogCiAgICAgLy8gTmVlZGVkIGZvciBm
b250cyBvbiBtYW55IHNpdGVzIHRvIHdvcmsgd2l0aCBXZWJLaXQuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI5NgpAQCAtNzgsNyArNzgsNyBAQCBz
dGF0aWMgYm9vbCB1cmxSZXF1aXJlc0Nocm9tZUJyb3dzZXIoY29uCiAKIHN0YXRpYyBib29sIHVy
bFJlcXVpcmVzTWFjaW50b3NoUGxhdGZvcm0oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgU3RyaW5n
IGRvbWFpbiA9IHVybC5ob3N0KCk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHVybC5ob3N0KCkudG9T
dHJpbmcoKTsKICAgICBTdHJpbmcgYmFzZURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW4oZG9tYWluKTsKIAogICAgIC8vIEF0IGxlYXN0IGZpbmFuY2UueWFob28uY29tIGRpc3Bs
YXlzIGEgbW9iaWxlIHZlcnNpb24gd2l0aCBXZWJLaXRHVEsrJ3Mgc3RhbmRhcmQgdXNlciBhZ2Vu
dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVy
YXRvck1hYy5tbQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3
IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKIAogICAgIGF1dG8g
Y2hhbGxlbmdlID0gY2hhbGxlbmdlU3RyaW5nLmlzQWxsQVNDSUkoKSA/IGNoYWxsZW5nZVN0cmlu
Zy5hc2NpaSgpIDogIiI7CiAKLSAgICByZXR1cm4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
U3RyaW5nKGtleVNpemUsIGNoYWxsZW5nZSwga2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9z
dCgpKSk7CisgICAgcmV0dXJuIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlT
aXplLCBjaGFsbGVuZ2UsIGtleWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmlu
ZygpKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU1LDExICsyNTUsMTEgQEAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmll
bGRzKGNvbnN0IFJlcwogLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgZm9yIHRoZXNlIGZ1
bmN0aW9ucy4KIGlubGluZSBib29sIHJlZ2lzdHJhYmxlRG9tYWluc0FyZUVxdWFsKGNvbnN0IFVS
TCYgYSwgY29uc3QgVVJMJiBiKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpw
YXJ0aXRpb25OYW1lKGEuaG9zdCgpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25O
YW1lKGIuaG9zdCgpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6cGFydGl0aW9u
TmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRp
b25OYW1lKGIuaG9zdCgpLnRvU3RyaW5nKCkpOwogfQogaW5saW5lIGJvb2wgcmVnaXN0cmFibGVE
b21haW5zQXJlRXF1YWwoY29uc3QgVVJMJiBhLCBjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9t
YWluKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGEu
aG9zdCgpKSA9PSByZWdpc3RyYWJsZURvbWFpbjsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6cGFydGl0aW9uTmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSByZWdpc3RyYWJsZURv
bWFpbjsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYikgeyByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6ZXF1YWwoYSwgYik7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3Bw
CShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDEx
ICsxOTgsMTEgQEAgU3RyaW5nIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llU3Rvcgogc3Rh
dGljIGlubGluZSBTdHJpbmcgZ2V0UGFydGl0aW9uaW5nRG9tYWluKGNvbnN0IFVSTCYgdXJsKSAK
IHsKICNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQotICAgIGF1dG8gZG9tYWluID0gdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBhdXRvIGRvbWFpbiA9
IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50b1N0cmluZygpKTsKICAg
ICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKLSAgICAgICAgZG9tYWluID0gdXJsLmhvc3QoKTsKKyAg
ICAgICAgZG9tYWluID0gdXJsLmhvc3QoKS50b1N0cmluZygpOwogI2Vsc2UKLSAgICBhdXRvIGRv
bWFpbiA9IHVybC5ob3N0KCk7CisgICAgYXV0byBkb21haW4gPSB1cmwuaG9zdCgpLnRvU3RyaW5n
KCk7CiAjZW5kaWYKICAgICByZXR1cm4gZG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbENGTmV0LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
OjpjcmVhdGVTdHJlYQogICAgIGlmIChtX2Nvbm5lY3Rpb25UeXBlID09IFVua25vd24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9IG1fdXJsLmhv
c3QoKS5jcmVhdGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9
IG1fdXJsLmhvc3QoKS50b1N0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICAgICAvLyBDcmVh
dGluZyBzdHJlYW1zIHRvIGZpbmFsIGRlc3RpbmF0aW9uLCBub3QgdG8gcHJveHkuCiAgICAgQ0ZS
ZWFkU3RyZWFtUmVmIHJlYWRTdHJlYW0gPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCShyZXZpc2lvbiAyMzIx
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9vbCBDb29raWVKYXJEQjo6
c2VhcmNoQ29va2llcyhjb25zdCBTdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBVUkwg
cmVxdWVzdFVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHJlcXVlc3RVcmwpOwotICAgIFN0cmluZyBy
ZXF1ZXN0SG9zdChyZXF1ZXN0VXJsT2JqLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
KTsKKyAgICBTdHJpbmcgcmVxdWVzdEhvc3QocmVxdWVzdFVybE9iai5ob3N0KCkudG9TdHJpbmco
KS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKICAgICBTdHJpbmcgcmVxdWVzdFBhdGgocmVx
dWVzdFVybE9iai5wYXRoKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAKICAgICBpZiAo
cmVxdWVzdEhvc3QuaXNFbXB0eSgpKQpAQCAtMzgyLDcgKzM4Miw3IEBAIGludCBDb29raWVKYXJE
Qjo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgVVJM
IHVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgU3RyaW5nIGhvc3QodXJsT2JqLmhv
c3QoKSk7CisgICAgU3RyaW5nIGhvc3QodXJsT2JqLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBT
dHJpbmcgcGF0aCh1cmxPYmoucGF0aCgpKTsKIAogICAgIENvb2tpZSBjb29raWVPYmo7CkBAIC00
MTcsNyArNDE3LDcgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3RyaQog
CiAgICAgVVJMIHVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHVybENvcGllZCk7CiAgICAgaWYgKHVy
bE9iai5pc1ZhbGlkKCkpIHsKLSAgICAgICAgU3RyaW5nIGhvc3RTdHIodXJsT2JqLmhvc3QoKSk7
CisgICAgICAgIFN0cmluZyBob3N0U3RyKHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7CiAgICAg
ICAgIFN0cmluZyBwYXRoU3RyKHVybE9iai5wYXRoKCkpOwogICAgICAgICBpbnQgcmV0ID0gZGVs
ZXRlQ29va2llSW50ZXJuYWwobmFtZSwgaG9zdFN0ciwgcGF0aFN0cik7CiAgICAgICAgIEFTU0VS
VChjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0LCBTUUxJVEVfRE9ORSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3
b3JrU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzcsNyArMjc3LDcgQEAgc3RkOjpvcHRpb25hbDxSZXNvdXJjZUVycm9yPiBTb3VwTmV0d29y
awogICAgIGlmICghdGxzRXJyb3JzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgYXV0byBpdCA9IGNsaWVudENlcnRpZmljYXRlcygpLmZpbmQocmVxdWVzdFVSTC5ob3N0KCkp
OworICAgIGF1dG8gaXQgPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKHJlcXVlc3RVUkwuaG9z
dCgpLnRvU3RyaW5nKCkpOwogICAgIGlmIChpdCAhPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQo
KSAmJiBpdC0+dmFsdWUuY29udGFpbnMoY2VydGlmaWNhdGUpKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9u
LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJM
b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgU3RyaW5nIFdvcmtl
ckxvY2F0aW9uOjpob3N0KCkgY29uc3QKIAogU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpob3N0bmFt
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdXJsLmhvc3QoKTsKKyAgICByZXR1cm4gbV91cmwu
aG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBXb3JrZXJMb2NhdGlvbjo6cG9ydCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1NXU2VydmVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9zZXJ2aWNlL3NlcnZlci9TV1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Niw3ICs4
NjYsNyBAQCB2b2lkIFNXU2VydmVyOjpwZXJmb3JtR2V0T3JpZ2luc1dpdGhSZWdpCiAgICAgSGFz
aFNldDxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnNXaXRoUmVnaXN0cmF0aW9uczsKICAgICBm
b3IgKGF1dG8mIGtleSA6IG1fcmVnaXN0cmF0aW9ucy5rZXlzKCkpIHsKICAgICAgICAgb3JpZ2lu
c1dpdGhSZWdpc3RyYXRpb25zLmFkZChrZXkudG9wT3JpZ2luKCkpOwotICAgICAgICBvcmlnaW5z
V2l0aFJlZ2lzdHJhdGlvbnMuYWRkKFNlY3VyaXR5T3JpZ2luRGF0YSB7IGtleS5zY29wZSgpLnBy
b3RvY29sKCkudG9TdHJpbmcoKSwga2V5LnNjb3BlKCkuaG9zdCgpLCBrZXkuc2NvcGUoKS5wb3J0
KCkgfSk7CisgICAgICAgIG9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucy5hZGQoU2VjdXJpdHlPcmln
aW5EYXRhIHsga2V5LnNjb3BlKCkucHJvdG9jb2woKS50b1N0cmluZygpLCBrZXkuc2NvcGUoKS5o
b3N0KCkudG9TdHJpbmcoKSwga2V5LnNjb3BlKCkucG9ydCgpIH0pOwogICAgIH0KIAogICAgIGF1
dG8gY2FsbGJhY2tzID0gV1RGTW92ZShtX2dldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9uc0NhbGxi
YWNrcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxOC0wNS0yNSAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVSTDo6
aG9zdCBzaG91bGQgcmV0dXJuIGEgU3RyaW5nVmlldyB0byByZWR1Y2UgYWxsb2NhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTk4NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpmZXRjaERpc2tDYWNoZUVu
dHJpZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OmFyZUZyYW1lQW5jZXN0b3JzU2FtZVNpdGUpOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6b3ZlcnJpZGVTeXN0ZW1Qcm94aWVzKToKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSVVS
TC5oOgorICAgICAgICAoQVBJOjpVUkw6Omhvc3QgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1By
b3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JGYWlsZWRUb0xhdW5jaCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5W
aWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5mb1Byb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGx1Z2luSW5mb1Byb3ZpZGVyOjpwb3B1bGF0ZVBsdWdpbkNhY2hlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Om5lZWRzSGlk
ZGVuQ29udGVudEVkaXRhYmxlUXVpcmspOgorICAgICAgICAoV2ViS2l0OjpuZWVkc1BsYWluVGV4
dFF1aXJrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGV0ZXJtaW5lUHJpbWFyeVNuYXBz
aG90dGVkUGx1Z0luKToKKwogMjAxOC0wNS0yNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHBsdWdpbiBzZWFyY2ggcGF0aCB0byBsb29rIGZvciB1
c2VyIGluc3RhbGxlZCBwbHVnaW5zCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4MSw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCBmZXRjaERpc2tDYWNoZUVudHJpZXMoUEFMOjpT
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gdXJsID0gdHJhdmVyc2FsRW50cnkt
PmVudHJ5LnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG9yaWdp
bnNBbmRTaXplcy5hZGQoe3VybC5wcm90b2NvbCgpLnRvU3RyaW5nKCksIHVybC5ob3N0KCksIHVy
bC5wb3J0KCl9LCAwKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gb3JpZ2luc0FuZFNpemVz
LmFkZCh7dXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSwgdXJsLmhvc3QoKS50b1N0cmluZygpLCB1
cmwucG9ydCgpfSwgMCk7CiAKICAgICAgICAgICAgIGlmIChmZXRjaE9wdGlvbnMuY29udGFpbnMo
V2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6Q29tcHV0ZVNpemVzKSkKICAgICAgICAgICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlICs9IHRyYXZlcnNhbEVudHJ5LT5lbnRyeS5zb3VyY2VTdG9y
YWdlUmVjb3JkKCkuaGVhZGVyLnNpemUoKSArIHRyYXZlcnNhbEVudHJ5LT5yZWNvcmRJbmZvLmJv
ZHlTaXplOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0
KCkKIHN0YXRpYyBib29sIGFyZUZyYW1lQW5jZXN0b3JzU2FtZVNpdGUoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiYg
ZnJhbWVBbmNlc3Rvck9yaWdpbnMpCiB7CiAjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkK
LSAgICBhdXRvIHJlc3BvbnNlUGFydGl0aW9uID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25O
YW1lKHJlc3BvbnNlLnVybCgpLmhvc3QoKSk7CisgICAgYXV0byByZXNwb25zZVBhcnRpdGlvbiA9
IFJlc291cmNlUmVxdWVzdDo6cGFydGl0aW9uTmFtZShyZXNwb25zZS51cmwoKS5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgcmV0dXJuIGZyYW1lQW5jZXN0b3JPcmlnaW5zLmZpbmRNYXRjaGluZyhb
Jl0oY29uc3QgYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gaXRlbS0+aXNVbmlxdWUoKSB8
fCBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUoaXRlbS0+aG9zdCgpKSAhPSByZXNwb25z
ZVBhcnRpdGlvbjsKICAgICB9KSA9PSBub3RGb3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCShyZXZpc2lv
biAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJv
Y2Vzc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgdm9pZCBv
dmVycmlkZVN5c3RlbVByb3hpZXMoY29uc3QgCiAgICAgaWYgKCFodHRwUHJveHkuaXNOdWxsKCkp
IHsKICAgICAgICAgVVJMIGh0dHBQcm94eVVSTChVUkwoKSwgaHR0cFByb3h5KTsKICAgICAgICAg
aWYgKGh0dHBQcm94eVVSTC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIFtwcm94eVNldHRpbmdz
IHNldE9iamVjdDpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGh0dHBQcm94eVVSTC5ob3N0KCkp
IGZvcktleTooTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGllc0hUVFBQcm94eV07CisgICAgICAg
ICAgICBbcHJveHlTZXR0aW5ncyBzZXRPYmplY3Q6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyho
dHRwUHJveHlVUkwuaG9zdCgpLnRvU3RyaW5nKCkpIGZvcktleTooTlNTdHJpbmcgKilrQ0ZOZXR3
b3JrUHJveGllc0hUVFBQcm94eV07CiAgICAgICAgICAgICBpZiAoaHR0cFByb3h5VVJMLnBvcnQo
KSkgewogICAgICAgICAgICAgICAgIE5TTnVtYmVyICpwb3J0ID0gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6aHR0cFByb3h5VVJMLnBvcnQoKS52YWx1ZSgpXTsKICAgICAgICAgICAgICAgICBbcHJv
eHlTZXR0aW5ncyBzZXRPYmplY3Q6cG9ydCBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1By
b3hpZXNIVFRQUG9ydF07CkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyB2b2lkIG92ZXJyaWRlU3lz
dGVtUHJveGllcyhjb25zdCAKICAgICAgICAgVVJMIGh0dHBzUHJveHlVUkwoVVJMKCksIGh0dHBz
UHJveHkpOwogICAgICAgICBpZiAoaHR0cHNQcm94eVVSTC5pc1ZhbGlkKCkpIHsKICNpZiAhRU5B
QkxFKE1JTklNQUxfU0lNVUxBVE9SKQotICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2Jq
ZWN0Om5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoaHR0cHNQcm94eVVSTC5ob3N0KCkpIGZvcktl
eTooTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGllc0hUVFBTUHJveHldOworICAgICAgICAgICAg
W3Byb3h5U2V0dGluZ3Mgc2V0T2JqZWN0Om5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoaHR0cHNQ
cm94eVVSTC5ob3N0KCkudG9TdHJpbmcoKSkgZm9yS2V5OihOU1N0cmluZyAqKWtDRk5ldHdvcmtQ
cm94aWVzSFRUUFNQcm94eV07CiAgICAgICAgICAgICBpZiAoaHR0cHNQcm94eVVSTC5wb3J0KCkp
IHsKICAgICAgICAgICAgICAgICBOU051bWJlciAqcG9ydCA9IFtOU051bWJlciBudW1iZXJXaXRo
SW50Omh0dHBzUHJveHlVUkwucG9ydCgpLnZhbHVlKCldOwogICAgICAgICAgICAgICAgIFtwcm94
eVNldHRpbmdzIHNldE9iamVjdDpwb3J0IGZvcktleTooTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJv
eGllc0hUVFBTUG9ydF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJVVJMLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0FQSVVSTC5oCShyZXZpc2lv
biAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJVVJMLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIFdURjo6U3RyaW5nIGhvc3QoKSBj
b25zdAogICAgIHsKICAgICAgICAgcGFyc2VVUkxJZk5lY2Vzc2FyeSgpOwotICAgICAgICByZXR1
cm4gbV9wYXJzZWRVUkwtPmlzVmFsaWQoKSA/IG1fcGFyc2VkVVJMLT5ob3N0KCkgOiBXVEY6OlN0
cmluZygpOworICAgICAgICByZXR1cm4gbV9wYXJzZWRVUkwtPmlzVmFsaWQoKSA/IG1fcGFyc2Vk
VVJMLT5ob3N0KCkudG9TdHJpbmcoKSA6IFdURjo6U3RyaW5nKCk7CiAgICAgfQogCiAgICAgV1RG
OjpTdHJpbmcgcHJvdG9jb2woKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nzk5LDcgKzU3OTksNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZShQCiAKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgaWYgKG1fcHJvY2Vzcy0+aXNVbmRlck1lbW9yeVByZXNzdXJlKCkpIHsKLSAg
ICAgICAgU3RyaW5nIGRvbWFpbiA9IFdlYkNvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW4oV2ViQ29yZTo6VVJMKFdlYkNvcmU6OlBhcnNlZFVSTFN0cmluZywgY3VycmVudFVSTCgpKS5o
b3N0KCkpOworICAgICAgICBTdHJpbmcgZG9tYWluID0gV2ViQ29yZTo6dG9wUHJpdmF0ZWx5Q29u
dHJvbGxlZERvbWFpbihXZWJDb3JlOjpVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCBjdXJy
ZW50VVJMKCkpLmhvc3QoKS50b1N0cmluZygpKTsKICAgICAgICAgaWYgKCFkb21haW4uaXNFbXB0
eSgpKQogICAgICAgICAgICAgbG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoRW5oYW5jZWRQcml2YWN5
KFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6ZG9tYWluQ2F1c2luZ0pldHNhbUtleSgp
LCBkb21haW4sIFdlYkNvcmU6OlNob3VsZFNhbXBsZTo6Tm8pOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjMyMTc1
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNz
RGlkVGVybWluYXQKICNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQogICAgIGlmIChwYWdl
cy5zaXplKCkgPT0gMSkgewogICAgICAgICBhdXRvJiBwYWdlID0gKnBhZ2VzWzBdOwotICAgICAg
ICBTdHJpbmcgZG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihXZWJDb3JlOjpV
UkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCBwYWdlLmN1cnJlbnRVUkwoKSkuaG9zdCgpKTsK
KyAgICAgICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oV2Vi
Q29yZTo6VVJMKFdlYkNvcmU6OlBhcnNlZFVSTFN0cmluZywgcGFnZS5jdXJyZW50VVJMKCkpLmhv
c3QoKS50b1N0cmluZygpKTsKICAgICAgICAgaWYgKCFkb21haW4uaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcGFnZS5sb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhFbmhhbmNlZFByaXZhY3koV2ViQ29y
ZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpkb21haW5DYXVzaW5nQ3Jhc2hLZXkoKSwgZG9tYWlu
LCBXZWJDb3JlOjpTaG91bGRTYW1wbGU6Ok5vKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTcs
NyArMTMxNyw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2sKIAog
ICAgIC8vIEluaGVyaXQgdGhlIGRvbWFpbi9ob3N0IGZyb20gdGhlIG1haW4gZnJhbWUncyBVUkwg
aWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc2V0LgogICAgIGlmIChkb21haW4uaXNFbXB0eSgpKQot
ICAgICAgICBkb21haW4gPSBhY3RpdmVVUkwuaG9zdCgpOworICAgICAgICBkb21haW4gPSBhY3Rp
dmVVUkwuaG9zdCgpLnRvU3RyaW5nKCk7CiAKICAgICBjb29raWUuZG9tYWluID0gZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChkb21haW4pOwogCkBAIC0xMzYxLDcgKzEzNjEsNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29rCiAgICAgQVNTRVJUKGFjdGl2
ZVVSTC5pc1ZhbGlkKCkpOwogCiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5h
Z2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7
Ci0gICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRl
ZChhY3RpdmVVUkwuaG9zdCgpKSk7CisgICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChhY3RpdmVVUkwuaG9zdCgpLnRvU3RyaW5nKCkpKTsKIH0K
IAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9ucykKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZp
c2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzMSw4ICsxODMxLDggQEAgdm9pZCBQbHVnaW5W
aWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNlckludAogICAgIG1fZGlkUmVjZWl2ZVVzZXJJbnRlcmFj
dGlvbiA9IHRydWU7CiAKICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50JiBwbHVnSW5JbWFnZUVs
ZW1lbnQgPSBkb3duY2FzdDxIVE1MUGx1Z0luSW1hZ2VFbGVtZW50PigqbV9wbHVnaW5FbGVtZW50
KTsKLSAgICBTdHJpbmcgcGFnZU9yaWdpbiA9IHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgp
LnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKTsKLSAgICBT
dHJpbmcgcGx1Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZFVybCgpLmhvc3Qo
KTsKKyAgICBTdHJpbmcgcGFnZU9yaWdpbiA9IHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgp
LnBhZ2UoKS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKS50b1N0cmlu
ZygpOworICAgIFN0cmluZyBwbHVnaW5PcmlnaW4gPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVk
VXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1Z0luSW1h
Z2VFbGVtZW50LnNlcnZpY2VUeXBlKCk7CiAKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
bHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHBhZ2VPcmlnaW4sIHBsdWdpbk9yaWdpbiwg
bWltZVR5cGUsIHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+c2Vzc2lvbklE
KCkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luSW5m
b1Byb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBXZWJQbHVnaW5JbmZvUHJvdmlk
ZXI6OnBvcHVsYXRlUGx1ZwogICAgIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBTdHJpbmcg
cGFnZUhvc3QgPSBwYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJl
c3BvbnNlVVJMKCkuaG9zdCgpOworICAgIFN0cmluZyBwYWdlSG9zdCA9IHBhZ2UubWFpbkZyYW1l
KCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5ob3N0KCkudG9TdHJp
bmcoKTsKICAgICBpZiAocGFnZUhvc3QuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICBm
b3IgKGF1dG8mIGluZm8gOiBtX2NhY2hlZFBsdWdpbnMpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDg0OCw4ICs0ODQ4LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNIaWRkZW5Db250ZW50RWRp
dGFibGVRdQogICAgIGlmICghbmVlZHNRdWlya3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFN0cmluZyBob3N0ID0gdXJsLmhvc3QoKTsKLSAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRo
KCk7CisgICAgYXV0byBob3N0ID0gdXJsLmhvc3QoKTsKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoaG9zdCwgImRvY3MuZ29vZ2xlLmNvbSIpOwogfQogCkBAIC00ODU4
LDcgKzQ4NTcsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1BsYWluVGV4dFF1aXJrKGJvb2wgbmVlCiAg
ICAgaWYgKCFuZWVkc1F1aXJrcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5n
IGhvc3QgPSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdCA9IHVybC5ob3N0KCk7CiAKICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdCwgInR3aXR0ZXIuY29tIikpCiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTQzMSw4ICs1NDMwLDggQEAgdm9pZCBXZWJQYWdlOjpk
ZXRlcm1pbmVQcmltYXJ5U25hcHNob3R0ZQogCiAgICAgTE9HKFBsdWdpbnMsICJQcmltYXJ5IFBs
dWctSW4gRGV0ZWN0aW9uOiBzdWNjZXNzIC0gZm91bmQgYSBjYW5kaWRhdGUgcGx1Zy1pbiAtIGlu
Zm9ybSBpdC4iKTsKICAgICBtX2RpZEZpbmRQcmltYXJ5U25hcHNob3R0ZWRQbHVnaW4gPSB0cnVl
OwotICAgIG1fcHJpbWFyeVBsdWdJblBhZ2VPcmlnaW4gPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmRv
Y3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCk7Ci0gICAgbV9wcmltYXJ5UGx1Z0luT3JpZ2luID0g
Y2FuZGlkYXRlUGx1Z0luLT5sb2FkZWRVcmwoKS5ob3N0KCk7CisgICAgbV9wcmltYXJ5UGx1Z0lu
UGFnZU9yaWdpbiA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhv
c3QoKS50b1N0cmluZygpOworICAgIG1fcHJpbWFyeVBsdWdJbk9yaWdpbiA9IGNhbmRpZGF0ZVBs
dWdJbi0+bG9hZGVkVXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgbV9wcmltYXJ5UGx1Z0lu
TWltZVR5cGUgPSBjYW5kaWRhdGVQbHVnSW4tPnNlcnZpY2VUeXBlKCk7CiAKICAgICBjYW5kaWRh
dGVQbHVnSW4tPnNldElzUHJpbWFyeVNuYXBzaG90dGVkUGx1Z0luKHRydWUpOwpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExl
Z2FjeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMDUtMjUgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVUkw6
Omhvc3Qgc2hvdWxkIHJldHVybiBhIFN0cmluZ1ZpZXcgdG8gcmVkdWNlIGFsbG9jYXRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU5ODYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6Omhvc3RGb3JVUkwpOgorCiAyMDE4LTA1LTExICBDaGFybGVzIFZhemFjICA8
Y3ZhemFjQGdtYWlsLmNvbT4KIAogICAgICAgICBSdW50aW1lIGZlYXR1cmUgZmxhZyBmb3IgU2Vy
dmVyLVRpbWluZwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24g
MjMyMTc1KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW8KICAgICAgICAgcmV0dXJuIG1fbm9u
SFRUUFByb3RvY29sSG9zdDsKIAogICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
IFN0cmluZyBob3N0TmFtZSA9IHVybC5ob3N0KCk7CisgICAgU3RyaW5nIGhvc3ROYW1lID0gdXJs
Lmhvc3QoKS50b1N0cmluZygpOwogICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IG1faG9zdHMu
Z2V0KGhvc3ROYW1lKTsKICAgICBpZiAoIWhvc3QgJiYgY3JlYXRlSG9zdFBvbGljeSA9PSBDcmVh
dGVJZk5vdEZvdW5kKSB7CiAgICAgICAgIGhvc3QgPSBuZXcgSG9zdEluZm9ybWF0aW9uKGhvc3RO
YW1lLCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzIxOTApCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wNS0yNSAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVS
TDo6aG9zdCBzaG91bGQgcmV0dXJuIGEgU3RyaW5nVmlldyB0byByZWR1Y2UgYWxsb2NhdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTk4Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1VSTC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
X0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZXEpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvbWFjL1NTTEtleUdlbmVyYXRvci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNT
TEtleUdlbmVyYXRvclRlc3Q6OlRlYXJEb3duKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24gb2JqZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkwuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCBURVNUX0YoVVJMVGVzdCwgVVJMQ29uc3RydWN0b3JDb25zdENo
YXIpCiAgICAgRVhQRUNUX1RSVUUoa3VybC5pc1ZhbGlkKCkpOwogCiAgICAgRVhQRUNUX0VRKGt1
cmwucHJvdG9jb2woKSA9PSAiaHR0cCIsIHRydWUpOwotICAgIEVYUEVDVF9FUShTdHJpbmcoInd3
dy5leGFtcGxlLmNvbSIpLCBrdXJsLmhvc3QoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygid3d3
LmV4YW1wbGUuY29tIiksIGt1cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgIEVYUEVDVF9UUlVF
KCEha3VybC5wb3J0KCkpOwogICAgIEVYUEVDVF9FUSg4MDgwLCBrdXJsLnBvcnQoKS52YWx1ZSgp
KTsKICAgICBFWFBFQ1RfRVEoU3RyaW5nKCJ1c2VybmFtZSIpLCBrdXJsLnVzZXIoKSk7CkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAko
cmV2aXNpb24gMjMyMTc1KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VS
TFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgc3RydWN0IEV4cGVj
dGVkUGFydHMgewogICAgIH0KIH07CiAKLXN0YXRpYyBib29sIGVxKGNvbnN0IFN0cmluZyYgczEs
IGNvbnN0IFN0cmluZyYgczIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorYm9v
bCBlcShUJiYgczEsIFUmJiBzMikKIHsKICAgICBFWFBFQ1RfU1RSRVEoczEudXRmOCgpLmRhdGEo
KSwgczIudXRmOCgpLmRhdGEoKSk7CiAgICAgcmV0dXJuIHMxLnV0ZjgoKSA9PSBzMi51dGY4KCk7
CkBAIC05MCw3ICs5MSw3IEBAIHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJs
U3QKIHsKICAgICBhdXRvIHVybCA9IFVSTChVUkwoKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBF
WFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkp
OworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwog
ICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1Rf
VFJVRShlcShwYXJ0cy5wYXNzd29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVx
KHBhcnRzLmhvc3QsIHVybC5ob3N0KCkpKTsKQEAgLTExNyw3ICsxMTgsNyBAQCBzdGF0aWMgdm9p
ZCBjaGVja1JlbGF0aXZlVVJMKGNvbnN0IFN0cmluCiB7CiAgICAgYXV0byB1cmwgPSBVUkwoVVJM
KFVSTCgpLCBiYXNlVVJMU3RyaW5nKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJV
RShlcShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVY
UEVDVF9UUlVFKGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVD
VF9UUlVFKGVxKHBhcnRzLnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShw
YXJ0cy5wYXNzd29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLmhv
c3QsIHVybC5ob3N0KCkpKTsKQEAgLTE0Niw3ICsxNDcsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1VS
TERpZmZlcmVuY2VzKGNvbnN0IFN0CiAgICAgVU5VU0VEX1BBUkFNKHBhcnRzT2xkKTsgLy8gRklY
TUU6IFJlbW92ZSBhbGwgdGhlIG9sZCBleHBlY3RlZCBwYXJ0cy4KICAgICBhdXRvIHVybCA9IFVS
TChVUkwoKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5w
cm90b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9UUlVFKGVx
KHBhcnRzTmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9UUlVFKGVx
KHBhcnRzTmV3LnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05l
dy5wYXNzd29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3Lmhv
c3QsIHVybC5ob3N0KCkpKTsKQEAgLTE3NSw3ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1Jl
bGF0aXZlVVJMRGlmZmVyZW5jZXMoCiAgICAgVU5VU0VEX1BBUkFNKHBhcnRzT2xkKTsgLy8gRklY
TUU6IFJlbW92ZSBhbGwgdGhlIG9sZCBleHBlY3RlZCBwYXJ0cy4KICAgICBhdXRvIHVybCA9IFVS
TChVUkwoVVJMKCksIGJhc2VVUkxTdHJpbmcpLCB1cmxTdHJpbmcpOwogICAgIAotICAgIEVYUEVD
VF9UUlVFKGVxKHBhcnRzTmV3LnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmluZygpKSk7
CisgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpKSk7
CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcudXNlciwgdXJsLnVzZXIoKSkpOwogICAgIEVY
UEVDVF9UUlVFKGVxKHBhcnRzTmV3LnBhc3N3b3JkLCB1cmwucGFzcygpKSk7CiAgICAgRVhQRUNU
X1RSVUUoZXEocGFydHNOZXcuaG9zdCwgdXJsLmhvc3QoKSkpOwpAQCAtMjEzLDcgKzIxNCw3IEBA
IHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3QKIHsKICAgICBVUkxQYXJz
ZXIgcGFyc2VyKHVybFN0cmluZywgeyB9LCBlbmNvZGluZyk7CiAgICAgYXV0byB1cmwgPSBwYXJz
ZXIucmVzdWx0KCk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5wcm90
b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2NvbCwg
dXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCB1cmwudXNl
cigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFzc3dvcmQsIHVybC5wYXNzKCkpKTsK
ICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgpKSk7CkBAIC0yMzksNyAr
MjQwLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tVUkwoY29uc3QgU3RyaW5nJiB1cmxTdAogICAgIFVS
TFBhcnNlciBiYXNlUGFyc2VyKGJhc2VVUkxTdHJpbmcsIHsgfSwgZW5jb2RpbmcpOwogICAgIFVS
TFBhcnNlciBwYXJzZXIodXJsU3RyaW5nLCBiYXNlUGFyc2VyLnJlc3VsdCgpLCBlbmNvZGluZyk7
CiAgICAgYXV0byB1cmwgPSBwYXJzZXIucmVzdWx0KCk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFy
dHMucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJV
RShlcShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0cy51c2VyLCB1cmwudXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFz
c3dvcmQsIHVybC5wYXNzKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwu
aG9zdCgpKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5l
cmF0b3IubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NM
S2V5R2VuZXJhdG9yLm1tCShyZXZpc2lvbiAyMzIxNzUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4
MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIFNlY0l0ZW1EZWxldGUoKF9fYnJpZGdlIENGRGljdGlv
bmFyeVJlZikgQHsKICAgICAgICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXks
CiAgICAgICAgICAgICAoaWQpa1NlY0F0dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQ
cml2YXRlLAotICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdlYkNvcmU6OmtleWdlbktl
eWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKSksCisgICAgICAgICAgICAoaWQpa1NlY0F0dHJMYWJl
bDogV2ViQ29yZTo6a2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9zdCgpLnRvU3RyaW5nKCkp
LAogICAgICAgICB9KTsKICAgICAgICAgU2VjSXRlbURlbGV0ZSgoX19icmlkZ2UgQ0ZEaWN0aW9u
YXJ5UmVmKSBAewogICAgICAgICAgICAgKGlkKWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tleSwK
ICAgICAgICAgICAgIChpZClrU2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1B1
YmxpYywKLSAgICAgICAgICAgIChpZClrU2VjQXR0ckxhYmVsOiBXZWJDb3JlOjprZXlnZW5LZXlj
aGFpbkl0ZW1OYW1lKHVybC5ob3N0KCkpLAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6
IFdlYkNvcmU6OmtleWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmluZygpKSwK
ICAgICAgICAgfSk7CiAgICAgfQogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341317</attachid>
            <date>2018-05-25 13:25:46 -0700</date>
            <delta_ts>2018-05-25 13:36:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185986-20180525132546.patch</filename>
            <type>text/plain</type>
            <size>51249</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBACisyMDE4LTA1LTI1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0
IHNob3VsZCByZXR1cm4gYSBTdHJpbmdWaWV3IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2
aW91ci4gIEp1c3QgZmV3ZXIgYWxsb2NhdGlvbnMuCisKKyAgICAgICAgKiBNb2R1bGVzL3BsdWdp
bnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzWW91
VHViZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzQW5kQ3JlYXRlWW91VHViZVVSTCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpob3N0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRI
YW5kc2hha2U6Omhvc3QgY29uc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bnRlbnRFeHRlbnNpb246OnBvcHVsYXRlQ29uZGl0aW9uQ2FjaGVJZk5lZWRlZCk6CisgICAgICAg
ICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptZWRpYVNlc3Np
b25UaXRsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZWVkc1NlZWtpbmdTdXBwb3J0UXVp
cmspOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZXN0YXJ0U2ltaWxhclBsdWdJbnMp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6dXNlckRpZENsaWNr
U25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6c3Vi
ZnJhbWVMb2FkZXJXaWxsQ3JlYXRlUGx1Z0luKToKKyAgICAgICAgKiBodG1sL0ltYWdlRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5n
KToKKyAgICAgICAgKiBodG1sL1VSTFV0aWxzLmg6CisgICAgICAgIChXZWJDb3JlOjpVUkxVdGls
czxUPjo6aG9zdG5hbWUgY29uc3QpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMp
OgorICAgICAgICAqIGxvYWRlci9MaW5rTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmtMb2FkZXI6OmxvYWRMaW5rKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmlt
YXJ5RG9tYWluKToKKyAgICAgICAgKiBsb2FkZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1tOgor
ICAgICAgICAoc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5cGUpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6bW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQpOgorICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TG9jYXRpb246Omhvc3RuYW1lIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQpOgorICAgICAgICAqIHBh
Z2UvUGVyZm9ybWFuY2VNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydFBhZ2VP
dmVyUG9zdExvYWRSZXNvdXJjZVRocmVzaG9sZCk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0xvb3BiYWNrSVBBZGRyZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJl
c3MpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwYWdlL1Nl
Y3VyaXR5T3JpZ2luRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
Ojpmcm9tVVJMKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNIb3N0IGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlOjpob3N0TWF0Y2hl
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vUHVibGljU3VmZml4Lmg6CisgICAgICAgICog
cGxhdGZvcm0vVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTDo6aG9zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVUkw6Omhvc3RBbmRQb3J0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlVSTDo6aXNNYXRjaGluZ0RvbWFpbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vVVJM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNBcmVFcXVhbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRQYXJ0aXRpb25pbmdEb21haW4pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZVN0cmVhbXMpOgorICAgICAgICAqIHdvcmtlcnMvV29y
a2VyTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246Omhvc3Ru
YW1lIGNvbnN0KToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNXU2VydmVyOjpwZXJmb3JtR2V0T3JpZ2luc1dpdGhSZWdp
c3RyYXRpb25zQ2FsbGJhY2tzKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gb2JqZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1l
bnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdp
bnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIHN0YXRpYyBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OktleVZhbHUKICAgICAK
IHN0YXRpYyBib29sIGlzWW91VHViZVVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBTdHJpbmcg
aG9zdE5hbWUgPSB1cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgpOwog
ICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0TmFtZSwgIm0ueW91
dHViZS5jb20iKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShob3N0
TmFtZSwgInlvdXR1LmJlIikKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoaG9zdE5hbWUsICJ3d3cueW91dHViZS5jb20iKQpAQCAtMjAzLDcgKzIwMyw3IEBAIHN0YXRp
YyBVUkwgcHJvY2Vzc0FuZENyZWF0ZVlvdVR1YmVVUkwoY28KICAgICBpZiAoIWlzWW91VHViZVVS
TCh1cmwpKQogICAgICAgICByZXR1cm4gVVJMKCk7CiAKLSAgICBTdHJpbmcgaG9zdE5hbWUgPSB1
cmwuaG9zdCgpOworICAgIGF1dG8gaG9zdE5hbWUgPSB1cmwuaG9zdCgpOwogICAgIGJvb2wgaXNZ
b3VUdWJlTW9iaWxlV2ViQXBwVVJMID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9z
dE5hbWUsICJtLnlvdXR1YmUuY29tIik7CiAgICAgaXNZb3VUdWJlU2hvcnRlbmVkVVJMID0gZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdE5hbWUsICJ5b3V0dS5iZSIpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDcgKzgyLDcgQEAgc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBVUkwmIHVybCwgYgog
ewogICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygid3NzIikgPT0gc2VjdXJlKTsKICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQodXJsLmhvc3QoKS5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCh1cmwuaG9zdCgpLnRvU3Ry
aW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgaWYgKHVybC5wb3J0KCkgJiYg
KCghc2VjdXJlICYmIHVybC5wb3J0KCkudmFsdWUoKSAhPSA4MCkgfHwgKHNlY3VyZSAmJiB1cmwu
cG9ydCgpLnZhbHVlKCkgIT0gNDQzKSkpIHsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoJzonKTsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodXJsLnBvcnQoKS52YWx1ZSgpKTsKQEAgLTE0
Niw3ICsxNDYsNyBAQCB2b2lkIFdlYlNvY2tldEhhbmRzaGFrZTo6c2V0VVJMKGNvbnN0IFVSCiAv
LyBGSVhNRTogUmV0dXJuIHR5cGUgc2hvdWxkIGp1c3QgYmUgU3RyaW5nLCBub3QgY29uc3QgU3Ry
aW5nLgogY29uc3QgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6aG9zdCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fdXJsLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOworICAgIHJl
dHVybiBtX3VybC5ob3N0KCkudG9TdHJpbmcoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwog
fQogCiBjb25zdCBTdHJpbmcmIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50UHJvdG9jb2woKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
Q29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjIsNyArMTIyLDcgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uOjpwb3B1bGF0ZUNvbmRpdGlv
bgogICAgIGlmIChtX2NhY2hlZFRvcFVSTCAhPSB0b3BVUkwpIHsKICAgICAgICAgREZBQnl0ZWNv
ZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT50b3BVUkxGaWx0
ZXJzQnl0ZWNvZGUoKSwgbV9jb21waWxlZEV4dGVuc2lvbi0+dG9wVVJMRmlsdGVyc0J5dGVjb2Rl
TGVuZ3RoKCkpOwogICAgICAgICBjb25zdCB1aW50MTZfdCBhbGxMb2FkVHlwZXNBbmRSZXNvdXJj
ZVR5cGVzID0gTG9hZFR5cGVNYXNrIHwgUmVzb3VyY2VUeXBlTWFzazsKLSAgICAgICAgU3RyaW5n
IHN0cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFp
bigpID8gdG9wVVJMLmhvc3QoKSA6IHRvcFVSTC5zdHJpbmcoKTsKKyAgICAgICAgU3RyaW5nIHN0
cmluZyA9IG1fY29tcGlsZWRFeHRlbnNpb24tPmNvbmRpdGlvbnNBcHBseU9ubHlUb0RvbWFpbigp
ID8gdG9wVVJMLmhvc3QoKS50b1N0cmluZygpIDogdG9wVVJMLnN0cmluZygpOwogICAgICAgICBh
dXRvIHRvcFVSTEFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQoc3RyaW5nLnV0ZjgoKSwg
YWxsTG9hZFR5cGVzQW5kUmVzb3VyY2VUeXBlcyk7CiAgICAgICAgIAogICAgICAgICBtX2NhY2hl
ZFRvcFVSTEFjdGlvbnMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDcgKzI0NCw3IEBA
IHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKICAgICAgICAgICAgIFN0
cmluZyBwYXJzZWRVUkwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFsdWUp
OwogICAgICAgICAgICAgaWYgKGRvY3VtZW50KCkuaXNETlNQcmVmZXRjaEVuYWJsZWQoKSAmJiBk
b2N1bWVudCgpLmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJc0luSFRU
UEZhbWlseShwYXJzZWRVUkwpIHx8IHBhcnNlZFVSTC5zdGFydHNXaXRoKCIvLyIpKQotICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnByZWZl
dGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkpOworICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLmZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLnByZWZl
dGNoRE5TKGRvY3VtZW50KCkuY29tcGxldGVVUkwocGFyc2VkVVJMKS5ob3N0KCkudG9TdHJpbmco
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaW52YWxpZGF0ZUNhY2hlZFZp
c2l0ZWRMaW5rSGFzaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYxLDcgKzc0NjEsNyBAQCBTdHJpbmcg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNzaW9uVGl0CiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKIAotICAgIHRpdGxlID0gbV9jdXJyZW50U3JjLmhv
c3QoKTsKKyAgICB0aXRsZSA9IG1fY3VycmVudFNyYy5ob3N0KCkudG9TdHJpbmcoKTsKICNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkK
ICAgICAgICAgdGl0bGUgPSBkZWNvZGVIb3N0TmFtZSh0aXRsZSk7CkBAIC03NTI0LDcgKzc1MjQs
NyBAQCBzdGF0aWMgYm9vbCBuZWVkc1NlZWtpbmdTdXBwb3J0UXVpcmsoRG9jCiAgICAgaWYgKCFk
b2N1bWVudC5zZXR0aW5ncygpLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51
cmwoKS5ob3N0KCk7CisgICAgYXV0byBob3N0ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwo
KS5ob3N0KCk7CiAgICAgcmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGhvc3Qs
ICJuZXRmbGl4LmNvbSIpIHx8IGhvc3QuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiLm5ldGZs
aXguY29tIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcgKzQz
NSw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWkKICAgICAvLyBS
ZXN0YXJ0IGFueSBvdGhlciBzbmFwc2hvdHRlZCBwbHVnaW5zIGluIHRoZSBwYWdlIHdpdGggdGhl
IHNhbWUgb3JpZ2luLiBOb3RlIHRoYXQgdGhleQogICAgIC8vIG1heSBiZSBpbiBkaWZmZXJlbnQg
ZnJhbWVzLCBzbyB0cmF2ZXJzZSBmcm9tIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LgogCi0gICAg
U3RyaW5nIHBsdWdJbk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKKyAgICBhdXRvIHBsdWdJ
bk9yaWdpbiA9IG1fbG9hZGVkVXJsLmhvc3QoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBzZXJ2
aWNlVHlwZSgpOwogICAgIFZlY3RvcjxSZWY8SFRNTFBsdWdJbkltYWdlRWxlbWVudD4+IHNpbWls
YXJQbHVnaW5zOwogCkBAIC00NjksOSArNDY5LDkgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50Ojp1c2VyRGlkQ2xpYwogICAgIGlmIChmb3J3YXJkRXZlbnQpCiAgICAgICAgIG1fcGVuZGlu
Z0NsaWNrRXZlbnRGcm9tU25hcHNob3QgPSAmZXZlbnQ7CiAKLSAgICBTdHJpbmcgcGx1Z0luT3Jp
Z2luID0gbV9sb2FkZWRVcmwuaG9zdCgpOworICAgIGF1dG8gcGx1Z0luT3JpZ2luID0gbV9sb2Fk
ZWRVcmwuaG9zdCgpOwogICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSAmJiAhU2NoZW1lUmVnaXN0
cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNMb2NhbChkb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZy
YW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnByb3RvY29sKCkudG9TdHJpbmdXaXRob3V0Q29w
eWluZygpKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+c2V0dGluZ3MoKS5hdXRvc3RhcnRPcmlnaW5Q
bHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCkpCi0gICAgICAgIGRvY3VtZW50KCkucGFnZSgpLT5w
bHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50KCkucGFnZSgpLT5tYWlu
RnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLCBwbHVnSW5PcmlnaW4sIHNlcnZp
Y2VUeXBlKCksIGRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CisgICAgICAgIGRvY3Vt
ZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQoKS0+ZGlkU3RhcnRGcm9tT3JpZ2luKGRvY3VtZW50
KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRvU3Ry
aW5nKCksIHBsdWdJbk9yaWdpbi50b1N0cmluZygpLCBzZXJ2aWNlVHlwZSgpLCBkb2N1bWVudCgp
LnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwogCiAgICAgTE9HKFBsdWdpbnMsICIlcCBVc2VyIGNsaWNr
ZWQgb24gc25hcHNob3R0ZWQgcGx1Zy1pbi4gUmVzdGFydC4iLCB0aGlzKTsKICAgICByZXN0YXJ0
U25hcHNob3R0ZWRQbHVnSW4oKTsKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OnN1YmZyYW1lTG9hCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoZG9jdW1lbnQoKS5wYWdlKCktPnNldHRpbmdzKCkuYXV0b3N0YXJ0T3JpZ2luUGx1Z0luU25h
cHNob3R0aW5nRW5hYmxlZCgpICYmIGRvY3VtZW50KCkucGFnZSgpLT5wbHVnSW5DbGllbnQoKSAm
JiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCktPnNob3VsZEF1dG9TdGFydEZyb21P
cmlnaW4oZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwo
KS5ob3N0KCksIHVybC5ob3N0KCksIHNlcnZpY2VUeXBlKCkpKSB7CisgICAgaWYgKGRvY3VtZW50
KCkucGFnZSgpLT5zZXR0aW5ncygpLmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGluZ0Vu
YWJsZWQoKSAmJiBkb2N1bWVudCgpLnBhZ2UoKS0+cGx1Z0luQ2xpZW50KCkgJiYgZG9jdW1lbnQo
KS5wYWdlKCktPnBsdWdJbkNsaWVudCgpLT5zaG91bGRBdXRvU3RhcnRGcm9tT3JpZ2luKGRvY3Vt
ZW50KCkucGFnZSgpLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRv
U3RyaW5nKCksIHVybC5ob3N0KCkudG9TdHJpbmcoKSwgc2VydmljZVR5cGUoKSkpIHsKICAgICAg
ICAgTE9HKFBsdWdpbnMsICIlcCBQbHVnLWluIGZyb20gKCVzLCAlcykgaXMgbWFya2VkIHRvIGF1
dG8tc3RhcnQsIHNldCB0byBwbGF5IiwgdGhpcywgZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFt
ZSgpLmRvY3VtZW50KCktPmJhc2VVUkwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSwgdXJsLmhvc3Qo
KS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbV9zbmFwc2hvdERlY2lzaW9uID0gTmV2ZXJTbmFw
c2hvdDsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9j
dW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBJbWFnZURv
Y3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUgaG9z
dG5hbWUgaWYgdGhlcmUgaXMgbm8gcGF0aC4KICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogICAgICAg
ICAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG5hbWUgPSB1cmwoKS5o
b3N0KCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IHVybCgpLmhvc3QoKS50b1N0cmluZygpOwog
ICAgICAgICAgICAgc2V0VGl0bGUoaW1hZ2VUaXRsZShuYW1lLCBzaXplKSk7CiAgICAgICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvVVJMVXRpbHMuaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9VUkxVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcg
QEAgdm9pZCBVUkxVdGlsczxUPjo6c2V0SG9zdChjb25zdCBTdHJpbmcmIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CiBTdHJpbmcgVVJMVXRpbHM8VD46Omhvc3RuYW1lKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaHJlZigpLmhvc3QoKTsKKyAgICByZXR1cm4gaHJlZigpLmhvc3QoKS50b1N0cmluZygp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZQogICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCZtX2ZyYW1lKSkKICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlGb3JD
b29raWVzKHVybCk7CiAKLSAgICBTdHJpbmcgcmVnaXN0cmFibGVEb21haW4gPSBSZXNvdXJjZVJl
cXVlc3Q6OnBhcnRpdGlvbk5hbWUodXJsLmhvc3QoKSk7CisgICAgU3RyaW5nIHJlZ2lzdHJhYmxl
RG9tYWluID0gUmVzb3VyY2VSZXF1ZXN0OjpwYXJ0aXRpb25OYW1lKHVybC5ob3N0KCkudG9TdHJp
bmcoKSk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKSB7CiAgICAgICAgIGlmIChTZWN1
cml0eVBvbGljeTo6c2hvdWxkSW5oZXJpdFNlY3VyaXR5T3JpZ2luRnJvbU93bmVyKGZyYW1lLT5k
b2N1bWVudCgpLT51cmwoKSkgfHwgcmVnaXN0cmFibGVEb21haW5zQXJlRXF1YWwoZnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpLCByZWdpc3RyYWJsZURvbWFpbikpCiAgICAgICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvclNhbWVTaXRlQ29va2llcyh1cmwpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9MaW5rTG9hZGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0xpbmtMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
NyArMjk0LDcgQEAgYm9vbCBMaW5rTG9hZGVyOjpsb2FkTGluayhjb25zdCBMaW5rUmVsQQogICAg
ICAgICAvLyBGSVhNRTogVGhlIGhyZWYgYXR0cmlidXRlIG9mIHRoZSBsaW5rIGVsZW1lbnQgY2Fu
IGJlIGluICIvL2hvc3RuYW1lIiBmb3JtLCBhbmQgd2Ugc2hvdWxkbid0IGF0dGVtcHQKICAgICAg
ICAgLy8gdG8gY29tcGxldGUgdGhhdCBhcyBVUkwgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00ODg1Nz4uCiAgICAgICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygpLmRu
c1ByZWZldGNoaW5nRW5hYmxlZCgpICYmIGhyZWYuaXNWYWxpZCgpICYmICFocmVmLmlzRW1wdHko
KSAmJiBkb2N1bWVudC5mcmFtZSgpKQotICAgICAgICAgICAgZG9jdW1lbnQuZnJhbWUoKS0+bG9h
ZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0KCkpOworICAgICAgICAgICAgZG9j
dW1lbnQuZnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkucHJlZmV0Y2hETlMoaHJlZi5ob3N0KCku
dG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgcHJlY29ubmVjdElmTmVlZGVkKHJlbEF0dHJpYnV0
ZSwgaHJlZiwgZG9jdW1lbnQsIGNyb3NzT3JpZ2luKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIzMjE3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
czo6bWVyZ2UoY29uc3QKIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlE
b21haW4oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhv
c3QoKSk7CisgICAgcmV0dXJuIHByaW1hcnlEb21haW4odXJsLmhvc3QoKS50b1N0cmluZygpKTsK
IH0KIAogU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnByaW1hcnlEb21haW4oY29uc3Qg
U3RyaW5nJiBob3N0KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9Mb2FkZXJOU1VS
TEV4dHJhcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL0xvYWRl
ck5TVVJMRXh0cmFzLm1tCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvbWFjL0xvYWRlck5TVVJMRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIE5TU3RyaW5nICpzdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZSgKIAogICAgIGlmIChb
ZmlsZW5hbWUgbGVuZ3RoXSA9PSAwIHx8IFtsYXN0UGF0aENvbXBvbmVudCBpc0VxdWFsVG9TdHJp
bmc6QCIvIl0pIHsKICAgICAgICAgLy8gbGFzdFBhdGhDb21wb25lbnQgaXMgbm8gZ29vZCwgdHJ5
IHRoZSBob3N0LgotICAgICAgICBOU1N0cmluZyAqaG9zdCA9IFVSTCh1cmwpLmhvc3QoKTsKKyAg
ICAgICAgTlNTdHJpbmcgKmhvc3QgPSBVUkwodXJsKS5ob3N0KCkudG9TdHJpbmcoKTsKICAgICAg
ICAgZmlsZW5hbWUgPSBmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMoaG9zdCk7CiAg
ICAgICAgIGlmIChbZmlsZW5hbWUgbGVuZ3RoXSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBDYW4n
dCBtYWtlIGEgZmlsZW5hbWUgdXNpbmcgdGhpcyBVUkwsIHVzZSAidW5rbm93biIuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIENo
cm9tZTo6c2V0U3RhdHVzYmFyVGV4dChGcmFtZSYgZnJhCiB2b2lkIENocm9tZTo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBtb2Rp
ZmllckZsYWdzKQogewogICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkgJiYgcmVzdWx0LmlubmVy
Tm9kZSgpLT5kb2N1bWVudCgpLmlzRE5TUHJlZmV0Y2hFbmFibGVkKCkpCi0gICAgICAgIG1fcGFn
ZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5wcmVmZXRjaEROUyhyZXN1bHQuYWJzb2x1
dGVMaW5rVVJMKCkuaG9zdCgpKTsKKyAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigp
LmNsaWVudCgpLnByZWZldGNoRE5TKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5ob3N0KCkudG9T
dHJpbmcoKSk7CiAgICAgbV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQocmVzdWx0LCBt
b2RpZmllckZsYWdzKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bW91c2VEaWRN
b3ZlT3ZlckVsZW1lbnQobV9wYWdlLCByZXN1bHQsIG1vZGlmaWVyRmxhZ3MpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIFN0cmlu
ZyBMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIHVybCgpLmhvc3QoKTsKKyAgICByZXR1cm4g
dXJsKCkuaG9zdCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBMb2NhdGlvbjo6cG9ydCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDQsNyArMjEwNCw3IEBA
IHZvaWQgUGFnZTo6bWFpbkZyYW1lTG9hZFN0YXJ0ZWQoY29uc3QgVVIKIHsKICAgICBTdHJpbmcg
ZG9tYWluOwogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0gICAgZG9tYWluID0gdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihkZXN0aW5hdGlvblVSTC5ob3N0KCkpOworICAgIGRv
bWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4oZGVzdGluYXRpb25VUkwuaG9zdCgp
LnRvU3RyaW5nKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25VUkwpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTW9uaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZU1vbml0b3IuY3Bw
CShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTW9u
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgdm9pZCBy
ZXBvcnRQYWdlT3ZlclBvc3RMb2FkUmVzb3VyCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21h
aW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKSk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW4oZG9jdW1lbnQtPnVybCgpLmhvc3QoKS50b1N0cmluZygpKTsK
ICAgICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRBc1VuaXF1ZU9yaWdpbihjbwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgaXNMb29wYmFja0lQQWRkcmVzcyhjb25z
dCBTdHJpbmcmIGhvc3QpCitzdGF0aWMgYm9vbCBpc0xvb3BiYWNrSVBBZGRyZXNzKFN0cmluZ1Zp
ZXcgaG9zdCkKIHsKICAgICAvLyBUaGUgSVB2NiBsb29wYmFjayBhZGRyZXNzIGlzIDA6MDowOjA6
MDowOjA6MSwgd2hpY2ggY29tcHJlc3NlcyB0byA6OjEuCiAgICAgaWYgKGhvc3QgPT0gIls6OjFd
IikKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdEFzUG90ZW50aWFs
bHlUcnVzCiAKIGJvb2wgc2hvdWxkVHJlYXRBc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY29uc3Qg
VVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29y
dGh5KHVybC5wcm90b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3QoKSk7
CisgICAgcmV0dXJuIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5wcm90
b2NvbCgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgdXJsLmhvc3QoKS50b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCkpOwogfQogCiBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3Qg
VVJMJiB1cmwpCkBAIC01NDgsNyArNTQ4LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6aXNTYW1l
U2NoZW1lSG9zdFBvcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNlY3VyaXR5T3JpZ2lu
Ojppc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0KQorYm9v
bCBTZWN1cml0eU9yaWdpbjo6aXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKFN0cmluZ1Zp
ZXcgaG9zdCkKIHsKICAgICBpZiAoaXNMb29wYmFja0lQQWRkcmVzcyhob3N0KSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShyZXZp
c2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUG90
ZW50aWFsbHlUcnVzdHdvcnRoeSgpIGNvbnN0IHsgcmV0dXJuIG1faXNQb3RlbnRpYWxseVRydXN0
d29ydGh5OyB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9yTG9vcGJhY2tJUEFkZHJl
c3MoY29uc3QgU3RyaW5nJiBob3N0KTsKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9zdE9yTG9v
cGJhY2tJUEFkZHJlc3MoU3RyaW5nVmlldyk7CiAKICAgICBjb25zdCBTZWN1cml0eU9yaWdpbkRh
dGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGEgewogICAgIHsKICAgICAgICAgcmV0
dXJuIFNlY3VyaXR5T3JpZ2luRGF0YSB7CiAgICAgICAgICAgICB1cmwucHJvdG9jb2woKS5pc051
bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB1cmwucHJvdG9jb2woKS50b1N0cmluZygpLmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCksCi0gICAgICAgICAgICB1cmwuaG9zdCgpLmlzTnVsbCgpID8gZW1w
dHlTdHJpbmcoKSA6IHVybC5ob3N0KCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSwKKyAgICAg
ICAgICAgIHVybC5ob3N0KCkuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdXJsLmhvc3QoKS50
b1N0cmluZygpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCksCiAgICAgICAgICAgICB1cmwucG9y
dCgpCiAgICAgICAgIH07CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
NyArMTI1LDcgQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXMoY29ucwogCiBi
b29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6bWF0Y2hlc0hvc3QoY29uc3QgVVJMJiB0ZXN0KSBj
b25zdAogewotICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IHRlc3QuaG9zdCgpOworICAgIGF1dG8g
aG9zdCA9IHRlc3QuaG9zdCgpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGhvc3Qs
IG1faG9zdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAJKHJl
dmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OnNjaGVtZQogCiBib29sIENvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZTo6aG9zdE1hdGNoZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgU3RyaW5nJiBob3N0ID0gdXJsLmhvc3QoKTsKLSAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShob3N0LCBtX2hvc3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVu
ZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIi4iICsgbV9ob3N0KSk7CisgICAgYXV0byBob3N0ID0g
dXJsLmhvc3QoKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShob3N0LCBtX2hv
c3QpIHx8IChtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UobWFrZVN0cmluZygiLiIsIG1faG9zdCkpKTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QdWJsaWNTdWZmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QdWJsaWNTdWZmaXguaAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUHVibGljU3VmZml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFB1
YmxpY1N1ZmZpeF9oCi0jZGVmaW5lIFB1YmxpY1N1ZmZpeF9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSw1ICszOCwzIEBAIFN0cmluZyBk
ZWNvZGVIb3N0TmFtZShjb25zdCBTdHJpbmcmIGRvbWEKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCi0KLSNlbmRpZiAvLyBQdWJs
aWNTdWZmaXhfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCShyZXZpc2lvbiAyMzIxNzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsMTAgKzE1NSwxMCBAQCBTdHJpbmdWaWV3IFVSTDo6cHJvdG9jb2woKSBjb25zdAogICAgIHJl
dHVybiBTdHJpbmdWaWV3KG1fc3RyaW5nKS5zdWJzdHJpbmcoMCwgbV9zY2hlbWVFbmQpOwogfQog
Ci1TdHJpbmcgVVJMOjpob3N0KCkgY29uc3QKK1N0cmluZ1ZpZXcgVVJMOjpob3N0KCkgY29uc3QK
IHsKICAgICB1bnNpZ25lZCBzdGFydCA9IGhvc3RTdGFydCgpOwotICAgIHJldHVybiBtX3N0cmlu
Zy5zdWJzdHJpbmcoc3RhcnQsIG1faG9zdEVuZCAtIHN0YXJ0KTsKKyAgICByZXR1cm4gU3RyaW5n
VmlldyhtX3N0cmluZykuc3Vic3RyaW5nKHN0YXJ0LCBtX2hvc3RFbmQgLSBzdGFydCk7CiB9CiAK
IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IFVSTDo6cG9ydCgpIGNvbnN0CkBAIC0xODAsOCArMTgw
LDggQEAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gVVJMOjpwb3J0KCkgY29ucwogU3RyaW5nIFVS
TDo6aG9zdEFuZFBvcnQoKSBjb25zdAogewogICAgIGlmIChhdXRvIHBvcnQgPSB0aGlzLT5wb3J0
KCkpCi0gICAgICAgIHJldHVybiBob3N0KCkgKyAnOicgKyBTdHJpbmc6Om51bWJlcihwb3J0LnZh
bHVlKCkpOwotICAgIHJldHVybiBob3N0KCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKGhv
c3QoKSwgJzonLCBTdHJpbmc6Om51bWJlcihwb3J0LnZhbHVlKCkpKTsKKyAgICByZXR1cm4gaG9z
dCgpLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBVUkw6OnByb3RvY29sSG9zdEFuZFBvcnQoKSBj
b25zdApAQCAtNzk2LDcgKzc5Niw3IEBAIGJvb2wgVVJMOjppc01hdGNoaW5nRG9tYWluKGNvbnN0
IFN0cmluZyYKICAgICBpZiAoIWhvc3QuZW5kc1dpdGgoZG9tYWluKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIGhvc3QubGVuZ3RoKCkgPT0gZG9tYWluLmxlbmd0aCgpIHx8
IGhvc3QuY2hhcmFjdGVyQXQoaG9zdC5sZW5ndGgoKSAtIGRvbWFpbi5sZW5ndGgoKSAtIDEpID09
ICcuJzsKKyAgICByZXR1cm4gaG9zdC5sZW5ndGgoKSA9PSBkb21haW4ubGVuZ3RoKCkgfHwgaG9z
dFtob3N0Lmxlbmd0aCgpIC0gZG9tYWluLmxlbmd0aCgpIC0gMV0gPT0gJy4nOwogfQogCiBTdHJp
bmcgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIGlucHV0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMLmgJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1VSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5n
dGgodW5zaWduZWQgbGVuZ3RoID0gMTAyNCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBT
dHJpbmdWaWV3IHByb3RvY29sKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGhv
c3QoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmdWaWV3IGhvc3QoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KCkgY29uc3Q7
CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGhvc3RBbmRQb3J0KCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHByb3RvY29sSG9zdEFuZFBvcnQoKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAkocmV2aXNpb24gMjMy
MTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVXNlckFnZW50UXVpcmtzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBib29sIGlzR29vZ2xlKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFN0cmluZyBiYXNlRG9tYWlu
ID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBTdHJpbmcg
YmFzZURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50b1N0
cmluZygpKTsKIAogICAgIC8vIE91ciBHb29nbGUgVUEgaXMgKnZlcnkqIGNvbXBsaWNhdGVkIHRv
IGdldCByaWdodC4gUmVhZAogICAgIC8vIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0MjA3NCBjYXJl
ZnVsbHkgYmVmb3JlIGNoYW5naW5nLiBUZXN0IHRoYXQgRWFydGgKQEAgLTYwLDcgKzYwLDcgQEAg
c3RhdGljIGJvb2wgaXNHb29nbGUoY29uc3QgVVJMJiB1cmwpCiAvLyB0aGF0IHdvcmtzIGluIENo
cm9tZSB0aGF0IFdlYktpdCBjYW5ub3QgaGFuZGxlLiBQcmVmZXIgb3RoZXIgcXVpcmtzIGluc3Rl
YWQuCiBzdGF0aWMgYm9vbCB1cmxSZXF1aXJlc0Nocm9tZUJyb3dzZXIoY29uc3QgVVJMJiB1cmwp
CiB7Ci0gICAgU3RyaW5nIGJhc2VEb21haW4gPSB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
KHVybC5ob3N0KCkpOworICAgIFN0cmluZyBiYXNlRG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJv
bGxlZERvbWFpbih1cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogCiAgICAgLy8gTmVlZGVkIGZvciBm
b250cyBvbiBtYW55IHNpdGVzIHRvIHdvcmsgd2l0aCBXZWJLaXQuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI5NgpAQCAtNzgsNyArNzgsNyBAQCBz
dGF0aWMgYm9vbCB1cmxSZXF1aXJlc0Nocm9tZUJyb3dzZXIoY29uCiAKIHN0YXRpYyBib29sIHVy
bFJlcXVpcmVzTWFjaW50b3NoUGxhdGZvcm0oY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgU3RyaW5n
IGRvbWFpbiA9IHVybC5ob3N0KCk7CisgICAgU3RyaW5nIGRvbWFpbiA9IHVybC5ob3N0KCkudG9T
dHJpbmcoKTsKICAgICBTdHJpbmcgYmFzZURvbWFpbiA9IHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW4oZG9tYWluKTsKIAogICAgIC8vIEF0IGxlYXN0IGZpbmFuY2UueWFob28uY29tIGRpc3Bs
YXlzIGEgbW9iaWxlIHZlcnNpb24gd2l0aCBXZWJLaXRHVEsrJ3Mgc3RhbmRhcmQgdXNlciBhZ2Vu
dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVy
YXRvck1hYy5tbQkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3
IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKIAogICAgIGF1dG8g
Y2hhbGxlbmdlID0gY2hhbGxlbmdlU3RyaW5nLmlzQWxsQVNDSUkoKSA/IGNoYWxsZW5nZVN0cmlu
Zy5hc2NpaSgpIDogIiI7CiAKLSAgICByZXR1cm4gc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdl
U3RyaW5nKGtleVNpemUsIGNoYWxsZW5nZSwga2V5Z2VuS2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9z
dCgpKSk7CisgICAgcmV0dXJuIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlT
aXplLCBjaGFsbGVuZ2UsIGtleWdlbktleWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmlu
ZygpKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU1LDExICsyNTUsMTEgQEAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmll
bGRzKGNvbnN0IFJlcwogLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxhY2UgZm9yIHRoZXNlIGZ1
bmN0aW9ucy4KIGlubGluZSBib29sIHJlZ2lzdHJhYmxlRG9tYWluc0FyZUVxdWFsKGNvbnN0IFVS
TCYgYSwgY29uc3QgVVJMJiBiKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpw
YXJ0aXRpb25OYW1lKGEuaG9zdCgpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25O
YW1lKGIuaG9zdCgpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6cGFydGl0aW9u
TmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRp
b25OYW1lKGIuaG9zdCgpLnRvU3RyaW5nKCkpOwogfQogaW5saW5lIGJvb2wgcmVnaXN0cmFibGVE
b21haW5zQXJlRXF1YWwoY29uc3QgVVJMJiBhLCBjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9t
YWluKQogewotICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwYXJ0aXRpb25OYW1lKGEu
aG9zdCgpKSA9PSByZWdpc3RyYWJsZURvbWFpbjsKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6cGFydGl0aW9uTmFtZShhLmhvc3QoKS50b1N0cmluZygpKSA9PSByZWdpc3RyYWJsZURv
bWFpbjsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYikgeyByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6ZXF1YWwoYSwgYik7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3Bw
CShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDEx
ICsxOTgsMTEgQEAgU3RyaW5nIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llU3Rvcgogc3Rh
dGljIGlubGluZSBTdHJpbmcgZ2V0UGFydGl0aW9uaW5nRG9tYWluKGNvbnN0IFVSTCYgdXJsKSAK
IHsKICNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQotICAgIGF1dG8gZG9tYWluID0gdG9w
UHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbih1cmwuaG9zdCgpKTsKKyAgICBhdXRvIGRvbWFpbiA9
IHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW4odXJsLmhvc3QoKS50b1N0cmluZygpKTsKICAg
ICBpZiAoZG9tYWluLmlzRW1wdHkoKSkKLSAgICAgICAgZG9tYWluID0gdXJsLmhvc3QoKTsKKyAg
ICAgICAgZG9tYWluID0gdXJsLmhvc3QoKS50b1N0cmluZygpOwogI2Vsc2UKLSAgICBhdXRvIGRv
bWFpbiA9IHVybC5ob3N0KCk7CisgICAgYXV0byBkb21haW4gPSB1cmwuaG9zdCgpLnRvU3RyaW5n
KCk7CiAjZW5kaWYKICAgICByZXR1cm4gZG9tYWluOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbENGTmV0LmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
OjpjcmVhdGVTdHJlYQogICAgIGlmIChtX2Nvbm5lY3Rpb25UeXBlID09IFVua25vd24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9IG1fdXJsLmhv
c3QoKS5jcmVhdGVDRlN0cmluZygpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9zdCA9
IG1fdXJsLmhvc3QoKS50b1N0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICAgICAvLyBDcmVh
dGluZyBzdHJlYW1zIHRvIGZpbmFsIGRlc3RpbmF0aW9uLCBub3QgdG8gcHJveHkuCiAgICAgQ0ZS
ZWFkU3RyZWFtUmVmIHJlYWRTdHJlYW0gPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCShyZXZpc2lvbiAyMzIx
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgYm9vbCBDb29raWVKYXJEQjo6
c2VhcmNoQ29va2llcyhjb25zdCBTdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBVUkwg
cmVxdWVzdFVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHJlcXVlc3RVcmwpOwotICAgIFN0cmluZyBy
ZXF1ZXN0SG9zdChyZXF1ZXN0VXJsT2JqLmhvc3QoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgp
KTsKKyAgICBTdHJpbmcgcmVxdWVzdEhvc3QocmVxdWVzdFVybE9iai5ob3N0KCkudG9TdHJpbmco
KS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKICAgICBTdHJpbmcgcmVxdWVzdFBhdGgocmVx
dWVzdFVybE9iai5wYXRoKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAKICAgICBpZiAo
cmVxdWVzdEhvc3QuaXNFbXB0eSgpKQpAQCAtMzgyLDcgKzM4Miw3IEBAIGludCBDb29raWVKYXJE
Qjo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgVVJM
IHVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgU3RyaW5nIGhvc3QodXJsT2JqLmhv
c3QoKSk7CisgICAgU3RyaW5nIGhvc3QodXJsT2JqLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBT
dHJpbmcgcGF0aCh1cmxPYmoucGF0aCgpKTsKIAogICAgIENvb2tpZSBjb29raWVPYmo7CkBAIC00
MTcsNyArNDE3LDcgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3RyaQog
CiAgICAgVVJMIHVybE9iaihQYXJzZWRVUkxTdHJpbmcsIHVybENvcGllZCk7CiAgICAgaWYgKHVy
bE9iai5pc1ZhbGlkKCkpIHsKLSAgICAgICAgU3RyaW5nIGhvc3RTdHIodXJsT2JqLmhvc3QoKSk7
CisgICAgICAgIFN0cmluZyBob3N0U3RyKHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7CiAgICAg
ICAgIFN0cmluZyBwYXRoU3RyKHVybE9iai5wYXRoKCkpOwogICAgICAgICBpbnQgcmV0ID0gZGVs
ZXRlQ29va2llSW50ZXJuYWwobmFtZSwgaG9zdFN0ciwgcGF0aFN0cik7CiAgICAgICAgIEFTU0VS
VChjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0LCBTUUxJVEVfRE9ORSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3
b3JrU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzcsNyArMjc3LDcgQEAgc3RkOjpvcHRpb25hbDxSZXNvdXJjZUVycm9yPiBTb3VwTmV0d29y
awogICAgIGlmICghdGxzRXJyb3JzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgYXV0byBpdCA9IGNsaWVudENlcnRpZmljYXRlcygpLmZpbmQocmVxdWVzdFVSTC5ob3N0KCkp
OworICAgIGF1dG8gaXQgPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKHJlcXVlc3RVUkwuaG9z
dCgpLnRvU3RyaW5nKCkpOwogICAgIGlmIChpdCAhPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQo
KSAmJiBpdC0+dmFsdWUuY29udGFpbnMoY2VydGlmaWNhdGUpKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2Fy
ZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3Rl
Ym9hcmRXaW4uY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBA
QCBzdGF0aWMgYm9vbCB3cml0ZVVSTChXQ0RhdGFPYmplY3QgKmRhdGEsCiAgICAgaWYgKHRpdGxl
LmlzRW1wdHkoKSkgewogICAgICAgICB0aXRsZSA9IHVybC5sYXN0UGF0aENvbXBvbmVudCgpOwog
ICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgdGl0bGUgPSB1cmwuaG9z
dCgpOworICAgICAgICAgICAgdGl0bGUgPSB1cmwuaG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgfQog
CiAgICAgU1RHTUVESVVNIG1lZGl1bSA9IHswfTsKQEAgLTcwNyw3ICs3MDcsNyBAQCB2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVCiAgICAgaWYgKHRpdGxlLmlzRW1wdHko
KSkgewogICAgICAgICB0aXRsZSA9IHBhc3RlYm9hcmRVUkwudXJsLmxhc3RQYXRoQ29tcG9uZW50
KCk7CiAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0aXRsZSA9IHBh
c3RlYm9hcmRVUkwudXJsLmhvc3QoKTsKKyAgICAgICAgICAgIHRpdGxlID0gcGFzdGVib2FyZFVS
TC51cmwuaG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgfQogCiAgICAgLy8gd3JpdGUgdG8gY2xpcGJv
YXJkIGluIGZvcm1hdCBjb20uYXBwbGUuc2FmYXJpLmJvb2ttYXJrZGF0YSB0byBiZSBhYmxlIHRv
IHBhc3RlIGludG8gdGhlIGJvb2ttYXJrcyB2aWV3IHdpdGggYXBwcm9wcmlhdGUgdGl0bGUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwCShyZXZpc2lvbiAy
MzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBTdHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3Qo
KSBjb25zdAogCiBTdHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3RuYW1lKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV91cmwuaG9zdCgpOworICAgIHJldHVybiBtX3VybC5ob3N0KCkudG9TdHJpbmco
KTsKIH0KIAogU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpwb3J0KCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dTZXJ2ZXIuY3BwCShy
ZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uvc2VydmVy
L1NXU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY2LDcgKzg2Niw3IEBAIHZvaWQgU1dT
ZXJ2ZXI6OnBlcmZvcm1HZXRPcmlnaW5zV2l0aFJlZ2kKICAgICBIYXNoU2V0PFNlY3VyaXR5T3Jp
Z2luRGF0YT4gb3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zOwogICAgIGZvciAoYXV0byYga2V5IDog
bV9yZWdpc3RyYXRpb25zLmtleXMoKSkgewogICAgICAgICBvcmlnaW5zV2l0aFJlZ2lzdHJhdGlv
bnMuYWRkKGtleS50b3BPcmlnaW4oKSk7Ci0gICAgICAgIG9yaWdpbnNXaXRoUmVnaXN0cmF0aW9u
cy5hZGQoU2VjdXJpdHlPcmlnaW5EYXRhIHsga2V5LnNjb3BlKCkucHJvdG9jb2woKS50b1N0cmlu
ZygpLCBrZXkuc2NvcGUoKS5ob3N0KCksIGtleS5zY29wZSgpLnBvcnQoKSB9KTsKKyAgICAgICAg
b3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zLmFkZChTZWN1cml0eU9yaWdpbkRhdGEgeyBrZXkuc2Nv
cGUoKS5wcm90b2NvbCgpLnRvU3RyaW5nKCksIGtleS5zY29wZSgpLmhvc3QoKS50b1N0cmluZygp
LCBrZXkuc2NvcGUoKS5wb3J0KCkgfSk7CiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja3MgPSBX
VEZNb3ZlKG1fZ2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zQ2FsbGJhY2tzKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE4LTA1LTI1ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMOjpob3N0IHNob3VsZCByZXR1
cm4gYSBTdHJpbmdWaWV3IHRvIHJlZHVjZSBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1OTg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZldGNoRGlza0NhY2hlRW50cmllcyk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6YXJlRnJhbWVBbmNlc3RvcnNTYW1lU2l0ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpvdmVycmlkZVN5
c3RlbVByb3hpZXMpOgorICAgICAgICAqIFNoYXJlZC9BUEkvQVBJVVJMLmg6CisgICAgICAgIChB
UEk6OlVSTDo6aG9zdCBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YWRkU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNl
c3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRU
ZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpbkRpZFJl
Y2VpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9XZWJQ
bHVnaW5JbmZvUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5JbmZvUHJv
dmlkZXI6OnBvcHVsYXRlUGx1Z2luQ2FjaGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bmVlZHNIaWRkZW5Db250ZW50RWRpdGFi
bGVRdWlyayk6CisgICAgICAgIChXZWJLaXQ6Om5lZWRzUGxhaW5UZXh0UXVpcmspOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpkZXRlcm1pbmVQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4pOgor
CiAyMDE4LTA1LTI0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVcGRhdGUgcGx1Z2luIHNlYXJjaCBwYXRoIHRvIGxvb2sgZm9yIHVzZXIgaW5zdGFsbGVkIHBs
dWdpbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgxLDcgKzQ4MSw3IEBA
IHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhQQUw6OlMKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgYXV0byB1cmwgPSB0cmF2ZXJzYWxFbnRyeS0+ZW50cnkucmVzcG9uc2Uo
KS51cmwoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gb3JpZ2luc0FuZFNpemVzLmFkZCh7
dXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSwgdXJsLmhvc3QoKSwgdXJsLnBvcnQoKX0sIDApOwor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBvcmlnaW5zQW5kU2l6ZXMuYWRkKHt1cmwucHJvdG9j
b2woKS50b1N0cmluZygpLCB1cmwuaG9zdCgpLnRvU3RyaW5nKCksIHVybC5wb3J0KCl9LCAwKTsK
IAogICAgICAgICAgICAgaWYgKGZldGNoT3B0aW9ucy5jb250YWlucyhXZWJzaXRlRGF0YUZldGNo
T3B0aW9uOjpDb21wdXRlU2l6ZXMpKQogICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgKz0gdHJhdmVyc2FsRW50cnktPmVudHJ5LnNvdXJjZVN0b3JhZ2VSZWNvcmQoKS5oZWFk
ZXIuc2l6ZSgpICsgdHJhdmVyc2FsRW50cnktPnJlY29yZEluZm8uYm9keVNpemU7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw3ICsz
NjQsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogc3RhdGljIGJvb2wg
YXJlRnJhbWVBbmNlc3RvcnNTYW1lU2l0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxTZWN1cml0eU9yaWdpbj4+JiBmcmFtZUFuY2VzdG9yT3Jp
Z2lucykKIHsKICNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQotICAgIGF1dG8gcmVzcG9u
c2VQYXJ0aXRpb24gPSBSZXNvdXJjZVJlcXVlc3Q6OnBhcnRpdGlvbk5hbWUocmVzcG9uc2UudXJs
KCkuaG9zdCgpKTsKKyAgICBhdXRvIHJlc3BvbnNlUGFydGl0aW9uID0gUmVzb3VyY2VSZXF1ZXN0
OjpwYXJ0aXRpb25OYW1lKHJlc3BvbnNlLnVybCgpLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBy
ZXR1cm4gZnJhbWVBbmNlc3Rvck9yaWdpbnMuZmluZE1hdGNoaW5nKFsmXShjb25zdCBhdXRvJiBp
dGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLT5pc1VuaXF1ZSgpIHx8IFJlc291cmNlUmVxdWVz
dDo6cGFydGl0aW9uTmFtZShpdGVtLT5ob3N0KCkpICE9IHJlc3BvbnNlUGFydGl0aW9uOwogICAg
IH0pID09IG5vdEZvdW5kOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9tYWMv
TmV0d29ya1Byb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0JKHJldmlzaW9uIDIzMjE3NSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyB2b2lkIG92ZXJyaWRlU3lzdGVtUHJv
eGllcyhjb25zdCAKICAgICBpZiAoIWh0dHBQcm94eS5pc051bGwoKSkgewogICAgICAgICBVUkwg
aHR0cFByb3h5VVJMKFVSTCgpLCBodHRwUHJveHkpOwogICAgICAgICBpZiAoaHR0cFByb3h5VVJM
LmlzVmFsaWQoKSkgewotICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2JqZWN0Om5zU3Ry
aW5nRnJvbVdlYkNvcmVTdHJpbmcoaHR0cFByb3h5VVJMLmhvc3QoKSkgZm9yS2V5OihOU1N0cmlu
ZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFByb3h5XTsKKyAgICAgICAgICAgIFtwcm94eVNldHRp
bmdzIHNldE9iamVjdDpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGh0dHBQcm94eVVSTC5ob3N0
KCkudG9TdHJpbmcoKSkgZm9yS2V5OihOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFBy
b3h5XTsKICAgICAgICAgICAgIGlmIChodHRwUHJveHlVUkwucG9ydCgpKSB7CiAgICAgICAgICAg
ICAgICAgTlNOdW1iZXIgKnBvcnQgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpodHRwUHJveHlV
UkwucG9ydCgpLnZhbHVlKCldOwogICAgICAgICAgICAgICAgIFtwcm94eVNldHRpbmdzIHNldE9i
amVjdDpwb3J0IGZvcktleTooTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGllc0hUVFBQb3J0XTsK
QEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIHZvaWQgb3ZlcnJpZGVTeXN0ZW1Qcm94aWVzKGNvbnN0
IAogICAgICAgICBVUkwgaHR0cHNQcm94eVVSTChVUkwoKSwgaHR0cHNQcm94eSk7CiAgICAgICAg
IGlmIChodHRwc1Byb3h5VVJMLmlzVmFsaWQoKSkgewogI2lmICFFTkFCTEUoTUlOSU1BTF9TSU1V
TEFUT1IpCi0gICAgICAgICAgICBbcHJveHlTZXR0aW5ncyBzZXRPYmplY3Q6bnNTdHJpbmdGcm9t
V2ViQ29yZVN0cmluZyhodHRwc1Byb3h5VVJMLmhvc3QoKSkgZm9yS2V5OihOU1N0cmluZyAqKWtD
Rk5ldHdvcmtQcm94aWVzSFRUUFNQcm94eV07CisgICAgICAgICAgICBbcHJveHlTZXR0aW5ncyBz
ZXRPYmplY3Q6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhodHRwc1Byb3h5VVJMLmhvc3QoKS50
b1N0cmluZygpKSBmb3JLZXk6KE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQU1Byb3h5
XTsKICAgICAgICAgICAgIGlmIChodHRwc1Byb3h5VVJMLnBvcnQoKSkgewogICAgICAgICAgICAg
ICAgIE5TTnVtYmVyICpwb3J0ID0gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6aHR0cHNQcm94eVVS
TC5wb3J0KCkudmFsdWUoKV07CiAgICAgICAgICAgICAgICAgW3Byb3h5U2V0dGluZ3Mgc2V0T2Jq
ZWN0OnBvcnQgZm9yS2V5OihOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFNQb3J0XTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElVUkwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQVBJVVJMLmgJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9BUElVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyAr
NjQsNyBAQCBwdWJsaWM6CiAgICAgV1RGOjpTdHJpbmcgaG9zdCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBwYXJzZVVSTElmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHJldHVybiBtX3BhcnNlZFVSTC0+
aXNWYWxpZCgpID8gbV9wYXJzZWRVUkwtPmhvc3QoKSA6IFdURjo6U3RyaW5nKCk7CisgICAgICAg
IHJldHVybiBtX3BhcnNlZFVSTC0+aXNWYWxpZCgpID8gbV9wYXJzZWRVUkwtPmhvc3QoKS50b1N0
cmluZygpIDogV1RGOjpTdHJpbmcoKTsKICAgICB9CiAKICAgICBXVEY6OlN0cmluZyBwcm90b2Nv
bCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OTksNyArNTc5OSw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlKFAKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBpZiAo
bV9wcm9jZXNzLT5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSkgewotICAgICAgICBTdHJpbmcgZG9t
YWluID0gV2ViQ29yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihXZWJDb3JlOjpVUkwo
V2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCBjdXJyZW50VVJMKCkpLmhvc3QoKSk7CisgICAgICAg
IFN0cmluZyBkb21haW4gPSBXZWJDb3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKFdl
YkNvcmU6OlVSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIGN1cnJlbnRVUkwoKSkuaG9zdCgp
LnRvU3RyaW5nKCkpOwogICAgICAgICBpZiAoIWRvbWFpbi5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBsb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhFbmhhbmNlZFByaXZhY3koV2ViQ29yZTo6RGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpkb21haW5DYXVzaW5nSmV0c2FtS2V5KCksIGRvbWFpbiwgV2ViQ29y
ZTo6U2hvdWxkU2FtcGxlOjpObyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzYs
NyArNjc2LDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdAogI2lm
IEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCiAgICAgaWYgKHBhZ2VzLnNpemUoKSA9PSAxKSB7
CiAgICAgICAgIGF1dG8mIHBhZ2UgPSAqcGFnZXNbMF07Ci0gICAgICAgIFN0cmluZyBkb21haW4g
PSB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluKFdlYkNvcmU6OlVSTChXZWJDb3JlOjpQYXJz
ZWRVUkxTdHJpbmcsIHBhZ2UuY3VycmVudFVSTCgpKS5ob3N0KCkpOworICAgICAgICBTdHJpbmcg
ZG9tYWluID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihXZWJDb3JlOjpVUkwoV2ViQ29y
ZTo6UGFyc2VkVVJMU3RyaW5nLCBwYWdlLmN1cnJlbnRVUkwoKSkuaG9zdCgpLnRvU3RyaW5nKCkp
OwogICAgICAgICBpZiAoIWRvbWFpbi5pc0VtcHR5KCkpCiAgICAgICAgICAgICBwYWdlLmxvZ0Rp
YWdub3N0aWNNZXNzYWdlV2l0aEVuaGFuY2VkUHJpdmFjeShXZWJDb3JlOjpEaWFnbm9zdGljTG9n
Z2luZ0tleXM6OmRvbWFpbkNhdXNpbmdDcmFzaEtleSgpLCBkb21haW4sIFdlYkNvcmU6OlNob3Vs
ZFNhbXBsZTo6Tm8pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCShyZXZpc2lv
biAyMzIxNzUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxNyw3ICsxMzE3LDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29vawogCiAgICAgLy8gSW5oZXJpdCB0
aGUgZG9tYWluL2hvc3QgZnJvbSB0aGUgbWFpbiBmcmFtZSdzIFVSTCBpZiBpdCBpcyBub3QgZXhw
bGljaXRseSBzZXQuCiAgICAgaWYgKGRvbWFpbi5pc0VtcHR5KCkpCi0gICAgICAgIGRvbWFpbiA9
IGFjdGl2ZVVSTC5ob3N0KCk7CisgICAgICAgIGRvbWFpbiA9IGFjdGl2ZVVSTC5ob3N0KCkudG9T
dHJpbmcoKTsKIAogICAgIGNvb2tpZS5kb21haW4gPSBkb21haW5CeUFkZGluZ0RvdFByZWZpeElm
TmVlZGVkKGRvbWFpbik7CiAKQEAgLTEzNjEsNyArMTM2MSw3IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmRlbGV0ZUFsbENvb2sKICAgICBBU1NFUlQoYWN0aXZlVVJMLmlzVmFsaWQoKSk7
CiAKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKLSAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNl
c3Npb25JRCgpLCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGFjdGl2ZVVSTC5ob3N0
KCkpKTsKKyAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUocGFnZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElm
TmVlZGVkKGFjdGl2ZVVSTC5ob3N0KCkudG9TdHJpbmcoKSkpOwogfQogCiB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVy
bWlzc2lvbkRhdGE+PiYgb3V0X3Blcm1pc3Npb25zKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODMxLDggKzE4MzEsOCBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpbkRpZFJl
Y2VpdmVVc2VySW50CiAgICAgbV9kaWRSZWNlaXZlVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKIAog
ICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQmIHBsdWdJbkltYWdlRWxlbWVudCA9IGRvd25jYXN0
PEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ+KCptX3BsdWdpbkVsZW1lbnQpOwotICAgIFN0cmluZyBw
YWdlT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpOwotICAgIFN0cmluZyBwbHVnaW5Pcmln
aW4gPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkVXJsKCkuaG9zdCgpOworICAgIFN0cmluZyBw
YWdlT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpLT5iYXNlVVJMKCkuaG9zdCgpLnRvU3RyaW5nKCk7CisgICAgU3RyaW5n
IHBsdWdpbk9yaWdpbiA9IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRVcmwoKS5ob3N0KCkudG9T
dHJpbmcoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQuc2Vydmlj
ZVR5cGUoKTsKIAogICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBsdWdJbkRpZFJlY2VpdmVV
c2VySW50ZXJhY3Rpb24ocGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSwgcGx1Z0lu
SW1hZ2VFbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5JbmZvUHJvdmlkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpbklu
Zm9Qcm92aWRlci5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1dlYlBsdWdpbkluZm9Qcm92aWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1Niw3ICsxNTYsNyBAQCB2b2lkIFdlYlBsdWdpbkluZm9Qcm92aWRlcjo6cG9wdWxhdGVQbHVn
CiAgICAgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIFN0cmluZyBwYWdlSG9zdCA9IHBhZ2Uu
bWFpbkZyYW1lKCkubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2VVUkwoKS5ob3N0
KCk7CisgICAgU3RyaW5nIHBhZ2VIb3N0ID0gcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpLT5yZXNwb25zZVVSTCgpLmhvc3QoKS50b1N0cmluZygpOwogICAgIGlmIChw
YWdlSG9zdC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoYXV0byYgaW5mbyA6
IG1fY2FjaGVkUGx1Z2lucykgewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQ4LDkgKzQ4
NDgsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc0hpZGRlbkNvbnRlbnRFZGl0YWJsZVF1CiAgICAgaWYg
KCFuZWVkc1F1aXJrcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIGhvc3Qg
PSB1cmwuaG9zdCgpOwotICAgIFN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKLSAgICByZXR1cm4g
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoaG9zdCwgImRvY3MuZ29vZ2xlLmNvbSIpOwor
ICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwuaG9zdCgpLCAiZG9j
cy5nb29nbGUuY29tIik7CiB9CiAKIHN0YXRpYyBib29sIG5lZWRzUGxhaW5UZXh0UXVpcmsoYm9v
bCBuZWVkc1F1aXJrcywgY29uc3QgVVJMJiB1cmwpCkBAIC00ODU4LDcgKzQ4NTYsNyBAQCBzdGF0
aWMgYm9vbCBuZWVkc1BsYWluVGV4dFF1aXJrKGJvb2wgbmVlCiAgICAgaWYgKCFuZWVkc1F1aXJr
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIGhvc3QgPSB1cmwuaG9zdCgp
OworICAgIGF1dG8gaG9zdCA9IHVybC5ob3N0KCk7CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoaG9zdCwgInR3aXR0ZXIuY29tIikpCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNTQzMSw4ICs1NDI5LDggQEAgdm9pZCBXZWJQYWdlOjpkZXRlcm1pbmVQcmltYXJ5U25h
cHNob3R0ZQogCiAgICAgTE9HKFBsdWdpbnMsICJQcmltYXJ5IFBsdWctSW4gRGV0ZWN0aW9uOiBz
dWNjZXNzIC0gZm91bmQgYSBjYW5kaWRhdGUgcGx1Zy1pbiAtIGluZm9ybSBpdC4iKTsKICAgICBt
X2RpZEZpbmRQcmltYXJ5U25hcHNob3R0ZWRQbHVnaW4gPSB0cnVlOwotICAgIG1fcHJpbWFyeVBs
dWdJblBhZ2VPcmlnaW4gPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCktPmJhc2VVUkwo
KS5ob3N0KCk7Ci0gICAgbV9wcmltYXJ5UGx1Z0luT3JpZ2luID0gY2FuZGlkYXRlUGx1Z0luLT5s
b2FkZWRVcmwoKS5ob3N0KCk7CisgICAgbV9wcmltYXJ5UGx1Z0luUGFnZU9yaWdpbiA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+YmFzZVVSTCgpLmhvc3QoKS50b1N0cmluZygpOwor
ICAgIG1fcHJpbWFyeVBsdWdJbk9yaWdpbiA9IGNhbmRpZGF0ZVBsdWdJbi0+bG9hZGVkVXJsKCku
aG9zdCgpLnRvU3RyaW5nKCk7CiAgICAgbV9wcmltYXJ5UGx1Z0luTWltZVR5cGUgPSBjYW5kaWRh
dGVQbHVnSW4tPnNlcnZpY2VUeXBlKCk7CiAKICAgICBjYW5kaWRhdGVQbHVnSW4tPnNldElzUHJp
bWFyeVNuYXBzaG90dGVkUGx1Z0luKHRydWUpOwpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzMjE3NSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMDUtMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBVUkw6Omhvc3Qgc2hvdWxkIHJldHVy
biBhIFN0cmluZ1ZpZXcgdG8gcmVkdWNlIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU5ODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZiBHYXJlbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RG
b3JVUkwpOgorCiAyMDE4LTA1LTExICBDaGFybGVzIFZhemFjICA8Y3ZhemFjQGdtYWlsLmNvbT4K
IAogICAgICAgICBSdW50aW1lIGZlYXR1cmUgZmxhZyBmb3IgU2VydmVyLVRpbWluZwpJbmRleDog
U291cmNlL1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMjMyMTc1KQorKysgU291cmNl
L1dlYktpdExlZ2FjeS9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6SG9zdEluZm9ybWF0aW8KICAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsK
IAogICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIFN0cmluZyBob3N0TmFtZSA9
IHVybC5ob3N0KCk7CisgICAgU3RyaW5nIGhvc3ROYW1lID0gdXJsLmhvc3QoKS50b1N0cmluZygp
OwogICAgIEhvc3RJbmZvcm1hdGlvbiogaG9zdCA9IG1faG9zdHMuZ2V0KGhvc3ROYW1lKTsKICAg
ICBpZiAoIWhvc3QgJiYgY3JlYXRlSG9zdFBvbGljeSA9PSBDcmVhdGVJZk5vdEZvdW5kKSB7CiAg
ICAgICAgIGhvc3QgPSBuZXcgSG9zdEluZm9ybWF0aW9uKGhvc3ROYW1lLCBtYXhSZXF1ZXN0c0lu
RmxpZ2h0UGVySG9zdCk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzIxOTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wNS0yNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVSTDo6aG9zdCBzaG91bGQgcmV0
dXJuIGEgU3RyaW5nVmlldyB0byByZWR1Y2UgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTk4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L1VSTC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6ZXEpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL1NTTEtleUdl
bmVyYXRvci5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNTTEtleUdlbmVyYXRvclRlc3Q6
OlRlYXJEb3duKToKKwogMjAxOC0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlZHVjZSBjb3B5aW5nIG9mIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gb2Jq
ZWN0cyBieSBtb3ZpbmcgdGhlbSBhcm91bmQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9VUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9VUkwuY3BwCShyZXZpc2lvbiAyMzIxNzUpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCBURVNUX0YoVVJMVGVzdCwgVVJMQ29uc3RydWN0b3JDb25zdENoYXIpCiAgICAgRVhQRUNUX1RS
VUUoa3VybC5pc1ZhbGlkKCkpOwogCiAgICAgRVhQRUNUX0VRKGt1cmwucHJvdG9jb2woKSA9PSAi
aHR0cCIsIHRydWUpOwotICAgIEVYUEVDVF9FUShTdHJpbmcoInd3dy5leGFtcGxlLmNvbSIpLCBr
dXJsLmhvc3QoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygid3d3LmV4YW1wbGUuY29tIiksIGt1
cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgIEVYUEVDVF9UUlVFKCEha3VybC5wb3J0KCkpOwog
ICAgIEVYUEVDVF9FUSg4MDgwLCBrdXJsLnBvcnQoKS52YWx1ZSgpKTsKICAgICBFWFBFQ1RfRVEo
U3RyaW5nKCJ1c2VybmFtZSIpLCBrdXJsLnVzZXIoKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjMyMTc1KQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDggQEAgc3RydWN0IEV4cGVjdGVkUGFydHMgewogICAgIH0K
IH07CiAKLXN0YXRpYyBib29sIGVxKGNvbnN0IFN0cmluZyYgczEsIGNvbnN0IFN0cmluZyYgczIp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorYm9vbCBlcShUJiYgczEsIFUmJiBz
MikKIHsKICAgICBFWFBFQ1RfU1RSRVEoczEudXRmOCgpLmRhdGEoKSwgczIudXRmOCgpLmRhdGEo
KSk7CiAgICAgcmV0dXJuIHMxLnV0ZjgoKSA9PSBzMi51dGY4KCk7CkBAIC05MCw3ICs5MSw3IEBA
IHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3QKIHsKICAgICBhdXRvIHVy
bCA9IFVSTChVUkwoKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0
cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9UUlVF
KGVxKHBhcnRzLnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9UUlVFKGVx
KHBhcnRzLnVzZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wYXNz
d29yZCwgdXJsLnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLmhvc3QsIHVybC5o
b3N0KCkpKTsKQEAgLTExNyw3ICsxMTgsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlbGF0aXZlVVJM
KGNvbnN0IFN0cmluCiB7CiAgICAgYXV0byB1cmwgPSBVUkwoVVJMKFVSTCgpLCBiYXNlVVJMU3Ry
aW5nKSwgdXJsU3RyaW5nKTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2Nv
bCwgdXJsLnByb3RvY29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
LnByb3RvY29sLCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLnVz
ZXIsIHVybC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wYXNzd29yZCwgdXJs
LnBhc3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzLmhvc3QsIHVybC5ob3N0KCkpKTsK
QEAgLTE0Niw3ICsxNDcsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1VSTERpZmZlcmVuY2VzKGNvbnN0
IFN0CiAgICAgVU5VU0VEX1BBUkFNKHBhcnRzT2xkKTsgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhl
IG9sZCBleHBlY3RlZCBwYXJ0cy4KICAgICBhdXRvIHVybCA9IFVSTChVUkwoKSwgdXJsU3RyaW5n
KTsKICAgICAKLSAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5wcm90b2NvbCwgdXJsLnByb3Rv
Y29sKCkudG9TdHJpbmcoKSkpOworICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3LnByb3RvY29s
LCB1cmwucHJvdG9jb2woKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3LnVzZXIsIHVy
bC51c2VyKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0c05ldy5wYXNzd29yZCwgdXJsLnBh
c3MoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3Lmhvc3QsIHVybC5ob3N0KCkpKTsK
QEAgLTE3NSw3ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja1JlbGF0aXZlVVJMRGlmZmVyZW5j
ZXMoCiAgICAgVU5VU0VEX1BBUkFNKHBhcnRzT2xkKTsgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhl
IG9sZCBleHBlY3RlZCBwYXJ0cy4KICAgICBhdXRvIHVybCA9IFVSTChVUkwoVVJMKCksIGJhc2VV
UkxTdHJpbmcpLCB1cmxTdHJpbmcpOwogICAgIAotICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRzTmV3
LnByb3RvY29sLCB1cmwucHJvdG9jb2woKS50b1N0cmluZygpKSk7CisgICAgRVhQRUNUX1RSVUUo
ZXEocGFydHNOZXcucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpKSk7CiAgICAgRVhQRUNUX1RSVUUo
ZXEocGFydHNOZXcudXNlciwgdXJsLnVzZXIoKSkpOwogICAgIEVYUEVDVF9UUlVFKGVxKHBhcnRz
TmV3LnBhc3N3b3JkLCB1cmwucGFzcygpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHNOZXcu
aG9zdCwgdXJsLmhvc3QoKSkpOwpAQCAtMjEzLDcgKzIxNCw3IEBAIHN0YXRpYyB2b2lkIGNoZWNr
VVJMKGNvbnN0IFN0cmluZyYgdXJsU3QKIHsKICAgICBVUkxQYXJzZXIgcGFyc2VyKHVybFN0cmlu
ZywgeyB9LCBlbmNvZGluZyk7CiAgICAgYXV0byB1cmwgPSBwYXJzZXIucmVzdWx0KCk7Ci0gICAg
RVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5wcm90b2NvbCgpLnRvU3RyaW5nKCkp
KTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2NvbCwgdXJsLnByb3RvY29sKCkpKTsK
ICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCB1cmwudXNlcigpKSk7CiAgICAgRVhQRUNU
X1RSVUUoZXEocGFydHMucGFzc3dvcmQsIHVybC5wYXNzKCkpKTsKICAgICBFWFBFQ1RfVFJVRShl
cShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgpKSk7CkBAIC0yMzksNyArMjQwLDcgQEAgc3RhdGljIHZv
aWQgY2hlY2tVUkwoY29uc3QgU3RyaW5nJiB1cmxTdAogICAgIFVSTFBhcnNlciBiYXNlUGFyc2Vy
KGJhc2VVUkxTdHJpbmcsIHsgfSwgZW5jb2RpbmcpOwogICAgIFVSTFBhcnNlciBwYXJzZXIodXJs
U3RyaW5nLCBiYXNlUGFyc2VyLnJlc3VsdCgpLCBlbmNvZGluZyk7CiAgICAgYXV0byB1cmwgPSBw
YXJzZXIucmVzdWx0KCk7Ci0gICAgRVhQRUNUX1RSVUUoZXEocGFydHMucHJvdG9jb2wsIHVybC5w
cm90b2NvbCgpLnRvU3RyaW5nKCkpKTsKKyAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5wcm90b2Nv
bCwgdXJsLnByb3RvY29sKCkpKTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy51c2VyLCB1cmwu
dXNlcigpKSk7CiAgICAgRVhQRUNUX1RSVUUoZXEocGFydHMucGFzc3dvcmQsIHVybC5wYXNzKCkp
KTsKICAgICBFWFBFQ1RfVFJVRShlcShwYXJ0cy5ob3N0LCB1cmwuaG9zdCgpKSk7CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlHZW5lcmF0b3IubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvU1NMS2V5R2VuZXJhdG9yLm1tCShy
ZXZpc2lvbiAyMzIxNzUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9TU0xLZXlH
ZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTgzLDEyICs4MywxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIFNlY0l0ZW1EZWxldGUoKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKICAgICAg
ICAgICAgIChpZClrU2VjQ2xhc3M6IChpZClrU2VjQ2xhc3NLZXksCiAgICAgICAgICAgICAoaWQp
a1NlY0F0dHJLZXlDbGFzczogKGlkKWtTZWNBdHRyS2V5Q2xhc3NQcml2YXRlLAotICAgICAgICAg
ICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdlYkNvcmU6OmtleWdlbktleWNoYWluSXRlbU5hbWUodXJs
Lmhvc3QoKSksCisgICAgICAgICAgICAoaWQpa1NlY0F0dHJMYWJlbDogV2ViQ29yZTo6a2V5Z2Vu
S2V5Y2hhaW5JdGVtTmFtZSh1cmwuaG9zdCgpLnRvU3RyaW5nKCkpLAogICAgICAgICB9KTsKICAg
ICAgICAgU2VjSXRlbURlbGV0ZSgoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewogICAgICAg
ICAgICAgKGlkKWtTZWNDbGFzczogKGlkKWtTZWNDbGFzc0tleSwKICAgICAgICAgICAgIChpZClr
U2VjQXR0cktleUNsYXNzOiAoaWQpa1NlY0F0dHJLZXlDbGFzc1B1YmxpYywKLSAgICAgICAgICAg
IChpZClrU2VjQXR0ckxhYmVsOiBXZWJDb3JlOjprZXlnZW5LZXljaGFpbkl0ZW1OYW1lKHVybC5o
b3N0KCkpLAorICAgICAgICAgICAgKGlkKWtTZWNBdHRyTGFiZWw6IFdlYkNvcmU6OmtleWdlbktl
eWNoYWluSXRlbU5hbWUodXJsLmhvc3QoKS50b1N0cmluZygpKSwKICAgICAgICAgfSk7CiAgICAg
fQogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>