<?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>162910</bug_id>
          
          <creation_ts>2016-10-04 09:30:34 -0700</creation_ts>
          <short_desc>[SOUP] Move global TLS errors handling from ResourceHandle to SoupNetworkSession</short_desc>
          <delta_ts>2016-10-12 10:06:22 -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>Platform</component>
          <version>WebKit Local 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>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>jeremyhu</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1236207</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-04 09:30:34 -0700</bug_when>
    <thetext>So that it will be shared with network session code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236210</commentid>
    <comment_count>1</comment_count>
      <attachid>290607</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-04 09:34:18 -0700</bug_when>
    <thetext>Created attachment 290607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236348</commentid>
    <comment_count>2</comment_count>
      <attachid>290607</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-10-04 14:17:58 -0700</bug_when>
    <thetext>Comment on attachment 290607
Patch

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

I know this is a preexisting problem, but please fix it first: either use a secure hash algorithm in HostTLSCertificateSet (e.g. SHA-256 from CryptoDigest.h), or else just stop using hashes there and copy the full certificates into the hash table. This is a sufficiently-minor issue that I don&apos;t think we need to get a CVE for it, but it needs fixed.

&gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:67
&gt; +    bool contains(GTlsCertificate* certificate)

Should be const (preexisting issue)

&gt; Source/WebCore/platform/network/soup/SoupNetworkSession.h:68
&gt; +    static void setShouldIgnoreTLSErrors(bool);
&gt; +    static void checkTLSErrors(SoupRequest*, SoupMessage*, std::function&lt;void (const ResourceError&amp;)&gt;&amp;&amp;);
&gt; +    static void allowSpecificHTTPSCertificateForHost(const CertificateInfo&amp;, const String&amp; host);

Why make these static? Doesn&apos;t it defeat the point of moving this code to SoupNetworkSession? I would expect different network sessions to handle these independently. If you were planning to change this in a future patch, it&apos;d be better to do it now by using SoupNetworkSession::defaultSession() in NetworkProcessSoup.cpp, and fix up NetworkProcessSoup.cpp in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236561</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-05 00:21:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 290607 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290607&amp;action=review
&gt; 
&gt; I know this is a preexisting problem, but please fix it first: either use a
&gt; secure hash algorithm in HostTLSCertificateSet (e.g. SHA-256 from
&gt; CryptoDigest.h), or else just stop using hashes there and copy the full
&gt; certificates into the hash table. This is a sufficiently-minor issue that I
&gt; don&apos;t think we need to get a CVE for it, but it needs fixed.

What&apos;s the problem of using SHA1 here? What&apos;s the security problem exactly? We are using it just as a hash, for non private information, as an optimization to avoid having to do comparisons with large certificate contents. It&apos;s not the only place in WebKit that SHA1 is used, I don&apos;t mind if the algorithm is not secure enough for this particular use case.

&gt; &gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:67
&gt; &gt; +    bool contains(GTlsCertificate* certificate)
&gt; 
&gt; Should be const (preexisting issue)

Yes.

&gt; &gt; Source/WebCore/platform/network/soup/SoupNetworkSession.h:68
&gt; &gt; +    static void setShouldIgnoreTLSErrors(bool);
&gt; &gt; +    static void checkTLSErrors(SoupRequest*, SoupMessage*, std::function&lt;void (const ResourceError&amp;)&gt;&amp;&amp;);
&gt; &gt; +    static void allowSpecificHTTPSCertificateForHost(const CertificateInfo&amp;, const String&amp; host);
&gt; 
&gt; Why make these static? Doesn&apos;t it defeat the point of moving this code to
&gt; SoupNetworkSession? I would expect different network sessions to handle
&gt; these independently. If you were planning to change this in a future patch,
&gt; it&apos;d be better to do it now by using SoupNetworkSession::defaultSession() in
&gt; NetworkProcessSoup.cpp, and fix up NetworkProcessSoup.cpp in a future patch.

No, the point, as the ChangeLog says, is using this from NetworkSession that replaces ResourceHandle, SoupNetworkSession is a good place common in both code paths. I&apos;m definitely going to rework the soup session handling, but I&apos;m still not sure how exactly. The TLS policy is a network process global setting anyway, so it should be applied to any network session used. Note that there are only 3 possible sessions: default, private and testing. We don&apos;t support private browsing and testing is only used internally by layout tests, so from the users point of view there&apos;s only one global session which is the default one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236564</commentid>
    <comment_count>4</comment_count>
      <attachid>290695</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-05 00:29:28 -0700</bug_when>
    <thetext>Created attachment 290695
Updated patch

This should apply now. I&apos;ve just made the contains() const and replaced a NULL by nullptr. I&apos;m still using SHA1 because I don&apos;t see any security implication (we are not signing anything nor hashing a password or private info). I&apos;ll update the patch to replace SHA1 if I&apos;m wrong, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236565</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-05 00:31:38 -0700</bug_when>
    <thetext>Attachment 290695 did not pass style-queue:


ERROR: Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:332:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/soup/SoupNetworkSession.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236568</commentid>
    <comment_count>6</comment_count>
      <attachid>290695</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-05 00:46:48 -0700</bug_when>
    <thetext>Comment on attachment 290695
Updated patch

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

Yep.  Moves the code.  Great.  r=me

&gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:80
&gt; +        SHA1 sha1;

You should probably migrate away from SHA1, it being theoretically not cryptographically secure and all...

&gt; Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp:86
&gt; -    ResourceHandle::setIgnoreSSLErrors(ignoreTLSErrors);
&gt; +    SoupNetworkSession::setShouldIgnoreTLSErrors(ignoreTLSErrors);

It seems like we should work towards removing this, too.  Very bad things can happen when we ignore TLS errors.

&gt; Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp:91
&gt; -    ResourceHandle::setClientCertificate(host, certificateInfo.certificate());
&gt; +    SoupNetworkSession::allowSpecificHTTPSCertificateForHost(certificateInfo, host);

We are also moving away from allowing specific TLS certificates.  I&apos;m going to do this on Cocoa by using SecTrustEvaluateAsync with a few additional checks in the NetworkProcess after receiving the server trust evaluation challenge.  This will avoid IPC and allow us to quickly and asynchronously connect to most HTTPS servers that use modern TLS and valid certificates.  In the case where it fails such as on badssl.com we will send IPC to the UIProcess which has the option of responding and saying to trust the server even though it&apos;s probably unsafe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236569</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-05 00:51:26 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; What&apos;s the problem of using SHA1 here? What&apos;s the security problem exactly?
I see certificates and SHA1 and think &quot;Somebody could theoretically create a collision and something unexpected could happen and that&apos;s really bad with certificates.&quot;  I&apos;m not sure what the exact attack would look like, but it&apos;s up to you to decide whether that&apos;s important enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236572</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-05 00:58:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 290695 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290695&amp;action=review
&gt; 
&gt; Yep.  Moves the code.  Great.  r=me

Thanks!

&gt; &gt; Source/WebCore/platform/network/soup/SoupNetworkSession.cpp:80
&gt; &gt; +        SHA1 sha1;
&gt; 
&gt; You should probably migrate away from SHA1, it being theoretically not
&gt; cryptographically secure and all...

I&apos;m not security expert, but I don&apos;t see the security problem here yet, I can understand it&apos;s not safe to use SHA1 for signing something or hashing private info like a password, but here we just want to get a checksum to make comparisons.

&gt; &gt; Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp:86
&gt; &gt; -    ResourceHandle::setIgnoreSSLErrors(ignoreTLSErrors);
&gt; &gt; +    SoupNetworkSession::setShouldIgnoreTLSErrors(ignoreTLSErrors);
&gt; 
&gt; It seems like we should work towards removing this, too.  Very bad things
&gt; can happen when we ignore TLS errors.

This is disabled by default of course, and only enabled when explicitly set by API users. See GTK+ API for example:
 https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebContext.html#WebKitTLSErrorsPolicy

The default is fail, of course, and web browser applications should never change that setting.

&gt; &gt; Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp:91
&gt; &gt; -    ResourceHandle::setClientCertificate(host, certificateInfo.certificate());
&gt; &gt; +    SoupNetworkSession::allowSpecificHTTPSCertificateForHost(certificateInfo, host);
&gt; 
&gt; We are also moving away from allowing specific TLS certificates.  I&apos;m going
&gt; to do this on Cocoa by using SecTrustEvaluateAsync with a few additional
&gt; checks in the NetworkProcess after receiving the server trust evaluation
&gt; challenge.  This will avoid IPC and allow us to quickly and asynchronously
&gt; connect to most HTTPS servers that use modern TLS and valid certificates. 
&gt; In the case where it fails such as on badssl.com we will send IPC to the
&gt; UIProcess which has the option of responding and saying to trust the server
&gt; even though it&apos;s probably unsafe.

I&apos;ll see if we can do something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236573</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-05 01:01:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #3)
&gt; &gt; What&apos;s the problem of using SHA1 here? What&apos;s the security problem exactly?
&gt; I see certificates and SHA1 and think &quot;Somebody could theoretically create a
&gt; collision and something unexpected could happen and that&apos;s really bad with
&gt; certificates.&quot;  I&apos;m not sure what the exact attack would look like, but it&apos;s
&gt; up to you to decide whether that&apos;s important enough.

hmm, I see, thanks for the clarification. I don&apos;t think it&apos;s so urgent to block this anyway, we can open a bug report for this and Michael can contribute a patch :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236581</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-05 02:46:06 -0700</bug_when>
    <thetext>Committed r206807: &lt;http://trac.webkit.org/changeset/206807&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236595</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-10-05 03:49:11 -0700</bug_when>
    <thetext>&gt; (In reply to comment #3)
&gt; &gt; What&apos;s the problem of using SHA1 here? What&apos;s the security problem exactly?
&gt; I see certificates and SHA1 and think &quot;Somebody could theoretically create a
&gt; collision and something unexpected could happen and that&apos;s really bad with
&gt; certificates.&quot;  I&apos;m not sure what the exact attack would look like, but it&apos;s
&gt; up to you to decide whether that&apos;s important enough.

Yeah, the problem is an attacker could theoretically get a totally different certificate to be accepted. There have been very similar practical attacks published recently that work on all implementations, no need to introduce a WebKit-specific problem too. Bug #162965.

(In reply to comment #6)
&gt; It seems like we should work towards removing this, too.  Very bad things
&gt; can happen when we ignore TLS errors.

Unfortunately it&apos;s exposed in our API, in case applications want to shoot themselves in the foot. I&apos;m not aware of any applications that are using it, though.

&gt; &gt; Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp:91
&gt; &gt; -    ResourceHandle::setClientCertificate(host, certificateInfo.certificate());
&gt; &gt; +    SoupNetworkSession::allowSpecificHTTPSCertificateForHost(certificateInfo, host);
&gt; 
&gt; We are also moving away from allowing specific TLS certificates.  I&apos;m going
&gt; to do this on Cocoa by using SecTrustEvaluateAsync with a few additional
&gt; checks in the NetworkProcess after receiving the server trust evaluation
&gt; challenge.  This will avoid IPC and allow us to quickly and asynchronously
&gt; connect to most HTTPS servers that use modern TLS and valid certificates. 
&gt; In the case where it fails such as on badssl.com we will send IPC to the
&gt; UIProcess which has the option of responding and saying to trust the server
&gt; even though it&apos;s probably unsafe.

This is exposed in our API too, but it&apos;s only used to implement the functionality you described, so I&apos;m not sure what the problem is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236631</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-05 08:40:07 -0700</bug_when>
    <thetext>Cocoa still uses allowSpecificHTTPSCertificateForHost, so it&apos;s not ready for deprecation yet, but in the hopefully-not-too-distant-future we should work towards deprecating those APIs and having them do nothing.  Asynchronously responding to challenges in the UIProcess is the way of the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236656</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-10-05 09:18:13 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Cocoa still uses allowSpecificHTTPSCertificateForHost, so it&apos;s not ready for
&gt; deprecation yet, but in the hopefully-not-too-distant-future we should work
&gt; towards deprecating those APIs and having them do nothing.  Asynchronously
&gt; responding to challenges in the UIProcess is the way of the future.

OK, I understand. Our existing API can actually be implemented that way, so it will be more code for us but not a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239341</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2016-10-12 10:06:22 -0700</bug_when>
    <thetext>Followup to address build failure:

https://bugs.webkit.org/show_bug.cgi?id=163340</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290607</attachid>
            <date>2016-10-04 09:34:18 -0700</date>
            <delta_ts>2016-10-05 00:29:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-tls-errors.diff</filename>
            <type>text/plain</type>
            <size>13818</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NmY4ZTA0OS4uNDk5OGFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI4
IEBACiAyMDE2LTEwLTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAorICAgICAgICBbU09VUF0gTW92ZSBnbG9iYWwgVExTIGVycm9ycyBoYW5kbGluZyBmcm9t
IFJlc291cmNlSGFuZGxlIHRvIFNvdXBOZXR3b3JrU2Vzc2lvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTEwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gdGhhdCBpdCB3aWxsIGJlIHNoYXJlZCB3
aXRoIG5ldHdvcmsgc2Vzc2lvbiBjb2RlLiBBbHNvIHJlbW92ZSBzZXRIb3N0QWxsb3dzQW55SFRU
UFNDZXJ0aWZpY2F0ZSgpIHRoYXQgd2UgaGF2ZQorICAgICAgICBuZXZlciBhY3R1YWxseSB1c2Vk
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKTogVXNlIFNvdXBOZXR3b3JrU2Vz
c2lvbjo6Y2hlY2tUTFNFcnJvcnMoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
U291cE5ldHdvcmtTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhvc3RUTFNDZXJ0aWZp
Y2F0ZVNldDo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6Okhvc3RUTFNDZXJ0aWZpY2F0ZVNldDo6
Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRlU2V0Ojpjb21w
dXRlQ2VydGlmaWNhdGVIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OmNsaWVudENlcnRpZmljYXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246OnNldFNob3VsZElnbm9y
ZVRMU0Vycm9ycyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VwTmV0d29ya1Nlc3Npb246OmNoZWNr
VExTRXJyb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6YWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmg6CisKKzIwMTYtMTAtMDQgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtTT1VQXSBSZW1vdmUg
U1NMUG9saWN5RmxhZ3MgZnJvbSBTb3VwTmV0d29ya1Nlc3Npb24KICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjkwNgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggNTA1YTIxOC4uZGE2
YjA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaApAQCAtMTg1LDkgKzE4NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGVuc3VyZVJlYWRC
dWZmZXIoKTsKICAgICBzaXplX3QgY3VycmVudFN0cmVhbVBvc2l0aW9uKCkgY29uc3Q7CiAgICAg
dm9pZCBkaWRTdGFydFJlcXVlc3QoKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRIb3N0QWxsb3dzQW55
SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRDbGll
bnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3QsIEdUbHNDZXJ0aWZpY2F0ZSopOwotICAg
IHN0YXRpYyB2b2lkIHNldElnbm9yZVNTTEVycm9ycyhib29sKTsKICAgICBkb3VibGUgbV9yZXF1
ZXN0VGltZTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDE4NDhhY2IuLjJj
NTA3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC01OCw0OSArNTgsMTMgQEAKICNpbmNs
dWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1
ZmZlclNpemUgPSA4MTkyOwogCi1jbGFzcyBIb3N0VExTQ2VydGlmaWNhdGVTZXQgewotcHVibGlj
OgotICAgIHZvaWQgYWRkKEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUpCi0gICAgewotICAg
ICAgICBTdHJpbmcgY2VydGlmaWNhdGVIYXNoID0gY29tcHV0ZUNlcnRpZmljYXRlSGFzaChjZXJ0
aWZpY2F0ZSk7Ci0gICAgICAgIGlmICghY2VydGlmaWNhdGVIYXNoLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG1fY2VydGlmaWNhdGVzLmFkZChjZXJ0aWZpY2F0ZUhhc2gpOwotICAgIH0KLQotICAg
IGJvb2wgY29udGFpbnMoR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NlcnRpZmljYXRlcy5jb250YWlucyhjb21wdXRlQ2VydGlmaWNhdGVIYXNo
KGNlcnRpZmljYXRlKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBTdHJpbmcgY29t
cHV0ZUNlcnRpZmljYXRlSGFzaChHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKQotICAgIHsK
LSAgICAgICAgR1JlZlB0cjxHQnl0ZUFycmF5PiBjZXJ0aWZpY2F0ZURhdGE7Ci0gICAgICAgIGdf
b2JqZWN0X2dldChHX09CSkVDVChjZXJ0aWZpY2F0ZSksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZp
Y2F0ZURhdGEub3V0UHRyKCksIE5VTEwpOwotICAgICAgICBpZiAoIWNlcnRpZmljYXRlRGF0YSkK
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgICAgICBTSEExIHNoYTE7Ci0gICAg
ICAgIHNoYTEuYWRkQnl0ZXMoY2VydGlmaWNhdGVEYXRhLT5kYXRhLCBjZXJ0aWZpY2F0ZURhdGEt
Pmxlbik7Ci0KLSAgICAgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKLSAgICAgICAgc2hhMS5jb21w
dXRlSGFzaChkaWdlc3QpOwotCi0gICAgICAgIHJldHVybiBiYXNlNjRFbmNvZGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oZGlnZXN0LmRhdGEoKSksIFNIQTE6Omhhc2hTaXplKTsKLSAg
ICB9Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gbV9jZXJ0aWZpY2F0ZXM7Ci19OwotCiBzdGF0aWMg
Ym9vbCBjcmVhdGVTb3VwUmVxdWVzdEFuZE1lc3NhZ2VGb3JIYW5kbGUoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIHN0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSosIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpOwog
c3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0Kiwg
Z3BvaW50ZXIpOwpAQCAtMTEwLDIyICs3NCw2IEBAIHN0YXRpYyBkb3VibGUgbWlsaXNlY29uZHNT
aW5jZVJlcXVlc3QoZG91YmxlIHJlcXVlc3RUaW1lKTsKICNlbmRpZgogc3RhdGljIHZvaWQgY29u
dGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSopOwogCi1zdGF0aWMg
Ym9vbCBnSWdub3JlU1NMRXJyb3JzID0gZmFsc2U7Ci0KLXR5cGVkZWYgSGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gSG9zdHNTZXQ7Ci1zdGF0aWMgSG9zdHNTZXQmIGFs
bG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKEhvc3RzU2V0LCBob3N0cywgKCkpOwotICAgIHJldHVybiBob3N0czsKLX0K
LQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdFRMU0NlcnRpZmljYXRlU2V0LCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+IENlcnRpZmljYXRlc01hcDsKLXN0YXRpYyBDZXJ0aWZpY2F0ZXNN
YXAmIGNsaWVudENlcnRpZmljYXRlcygpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKENlcnRpZmljYXRlc01hcCwgY2VydGlmaWNhdGVzLCAoKSk7Ci0gICAgcmV0dXJuIGNl
cnRpZmljYXRlczsKLX0KLQogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxl
SW50ZXJuYWwoKQogewogfQpAQCAtMTgwLDM5ICsxMjgsMTkgQEAgc3RhdGljIGJvb2wgaXNBdXRo
ZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKGludCBodHRwU3RhdHVzQ29kZSkKICAgICByZXR1
cm4gaHR0cFN0YXR1c0NvZGUgPT0gU09VUF9TVEFUVVNfUFJPWFlfQVVUSEVOVElDQVRJT05fUkVR
VUlSRUQgfHwgaHR0cFN0YXR1c0NvZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEOwogfQog
Ci1zdGF0aWMgYm9vbCBoYW5kbGVVbmlnbm9yZWRUTFNFcnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgU291cE1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKGdJZ25vcmVTU0xFcnJvcnMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNh
dGUgPSBudWxscHRyOwotICAgIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIHRsc0Vycm9ycyA9IHN0YXRp
Y19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigwKTsKLSAgICBzb3VwX21lc3NhZ2VfZ2V0X2h0
dHBzX3N0YXR1cyhtZXNzYWdlLCAmY2VydGlmaWNhdGUsICZ0bHNFcnJvcnMpOwotICAgIGlmICgh
dGxzRXJyb3JzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgaG9zdCA9IGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpOwotICAgIGlmIChhbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhob3N0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gV2UgYXJlbid0IGlnbm9yaW5nIGVycm9ycyBnbG9iYWxseSwgYnV0IHRoZSB1
c2VyIG1heSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBhY2NlcHQgdGhpcyBjZXJ0aWZpY2F0ZS4K
LSAgICBhdXRvIGl0ID0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZmluZChob3N0KTsKLSAgICBpZiAo
aXQgIT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5kKCkgJiYgaXQtPnZhbHVlLmNvbnRhaW5zKGNl
cnRpZmljYXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBoYW5kbGUtPmNsaWVudCgp
LT5kaWRGYWlsKGhhbmRsZSwgUmVzb3VyY2VFcnJvcjo6dGxzRXJyb3IoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSwgdGxzRXJyb3JzLCBjZXJ0aWZpY2F0ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQot
CiBzdGF0aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIEdQYXJhbVNwZWMqLCBncG9pbnRlciBkYXRhKQogewogICAgIFJlZlB0cjxSZXNvdXJjZUhh
bmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihkYXRhKTsKICAgICBp
ZiAoIWhhbmRsZSB8fCBoYW5kbGUtPmNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoaGFuZGxlVW5pZ25vcmVkVExTRXJyb3JzKGhhbmRsZS5nZXQoKSwg
bWVzc2FnZSkpCisgICAgU291cE5ldHdvcmtTZXNzaW9uOjpjaGVja1RMU0Vycm9ycyhoYW5kbGUt
PmdldEludGVybmFsKCktPm1fc291cFJlcXVlc3QuZ2V0KCksIG1lc3NhZ2UsIFtoYW5kbGVdIChj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFp
bChoYW5kbGUuZ2V0KCksIGVycm9yKTsKICAgICAgICAgaGFuZGxlLT5jYW5jZWwoKTsKKyAgICB9
KTsKIH0KIAogc3RhdGljIHZvaWQgZ290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBtZXNz
YWdlLCBncG9pbnRlciBkYXRhKQpAQCAtODQ4LDIxICs3NzYsNiBAQCBib29sIFJlc291cmNlSGFu
ZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCiAgICAgcmV0dXJuICghY2xpZW50KCkg
fHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKHRoaXMpKSAmJiBmaXJzdFJl
cXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCk7CiB9CiAKLXZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYg
aG9zdCkKLXsKLSAgICBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5hZGQoaG9zdCk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0
cmluZyYgaG9zdCwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKLXsKLSAgICBjbGllbnRD
ZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdCwgSG9zdFRMU0NlcnRpZmljYXRlU2V0KCkpLml0ZXJhdG9y
LT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXRJ
Z25vcmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xFcnJvcnMpCi17Ci0gICAgZ0lnbm9yZVNTTEVy
cm9ycyA9IGlnbm9yZVNTTEVycm9yczsKLX0KLQogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGlu
dWVEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQ3JlZGVudGlhbCYgY3Jl
ZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSkKIHsKICAgICBBU1NFUlQoIWQtPm1fY3VycmVu
dFdlYkNoYWxsZW5nZS5pc051bGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCmluZGV4IGU2MzJk
ZWIuLjdjMzQ3MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0zNywxMiArMzcsMTcgQEAK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU0hBMS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorc3RhdGljIGJvb2wgZ0lnbm9yZVRMU0Vycm9yczsKKwogI2lmICFMT0dfRElTQUJMRUQKIGlu
bGluZSBzdGF0aWMgdm9pZCBzb3VwTG9nUHJpbnRlcihTb3VwTG9nZ2VyKiwgU291cExvZ2dlckxv
Z0xldmVsLCBjaGFyIGRpcmVjdGlvbiwgY29uc3QgY2hhciogZGF0YSwgZ3BvaW50ZXIpCiB7CkBA
IC01MCw2ICs1NSw0NiBAQCBpbmxpbmUgc3RhdGljIHZvaWQgc291cExvZ1ByaW50ZXIoU291cExv
Z2dlciosIFNvdXBMb2dnZXJMb2dMZXZlbCwgY2hhciBkaXJlY3RpbwogfQogI2VuZGlmCiAKK2Ns
YXNzIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCB7CitwdWJsaWM6CisgICAgdm9pZCBhZGQoR1Rsc0Nl
cnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKKyAgICB7CisgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0
ZUhhc2ggPSBjb21wdXRlQ2VydGlmaWNhdGVIYXNoKGNlcnRpZmljYXRlKTsKKyAgICAgICAgaWYg
KCFjZXJ0aWZpY2F0ZUhhc2guaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9jZXJ0aWZpY2F0ZXMu
YWRkKGNlcnRpZmljYXRlSGFzaCk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhHVGxzQ2Vy
dGlmaWNhdGUqIGNlcnRpZmljYXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2VydGlmaWNh
dGVzLmNvbnRhaW5zKGNvbXB1dGVDZXJ0aWZpY2F0ZUhhc2goY2VydGlmaWNhdGUpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFN0cmluZyBjb21wdXRlQ2VydGlmaWNhdGVIYXNoKEdU
bHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUpCisgICAgeworICAgICAgICBHUmVmUHRyPEdCeXRl
QXJyYXk+IGNlcnRpZmljYXRlRGF0YTsKKyAgICAgICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGNl
cnRpZmljYXRlKSwgImNlcnRpZmljYXRlIiwgJmNlcnRpZmljYXRlRGF0YS5vdXRQdHIoKSwgTlVM
TCk7CisgICAgICAgIGlmICghY2VydGlmaWNhdGVEYXRhKQorICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCisgICAgICAgIFNIQTEgc2hhMTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhjZXJ0
aWZpY2F0ZURhdGEtPmRhdGEsIGNlcnRpZmljYXRlRGF0YS0+bGVuKTsKKworICAgICAgICBTSEEx
OjpEaWdlc3QgZGlnZXN0OworICAgICAgICBzaGExLmNvbXB1dGVIYXNoKGRpZ2VzdCk7CisKKyAg
ICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihk
aWdlc3QuZGF0YSgpKSwgU0hBMTo6aGFzaFNpemUpOworICAgIH0KKworICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX2NlcnRpZmljYXRlczsKK307CisKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgSG9zdFRM
U0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBjbGllbnRDZXJ0aWZp
Y2F0ZXMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgSG9z
dFRMU0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjZXJ0aWZpY2F0
ZXM7CisgICAgcmV0dXJuIGNlcnRpZmljYXRlczsKK30KKwogU291cE5ldHdvcmtTZXNzaW9uJiBT
b3VwTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U291cE5ldHdvcmtTZXNzaW9uPiBuZXR3b3JrU2Vzc2lvbihzb3VwQ29va2llSmFy
KCkpOwpAQCAtMjc5LDYgKzMyNCw0MSBAQCB2b2lkIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0QWNj
ZXB0TGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYW5ndWFnZXMpCiAgICAgZ19vYmpl
Y3Rfc2V0KG1fc291cFNlc3Npb24uZ2V0KCksICJhY2NlcHQtbGFuZ3VhZ2UiLCBidWlsZEFjY2Vw
dExhbmd1YWdlcyhsYW5ndWFnZXMpLmRhdGEoKSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgU291cE5l
dHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJv
cnMpCit7CisgICAgZ0lnbm9yZVRMU0Vycm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKK30KKwordm9p
ZCBTb3VwTmV0d29ya1Nlc3Npb246OmNoZWNrVExTRXJyb3JzKFNvdXBSZXF1ZXN0KiBzb3VwUmVx
dWVzdCwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgUmVz
b3VyY2VFcnJvciYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChnSWdub3JlVExT
RXJyb3JzKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlID0gbnVsbHB0cjsK
KyAgICBHVGxzQ2VydGlmaWNhdGVGbGFncyB0bHNFcnJvcnMgPSBzdGF0aWNfY2FzdDxHVGxzQ2Vy
dGlmaWNhdGVGbGFncz4oMCk7CisgICAgc291cF9tZXNzYWdlX2dldF9odHRwc19zdGF0dXMobWVz
c2FnZSwgJmNlcnRpZmljYXRlLCAmdGxzRXJyb3JzKTsKKyAgICBpZiAoIXRsc0Vycm9ycykgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgVVJMIHVybChzb3VwX3JlcXVlc3RfZ2V0X3VyaShzb3VwUmVxdWVzdCkpOworICAgIGF1
dG8gaXQgPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5maW5kKHVybC5ob3N0KCkpOworICAgIGlmIChp
dCAhPSBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5lbmQoKSAmJiBpdC0+dmFsdWUuY29udGFpbnMoY2Vy
dGlmaWNhdGUpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcihSZXNvdXJjZUVycm9yOjp0bHNF
cnJvcihzb3VwUmVxdWVzdCwgdGxzRXJyb3JzLCBjZXJ0aWZpY2F0ZSkpOworfQorCit2b2lkIFNv
dXBOZXR3b3JrU2Vzc2lvbjo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNv
bnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3Qp
Cit7CisgICAgY2xpZW50Q2VydGlmaWNhdGVzKCkuYWRkKGhvc3QsIEhvc3RUTFNDZXJ0aWZpY2F0
ZVNldCgpKS5pdGVyYXRvci0+dmFsdWUuYWRkKGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZSgp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24u
aAppbmRleCBiNzA0ODYwLi45ZjFjMTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC0zMywxMCAr
MzMsMTUgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBDYWNoZSBTb3VwQ2FjaGU7CiB0eXBlZGVm
IHN0cnVjdCBfU291cENvb2tpZUphciBTb3VwQ29va2llSmFyOwordHlwZWRlZiBzdHJ1Y3QgX1Nv
dXBNZXNzYWdlIFNvdXBNZXNzYWdlOwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0IFNvdXBS
ZXF1ZXN0OwogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENlcnRpZmljYXRlSW5mbzsKK2NsYXNzIFJlc291cmNl
RXJyb3I7CisKIGNsYXNzIFNvdXBOZXR3b3JrU2Vzc2lvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU291cE5ldHdvcmtTZXNzaW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CkBAIC01OCw2ICs2MywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEFjY2VwdExhbmd1
YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCisgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxk
SWdub3JlVExTRXJyb3JzKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIGNoZWNrVExTRXJyb3JzKFNv
dXBSZXF1ZXN0KiwgU291cE1lc3NhZ2UqLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291
cmNlRXJyb3ImKT4mJik7CisgICAgc3RhdGljIHZvaWQgYWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlm
aWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYsIGNvbnN0IFN0cmluZyYgaG9zdCk7
CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFNvdXBOZXR3b3Jr
U2Vzc2lvbj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyMjAxM2YxLi5jYTEyZGFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsMTggQEAKIDIwMTYtMTAtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCisgICAgICAgIFtTT1VQXSBNb3ZlIGdsb2JhbCBUTFMgZXJyb3JzIGhh
bmRsaW5nIGZyb20gUmVzb3VyY2VIYW5kbGUgdG8gU291cE5ldHdvcmtTZXNzaW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5MTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgU291cE5ldHdvcmtT
ZXNzaW9uIGluc3RlYWQgb2YgUmVzb3VyY2VIYW5kbGUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNFcnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKworMjAxNi0x
MC0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAg
ICAgW1NPVVBdIFJlbW92ZSBTU0xQb2xpY3lGbGFncyBmcm9tIFNvdXBOZXR3b3JrU2Vzc2lvbgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTA2CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1By
b2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NTb3VwLmNwcAppbmRleCA1ZjRhMTkzLi5jZTA3NTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAu
Y3BwCkBAIC04MywxMiArODMsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1TZXRV
UkxDYWNoZVNpemUodW5zaWduZWQsIHVpbnQ2NF90KQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpz
ZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCiB7Ci0gICAgUmVzb3VyY2VI
YW5kbGU6OnNldElnbm9yZVNTTEVycm9ycyhpZ25vcmVUTFNFcnJvcnMpOworICAgIFNvdXBOZXR3
b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3JlVExTRXJyb3JzKGlnbm9yZVRMU0Vycm9ycyk7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9y
SG9zdChjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbywgY29uc3QgU3RyaW5n
JiBob3N0KQogewotICAgIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShob3N0
LCBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGUoKSk7CisgICAgU291cE5ldHdvcmtTZXNzaW9u
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGVJbmZvLCBo
b3N0KTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZUZvckFsbE9yaWdpbnMo
dWludDMyX3QgY2FjaGVzVG9DbGVhcikK
</data>
<flag name="review"
          id="313775"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290695</attachid>
            <date>2016-10-05 00:29:28 -0700</date>
            <delta_ts>2016-10-05 00:46:48 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wcore-tls-errors.diff</filename>
            <type>text/plain</type>
            <size>13781</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkNDNhMDFhLi4xNWJkN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjgg
QEAKIDIwMTYtMTAtMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtTT1VQXSBNb3ZlIGdsb2JhbCBUTFMgZXJyb3JzIGhhbmRsaW5nIGZyb20g
UmVzb3VyY2VIYW5kbGUgdG8gU291cE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5MTAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTbyB0aGF0IGl0IHdpbGwgYmUgc2hhcmVkIHdp
dGggbmV0d29yayBzZXNzaW9uIGNvZGUuIEFsc28gcmVtb3ZlIHNldEhvc3RBbGxvd3NBbnlIVFRQ
U0NlcnRpZmljYXRlKCkgdGhhdCB3ZSBoYXZlCisgICAgICAgIG5ldmVyIGFjdHVhbGx5IHVzZWQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2spOiBVc2UgU291cE5ldHdvcmtTZXNz
aW9uOjpjaGVja1RMU0Vycm9ycygpLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9T
b3VwTmV0d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmlj
YXRlU2V0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SG9zdFRMU0NlcnRpZmljYXRlU2V0Ojpj
b250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpIb3N0VExTQ2VydGlmaWNhdGVTZXQ6OmNvbXB1
dGVDZXJ0aWZpY2F0ZUhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Y2xpZW50Q2VydGlmaWNhdGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0U2hvdWxkSWdub3Jl
VExTRXJyb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbjo6Y2hlY2tU
TFNFcnJvcnMpOgorICAgICAgICAoV2ViQ29yZTo6U291cE5ldHdvcmtTZXNzaW9uOjphbGxvd1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaDoKKworMjAxNi0xMC0wNSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW1NPVVBdIE1vdmUgcmVx
dWVzdCBIVFRQIGJvZHkgaGFuZGxpbmcgdG8gUmVzb3VyY2VSZXF1ZXN0U291cCBhbmQgc2ltcGxp
ZnkgaXQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
Mjg5MQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmgKaW5kZXggNTA1YTIxOC4uZGE2YjA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtMTg1LDkgKzE4NSw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGVuc3VyZVJlYWRCdWZmZXIoKTsKICAgICBzaXplX3QgY3VycmVudFN0cmVh
bVBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBkaWRTdGFydFJlcXVlc3QoKTsKLSAgICBzdGF0
aWMgdm9pZCBzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmKTsK
LSAgICBzdGF0aWMgdm9pZCBzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGhvc3Qs
IEdUbHNDZXJ0aWZpY2F0ZSopOwotICAgIHN0YXRpYyB2b2lkIHNldElnbm9yZVNTTEVycm9ycyhi
b29sKTsKICAgICBkb3VibGUgbV9yZXF1ZXN0VGltZTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwCmluZGV4IDE4NDhhY2IuLjJjNTA3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBA
IC01OCw0OSArNTgsMTMgQEAKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9TSEExLmg+CiAjaW5jbHVkZSA8d3Rm
L2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29u
c3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA4MTkyOwogCi1jbGFzcyBIb3N0VExT
Q2VydGlmaWNhdGVTZXQgewotcHVibGljOgotICAgIHZvaWQgYWRkKEdUbHNDZXJ0aWZpY2F0ZSog
Y2VydGlmaWNhdGUpCi0gICAgewotICAgICAgICBTdHJpbmcgY2VydGlmaWNhdGVIYXNoID0gY29t
cHV0ZUNlcnRpZmljYXRlSGFzaChjZXJ0aWZpY2F0ZSk7Ci0gICAgICAgIGlmICghY2VydGlmaWNh
dGVIYXNoLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY2VydGlmaWNhdGVzLmFkZChjZXJ0aWZp
Y2F0ZUhhc2gpOwotICAgIH0KLQotICAgIGJvb2wgY29udGFpbnMoR1Rsc0NlcnRpZmljYXRlKiBj
ZXJ0aWZpY2F0ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NlcnRpZmljYXRlcy5jb250YWlu
cyhjb21wdXRlQ2VydGlmaWNhdGVIYXNoKGNlcnRpZmljYXRlKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNlcnRpZmljYXRlSGFzaChHVGxzQ2VydGlmaWNh
dGUqIGNlcnRpZmljYXRlKQotICAgIHsKLSAgICAgICAgR1JlZlB0cjxHQnl0ZUFycmF5PiBjZXJ0
aWZpY2F0ZURhdGE7Ci0gICAgICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChjZXJ0aWZpY2F0ZSks
ICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZURhdGEub3V0UHRyKCksIE5VTEwpOwotICAgICAg
ICBpZiAoIWNlcnRpZmljYXRlRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgICAgICBTSEExIHNoYTE7Ci0gICAgICAgIHNoYTEuYWRkQnl0ZXMoY2VydGlmaWNhdGVEYXRh
LT5kYXRhLCBjZXJ0aWZpY2F0ZURhdGEtPmxlbik7Ci0KLSAgICAgICAgU0hBMTo6RGlnZXN0IGRp
Z2VzdDsKLSAgICAgICAgc2hhMS5jb21wdXRlSGFzaChkaWdlc3QpOwotCi0gICAgICAgIHJldHVy
biBiYXNlNjRFbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGlnZXN0LmRhdGEo
KSksIFNIQTE6Omhhc2hTaXplKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gbV9jZXJ0
aWZpY2F0ZXM7Ci19OwotCiBzdGF0aWMgYm9vbCBjcmVhdGVTb3VwUmVxdWVzdEFuZE1lc3NhZ2VG
b3JIYW5kbGUoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIHN0YXRp
YyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSosIGJvb2wg
aXNEZXN0cm95aW5nID0gZmFsc2UpOwogc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhH
T2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOwpAQCAtMTEwLDIyICs3NCw2IEBAIHN0
YXRpYyBkb3VibGUgbWlsaXNlY29uZHNTaW5jZVJlcXVlc3QoZG91YmxlIHJlcXVlc3RUaW1lKTsK
ICNlbmRpZgogc3RhdGljIHZvaWQgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZShSZXNv
dXJjZUhhbmRsZSopOwogCi1zdGF0aWMgYm9vbCBnSWdub3JlU1NMRXJyb3JzID0gZmFsc2U7Ci0K
LXR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gSG9zdHNT
ZXQ7Ci1zdGF0aWMgSG9zdHNTZXQmIGFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGVIb3N0cygpCi17
Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEhvc3RzU2V0LCBob3N0cywgKCkp
OwotICAgIHJldHVybiBob3N0czsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdFRM
U0NlcnRpZmljYXRlU2V0LCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IENlcnRpZmljYXRlc01h
cDsKLXN0YXRpYyBDZXJ0aWZpY2F0ZXNNYXAmIGNsaWVudENlcnRpZmljYXRlcygpCi17Ci0gICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKENlcnRpZmljYXRlc01hcCwgY2VydGlmaWNh
dGVzLCAoKSk7Ci0gICAgcmV0dXJuIGNlcnRpZmljYXRlczsKLX0KLQogUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogewogfQpAQCAtMTgwLDM5ICsxMjgs
MTkgQEAgc3RhdGljIGJvb2wgaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKGludCBo
dHRwU3RhdHVzQ29kZSkKICAgICByZXR1cm4gaHR0cFN0YXR1c0NvZGUgPT0gU09VUF9TVEFUVVNf
UFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgfHwgaHR0cFN0YXR1c0NvZGUgPT0gU09VUF9T
VEFUVVNfVU5BVVRIT1JJWkVEOwogfQogCi1zdGF0aWMgYm9vbCBoYW5kbGVVbmlnbm9yZWRUTFNF
cnJvcnMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU291cE1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0g
ICAgaWYgKGdJZ25vcmVTU0xFcnJvcnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdU
bHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUgPSBudWxscHRyOwotICAgIEdUbHNDZXJ0aWZpY2F0
ZUZsYWdzIHRsc0Vycm9ycyA9IHN0YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigwKTsK
LSAgICBzb3VwX21lc3NhZ2VfZ2V0X2h0dHBzX3N0YXR1cyhtZXNzYWdlLCAmY2VydGlmaWNhdGUs
ICZ0bHNFcnJvcnMpOwotICAgIGlmICghdGxzRXJyb3JzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBTdHJpbmcgaG9zdCA9IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgp
OwotICAgIGlmIChhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoKS5jb250YWlucyhob3N0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2UgYXJlbid0IGlnbm9yaW5nIGVy
cm9ycyBnbG9iYWxseSwgYnV0IHRoZSB1c2VyIG1heSBoYXZlIGFscmVhZHkgZGVjaWRlZCB0byBh
Y2NlcHQgdGhpcyBjZXJ0aWZpY2F0ZS4KLSAgICBhdXRvIGl0ID0gY2xpZW50Q2VydGlmaWNhdGVz
KCkuZmluZChob3N0KTsKLSAgICBpZiAoaXQgIT0gY2xpZW50Q2VydGlmaWNhdGVzKCkuZW5kKCkg
JiYgaXQtPnZhbHVlLmNvbnRhaW5zKGNlcnRpZmljYXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KTsKLSAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKGhhbmRsZSwgUmVzb3VyY2VFcnJvcjo6
dGxzRXJyb3IoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgdGxzRXJyb3JzLCBjZXJ0aWZpY2F0ZSkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2Fs
bGJhY2soU291cE1lc3NhZ2UqIG1lc3NhZ2UsIEdQYXJhbVNwZWMqLCBncG9pbnRlciBkYXRhKQog
ewogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3Vy
Y2VIYW5kbGUqPihkYXRhKTsKICAgICBpZiAoIWhhbmRsZSB8fCBoYW5kbGUtPmNhbmNlbGxlZE9y
Q2xpZW50bGVzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFuZGxlVW5pZ25vcmVk
VExTRXJyb3JzKGhhbmRsZS5nZXQoKSwgbWVzc2FnZSkpCisgICAgU291cE5ldHdvcmtTZXNzaW9u
OjpjaGVja1RMU0Vycm9ycyhoYW5kbGUtPmdldEludGVybmFsKCktPm1fc291cFJlcXVlc3QuZ2V0
KCksIG1lc3NhZ2UsIFtoYW5kbGVdIChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgeworICAg
ICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGVycm9yKTsKICAgICAgICAg
aGFuZGxlLT5jYW5jZWwoKTsKKyAgICB9KTsKIH0KIAogc3RhdGljIHZvaWQgZ290SGVhZGVyc0Nh
bGxiYWNrKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQpAQCAtODQ4LDIxICs3
NzYsNiBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgp
CiAgICAgcmV0dXJuICghY2xpZW50KCkgfHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKHRoaXMpKSAmJiBmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0Nl
cnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCkKLXsKLSAgICBhbGxvd3NBbnlIVFRQU0NlcnRp
ZmljYXRlSG9zdHMoKS5hZGQoaG9zdCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENs
aWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0
aWZpY2F0ZSkKLXsKLSAgICBjbGllbnRDZXJ0aWZpY2F0ZXMoKS5hZGQoaG9zdCwgSG9zdFRMU0Nl
cnRpZmljYXRlU2V0KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoY2VydGlmaWNhdGUpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlOjpzZXRJZ25vcmVTU0xFcnJvcnMoYm9vbCBpZ25vcmVTU0xFcnJv
cnMpCi17Ci0gICAgZ0lnbm9yZVNTTEVycm9ycyA9IGlnbm9yZVNTTEVycm9yczsKLX0KLQogdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSkKIHsK
ICAgICBBU1NFUlQoIWQtPm1fY3VycmVudFdlYkNoYWxsZW5nZS5pc051bGwoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNz
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29y
a1Nlc3Npb24uY3BwCmluZGV4IGU2MzJkZWIuLjAzNjIyMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24u
Y3BwCkBAIC0zNywxMiArMzcsMTcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvU0hBMS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGJvb2wgZ0lnbm9yZVRMU0Vycm9yczsK
KwogI2lmICFMT0dfRElTQUJMRUQKIGlubGluZSBzdGF0aWMgdm9pZCBzb3VwTG9nUHJpbnRlcihT
b3VwTG9nZ2VyKiwgU291cExvZ2dlckxvZ0xldmVsLCBjaGFyIGRpcmVjdGlvbiwgY29uc3QgY2hh
ciogZGF0YSwgZ3BvaW50ZXIpCiB7CkBAIC01MCw2ICs1NSw0NiBAQCBpbmxpbmUgc3RhdGljIHZv
aWQgc291cExvZ1ByaW50ZXIoU291cExvZ2dlciosIFNvdXBMb2dnZXJMb2dMZXZlbCwgY2hhciBk
aXJlY3RpbwogfQogI2VuZGlmCiAKK2NsYXNzIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCB7CitwdWJs
aWM6CisgICAgdm9pZCBhZGQoR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSkKKyAgICB7Cisg
ICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0ZUhhc2ggPSBjb21wdXRlQ2VydGlmaWNhdGVIYXNoKGNl
cnRpZmljYXRlKTsKKyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUhhc2guaXNFbXB0eSgpKQorICAg
ICAgICAgICAgbV9jZXJ0aWZpY2F0ZXMuYWRkKGNlcnRpZmljYXRlSGFzaCk7CisgICAgfQorCisg
ICAgYm9vbCBjb250YWlucyhHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY2VydGlmaWNhdGVzLmNvbnRhaW5zKGNvbXB1dGVDZXJ0aWZp
Y2F0ZUhhc2goY2VydGlmaWNhdGUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFN0
cmluZyBjb21wdXRlQ2VydGlmaWNhdGVIYXNoKEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUp
CisgICAgeworICAgICAgICBHUmVmUHRyPEdCeXRlQXJyYXk+IGNlcnRpZmljYXRlRGF0YTsKKyAg
ICAgICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKGNlcnRpZmljYXRlKSwgImNlcnRpZmljYXRlIiwg
JmNlcnRpZmljYXRlRGF0YS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIGlmICghY2VydGlm
aWNhdGVEYXRhKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgICAgIFNIQTEg
c2hhMTsKKyAgICAgICAgc2hhMS5hZGRCeXRlcyhjZXJ0aWZpY2F0ZURhdGEtPmRhdGEsIGNlcnRp
ZmljYXRlRGF0YS0+bGVuKTsKKworICAgICAgICBTSEExOjpEaWdlc3QgZGlnZXN0OworICAgICAg
ICBzaGExLmNvbXB1dGVIYXNoKGRpZ2VzdCk7CisKKyAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkaWdlc3QuZGF0YSgpKSwgU0hBMTo6aGFz
aFNpemUpOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NlcnRpZmljYXRlczsKK307
CisKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgSG9zdFRMU0NlcnRpZmljYXRlU2V0LCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+JiBjbGllbnRDZXJ0aWZpY2F0ZXMoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoTWFwPFN0cmluZywgSG9zdFRMU0NlcnRpZmljYXRlU2V0LCBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjZXJ0aWZpY2F0ZXM7CisgICAgcmV0dXJuIGNlcnRpZmlj
YXRlczsKK30KKwogU291cE5ldHdvcmtTZXNzaW9uJiBTb3VwTmV0d29ya1Nlc3Npb246OmRlZmF1
bHRTZXNzaW9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U291cE5ldHdvcmtTZXNz
aW9uPiBuZXR3b3JrU2Vzc2lvbihzb3VwQ29va2llSmFyKCkpOwpAQCAtMjc5LDYgKzMyNCw0MSBA
QCB2b2lkIFNvdXBOZXR3b3JrU2Vzc2lvbjo6c2V0QWNjZXB0TGFuZ3VhZ2VzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYW5ndWFnZXMpCiAgICAgZ19vYmplY3Rfc2V0KG1fc291cFNlc3Npb24uZ2V0
KCksICJhY2NlcHQtbGFuZ3VhZ2UiLCBidWlsZEFjY2VwdExhbmd1YWdlcyhsYW5ndWFnZXMpLmRh
dGEoKSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJ
Z25vcmVUTFNFcnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCit7CisgICAgZ0lnbm9yZVRMU0Vy
cm9ycyA9IGlnbm9yZVRMU0Vycm9yczsKK30KKwordm9pZCBTb3VwTmV0d29ya1Nlc3Npb246OmNo
ZWNrVExTRXJyb3JzKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgUmVzb3VyY2VFcnJvciYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIGlmIChnSWdub3JlVExTRXJyb3JzKSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVGxzQ2Vy
dGlmaWNhdGUqIGNlcnRpZmljYXRlID0gbnVsbHB0cjsKKyAgICBHVGxzQ2VydGlmaWNhdGVGbGFn
cyB0bHNFcnJvcnMgPSBzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4oMCk7CisgICAg
c291cF9tZXNzYWdlX2dldF9odHRwc19zdGF0dXMobWVzc2FnZSwgJmNlcnRpZmljYXRlLCAmdGxz
RXJyb3JzKTsKKyAgICBpZiAoIXRsc0Vycm9ycykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVVJMIHVybChzb3VwX3JlcXVl
c3RfZ2V0X3VyaShzb3VwUmVxdWVzdCkpOworICAgIGF1dG8gaXQgPSBjbGllbnRDZXJ0aWZpY2F0
ZXMoKS5maW5kKHVybC5ob3N0KCkpOworICAgIGlmIChpdCAhPSBjbGllbnRDZXJ0aWZpY2F0ZXMo
KS5lbmQoKSAmJiBpdC0+dmFsdWUuY29udGFpbnMoY2VydGlmaWNhdGUpKSB7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihSZXNvdXJjZUVycm9yOjp0bHNFcnJvcihzb3VwUmVxdWVzdCwgdGxzRXJy
b3JzLCBjZXJ0aWZpY2F0ZSkpOworfQorCit2b2lkIFNvdXBOZXR3b3JrU2Vzc2lvbjo6YWxsb3dT
cGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCit7CisgICAgY2xpZW50Q2VydGlmaWNh
dGVzKCkuYWRkKGhvc3QsIEhvc3RUTFNDZXJ0aWZpY2F0ZVNldCgpKS5pdGVyYXRvci0+dmFsdWUu
YWRkKGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAppbmRleCBiNzA0ODYwLi45ZjFjMTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5l
dHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC0zMywxMCArMzMsMTUgQEAKIAogdHlwZWRlZiBzdHJ1
Y3QgX1NvdXBDYWNoZSBTb3VwQ2FjaGU7CiB0eXBlZGVmIHN0cnVjdCBfU291cENvb2tpZUphciBT
b3VwQ29va2llSmFyOwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBNZXNzYWdlIFNvdXBNZXNzYWdlOwor
dHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0IFNvdXBSZXF1ZXN0OwogdHlwZWRlZiBzdHJ1Y3Qg
X1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IENlcnRpZmljYXRlSW5mbzsKK2NsYXNzIFJlc291cmNlRXJyb3I7CisKIGNsYXNzIFNvdXBOZXR3
b3JrU2Vzc2lvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU291cE5ldHdvcmtTZXNzaW9u
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC01OCw2ICs2MywxMCBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldEFjY2VwdExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogCisgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkSWdub3JlVExTRXJyb3JzKGJvb2wpOwor
ICAgIHN0YXRpYyB2b2lkIGNoZWNrVExTRXJyb3JzKFNvdXBSZXF1ZXN0KiwgU291cE1lc3NhZ2Uq
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlRXJyb3ImKT4mJik7CisgICAgc3Rh
dGljIHZvaWQgYWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRp
ZmljYXRlSW5mbyYsIGNvbnN0IFN0cmluZyYgaG9zdCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIE5ldmVyRGVzdHJveWVkPFNvdXBOZXR3b3JrU2Vzc2lvbj47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA4MGE5YTRiLi5kMGYxYjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMTAt
MDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtTT1VQXSBNb3ZlIGdsb2JhbCBUTFMgZXJyb3JzIGhhbmRsaW5nIGZyb20gUmVzb3VyY2VIYW5k
bGUgdG8gU291cE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjI5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgU291cE5ldHdvcmtTZXNzaW9uIGluc3RlYWQgb2YgUmVzb3Vy
Y2VIYW5kbGUuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXRJZ25vcmVUTFNF
cnJvcnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hU
VFBTQ2VydGlmaWNhdGVGb3JIb3N0KToKKwogMjAxNi0xMC0wNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBLZXlib2FyZEV2ZW50LmNvZGUgZnJv
bSB0aGUgVUkgRXZlbnQgc3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IDVmNGExOTMuLmNlMDc1
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTgzLDEyICs4MywxMiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybVNldFVSTENhY2hlU2l6ZSh1bnNpZ25lZCwgdWludDY0X3QpCiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnNldElnbm9yZVRMU0Vycm9ycyhib29sIGlnbm9yZVRMU0Vycm9y
cykKIHsKLSAgICBSZXNvdXJjZUhhbmRsZTo6c2V0SWdub3JlU1NMRXJyb3JzKGlnbm9yZVRMU0Vy
cm9ycyk7CisgICAgU291cE5ldHdvcmtTZXNzaW9uOjpzZXRTaG91bGRJZ25vcmVUTFNFcnJvcnMo
aWdub3JlVExTRXJyb3JzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNh
dGVJbmZvLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7Ci0gICAgUmVzb3VyY2VIYW5kbGU6OnNldENs
aWVudENlcnRpZmljYXRlKGhvc3QsIGNlcnRpZmljYXRlSW5mby5jZXJ0aWZpY2F0ZSgpKTsKKyAg
ICBTb3VwTmV0d29ya1Nlc3Npb246OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZUluZm8sIGhvc3QpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVh
ckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQo=
</data>
<flag name="review"
          id="313861"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>